DockerコンテナからRaspberry PiのGPIO、I2C、シリアル通信を使用するためには、ホストOS(Raspberry PiのOS)のデバイスファイルへのアクセス権限を与える必要があります。
以下の手順を実行して、DockerコンテナからRaspberry PiのGPIO、I2C、シリアル通信を使用できるようにします。
ホストOS(Raspberry PiのOS)で、ユーザーを"docker"グループに追加します。これにより、ユーザーはsudoなしでdockerコマンドを実行できます。
sudo usermod -aG docker $USER
Dockerコンテナを実行するときに、ホストOSのデバイスファイルへのアクセス権限を与えます。以下は、GPIOピンのアクセス権限を与える例です。
docker run --privileged -v /dev/gpiomem:/dev/gpiomem <イメージ名>
I2Cやシリアル通信の場合も同様に、デバイスファイルへのアクセス権限を与える必要があります。例えば、I2Cデバイスを使用する場合は、以下のようにコマンドを実行します。
docker run --privileged -v /dev/i2c-1:/dev/i2c-1 <イメージ名>
Dockerイメージに必要なPythonライブラリをインストールして、GPIO、I2C、シリアル通信を制御するPythonスクリプトを実行します。Dockerイメージ内でPythonスクリプトを実行するには、次のようにコマンドを実行します。
docker exec <コンテナID> python <スクリプト名>.py
上記の手順で、DockerコンテナからRaspberry PiのGPIO、I2C、シリアル通信を使用することができます。ただし、注意点として、--privilegedオプションは、セキュリティ上のリスクを伴うため、必要最小限の権限を与えるようにしてください。また、Dockerコンテナ内でのGPIO、I2C、シリアル通信の制御には、Pythonライブラリの使用が必要になります。