はじめに

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 を入力してください。