RaspberryPi 4B+Ubuntu 21+DockerからLEDを操作
環境
- Raspberry Pi 4B
- Mac OSX Monterey
手順
SDカードを用意
- ここ(https://www.raspberrypi.com/software/)からRaspberry Pi Imagerをダウンロード&インストール
- Raspberry Pi Imagerを起動
- CHOOSE OS -> Other general purpose OS -> Ubuntu -> Ubuntu Desktop 21.10 64-bitを選択
- CHOOSE STORAGE -> 接続したSDカードを選択
Ubuntuの初期設定
本節のみRaspberry Piにディスプレイ、有線マウス、有線キーボードを繋いで直接操作する
(他の節の作業は別端末から)
- Raspberry Piにディスプレイ、有線マウス、有線キーボードを繋いで電源を接続
- Ubuntuの初期設定(言語、キーボードレイアウト、Wifi接続、ユーザー作成)
- ターミナルを開いて、下記のコマンドを実行
$ sudo apt update & sudo apt -y upgrade
$ sudo apt install openssh-server
- opensshの動作確認
$ sudo systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-12-17 15:23:57 JST; 18min ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 788 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 807 (sshd)
Tasks: 1 (limit: 8895)
Memory: 4.0M
CPU: 196ms
CGroup: /system.slice/ssh.service
└─807 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups - IPアドレスの確認
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether e4:5f:01:71:c7:34 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether e4:5f:01:71:c7:35 brd ff:ff:ff:ff:ff:ff
inet 192.168.11.5/24 brd 192.168.11.255 scope global dynamic noprefixroute wlan0
valid_lft 171693sec preferred_lft 171693sec
inet6 fe80::a407:d150:b9a1:38f4/64 scope link noprefixroute
valid_lft forever preferred_lft forever
この後、固定IPを割り当てれば、電源を切っても確実にRaspberry Piに繋げられるが方法は調査中
sshでRaspberry Piに接続
- 別のPCのターミナルから下記のコマンドでssh接続
% ssh ubuntu@192.168.11.5
- パスワードを入力してログイン完了
ubuntu@192.168.11.5's password:
これ以降、別PCからターミナルでsshに繋いだ状態でRaspberry PiのUbuntu上で作業する
Dockerインストール
- 公式サイトの手順通りに下記のコマンドを実行していく
$ sudo apt-get update
$ sudo apt-get install -y ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install -y docker-ce docker-ce-cli containerd.io
Dockerイメージ作成
- 作業ディレクトリ作成して移動
$ pwd
/home/ubuntu
$ mkdir docker
$ cd docker - Dockerfileを作成する
$ touch Dockerfile
- 下記の内容を書き込み(
nano
で開くなら、$ nano Dockerfile
)
FROM resin/rpi-raspbian:stretch RUN echo "deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi firmware" > /etc/apt/sources.list RUN apt-get update -y RUN apt-get install -y --no-install-recommends \ vim git less wget \ build-essential \ libatlas-base-dev \ python3-pip python3-dev python3-setuptools\ python3-scipy python3-h5py \ libraspberrypi-bin \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN pip3 install --upgrade pip setuptools RUN pip3 install rpi.gpio
- ビルドする
$ sudo docker build -t rpi/rpi:0.1 .
- ビルド時、下記のWarningが出た。ベースのイメージを変えた方がよさそう(? 要調査)。
__ ___ ___ _ _ ___ _ _ ___
\ \ / /_\ | _ \ \| |_ _| \| |/ __|
\ \/\/ / _ \| / .` || || .` | (_ |
\_/\_/_/ \_\_|_\_|\_|___|_|\_|\___|
======================================
resin base images have been deprecated
in favour of the new balenalib images,
read more about it in our docs:https://www.balena.io/docs/refe
rence/base-images/base-images/
====================================== - Python3.5に関する下記のWarningも出たのでPythonのバージョンも上げたい
DEPRECATION: Python 3.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality.
- ビルド時、下記のWarningが出た。ベースのイメージを変えた方がよさそう(? 要調査)。
- imagesを確認
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rpi/rpi 0.1 4d88efe98f33 1 hours ago 596MB
resin/rpi-raspbian stretch 524f39464d9c 2 years ago 139MB
Dockerコンテナの起動・イメージの
- コンテナを起動(下記のコマンドでrootユーザーとしてコンテナ内部に入れる)
$ docker run --name rpi_test -ti --privileged rpi/rpi:0.1 /bin/bash
root@0258b2187f09:/#
- エディターをインストール、作業ファイルに移動して.pyファイルを作成
# apt update
# apt install nano
# mkdir /home/ws# cd /home/ws
# nano test.py - 下記の内容を書き込み(GPIO 17でLEDを光らせるコード)、保存
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(17, GPIO.OUT) while True: GPIO.output(17, True) time.sleep(1) GPIO.output(17, False) time.sleep(1)
- 回路を確認(次節)し、
test.py
を実行# python3 test.py
- LEDが点滅することを確認
今回使った回路
(Raspberry Pi GPIO 17) — (足長 LED 足短) — (抵抗 1kΩ) — (Raspberry Pi Ground)
ディスカッション
コメント一覧
まだ、コメントがありません