【RaspberryPi Zero W】DockerコンテナからRaspberryPiのGPIO・I2C・シリアル通信を使う

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ライブラリの使用が必要になります。