Raspberry Pi + DockerでLEDを光らせる

概要

ラズパイことはじめな記事

Components

  • Raspberry Pi 3 B+
  • microSD 16GB
  • Hypriot
    • 1.9.0
  • Docker
    • Hypriotにデフォルトで入っているバージョン
  • Python
    • 3.7.2

手順

1. LEDを光らせるコードを用意する

led.py

# -*- coding: utf-8 -*-

import time
import RPi.GPIO as GPIO

#FIXME: YOUR BCM NUMBER
LED = 14

GPIO.setmode(GPIO.BCM)
GPIO.setup(LED, GPIO.OUT, initial=GPIO.LOW)

GPIO.output(LED, 1)

GPIO.cleanup(LED)

Dockerfile

FROM python:3-alpine

WORKDIR /app

COPY leds.py entrypoint.py /app/

RUN apk add --no-cache python3-dev libffi-dev openssl-dev build-base musl \
   && pip3 install --no-cache --upgrade pyserial RPi.GPIO

CMD ["python", "leds.py"]

2. RaspberryPiを用意する

ハードの用意

今回は以下の環境を用意した

  • Raspberry Pi 3 B+
  • SDカード 16GB
  • スイッチハブ(BUFFALO製のなにか)
  • LANケーブル x2
    • スイッチ配下へMacとRaspberryPiを置く
  • LED

flashのインストール

SDカードのフォーマットとOSのインストールを行ってくれるHypriot製ツール

$ brew install wget pv awscli

$ curl -LO https://github.com/hypriot/flash/releases/download/2.1.1/flash
$ chmod +x flash
$ sudo mv flash /usr/local/bin/flash

SDカードへHypriot OSのインストール

OSはRaspbianではなくHypriotを使用する。
最初からdockerやsshd有効化されていたり、cloud-initが使用可能。
インストールは以下のワンコマンドで完了する。

$ flash https://github.com/hypriot/image-builder-rpi/releases/download/v1.9.0/hypriotos-rpi-v1.9.0.img.zip

wi-fiの場合別途cloud-initを記載する必要有り

3. DockerでLEDを動かす

macからsshログイン

$ ssh pirate@black-pearl.local
# パスワードは"hypriot"

コードをコピペ

$ cat <<EOL > led.py
# 上記のpythonコード
EOL
$ cat <<EOL > Dockerfile
# 上記のDockerfile
EOL

dockerのビルドをしてrun。
runする際に /dev/gpiomem をボリュームマウントすることがポイント

$ docker build -t led .
$ docker run --device /dev/gpiomem led

f:id:y-ohgi:20190223141043p:plain

残課題

  • macからARM向けのイメージをビルドする