Contents
はじめに
Raspberry Pi 3 Model B+にインストールしたDocker上で動かしたコンテナ内から、
GPIOの制御ができるのか気になったので、Lチカに挑戦しました。
環境
・Raspberry Pi 3 Model B+
・Raspbian GNU/Linux 9.8 (stretch)
手順
1. 配線
今回はLEDを下記のようにつなぎます。
2. Lチカを行うPythonファイルを作成
Lチカは、Pythonのプログラムによって実行するため、
下記のように、ファイルを作成します。
内容は、wiringpiというライブラリを使ってLEDの操作をしています。
blink.py
import wiringpi
import time, sys
LED_PORT = 4
wiringpi.wiringPiSetupGpio()
wiringpi.pinMode(LED_PORT, wiringpi.OUTPUT)
try:
while True:
wiringpi.digitalWrite(LED_PORT, wiringpi.HIGH)
time.sleep(0.3)
wiringpi.digitalWrite(LED_PORT, wiringpi.LOW)
time.sleep(0.3)
except KeyboardInterrupt:
wiringpi.pinMode(LED_PORT, wiringpi.INPUT)
3. Dockerfile作成
イメージを作成するためのDockerFileを作成します。
内容は、下記のように作成してください。
Dockerfile
FROM python:slim-buster
WORKDIR /app
COPY blink.py /app/
RUN apt-get update && apt-get install -y gcc \
iputils-ping
RUN cd /tmp \
wget https://project-downloads.drogon.net/wiringpi-latest.deb \
dpkg --add-architecture armhf \
dpkg -i wiringpi-latest.deb
RUN pip3 install --no-cache wiringpi
CMD ["python3", "blink.py"]
4. Dockerイメージの作成
上記の手順で作成したblink.pyとDockerfileがあるディレクトリで、
下記のコマンドを実行してDockerイメージをビルドします。
-tオプションをつけることで、名前:タグ
の形式で名前とタグを指定できます。
今回は、名前をblink、タグを1.0とつけました。
sudo docker build -t blink:1.0 .
ログが流れるので、正常終了することを確認します。
イメージが作成できたかを確認するには、下記のコマンドを実行します。
sudo docker images
5. イメージからコンテナを作成し、起動する
3の手順で作成したイメージからコンテナを作成し、起動します。下記のコマンドを実行します。
それぞれのオプションについては、
-itをつけることで、コマンド実行したターミナルでコンテナのプロセスを見ることができます。
–deviceでは、特定のデバイスに対する許可だけを加えることができます。
sudo docker run -it --device /dev/gpiomem blink:1.0
実行後しばらく待って、Lチカすれば成功です。
コマンド実行後は、ログなど何も出力するようにしていないので、コンソールでは処理が完了しない状態になると思います。
停止するには、Ctrl + c を入力してください。