余ってたラズパイ3をロボット用途にセットアップしたい
2023年のお正月、やることがなかったので家に転がってるラズパイ3で遊ぶためセットアップしたのでそのまとめです。
事前検討
題名にも書きましたが、ロボット用途に使いたい。ということで、以下要望があります。
- ディスプレイもキーボードも有線LANも繋げない
- OSが起動してるかどうかわかるとありがたい。
- 負荷が重い処理はノートPCを使用する
- OS起動後はSSHで操作。GUI不要。
- GPIOピンは使用する
- できるだけUSBデバイスは繋げない
使ったもの
項目 | 内容 |
---|---|
ハードウェア | Raspberry Pi 3 |
SDカード | 32GB |
OS | Ubuntu Server 22.04.01 LTS(32-bit) |
SDカードにOSイメージ書き込み
普段遣いのUbuntuPCでSDカードのイメージを作りました。
イメージ書き込みソフトはRasberry Pi Imager v1.7.3。
OSイメージは書き込み前にダウンロードしました。書き込み時にダウンロードすると遅く感じたからです。ダウンロードサイト
32-bitを選択した理由はラズパイ3はメモリが1GBしか無いため64-bitを選択するメリットが少なさそう、ということです。
ImagerでダウンロードしたOSを、ストレージはSDを選択しました。書き込む前にOSの初期設定を書いてしておきました。OS起動直後必ずやる設定を事前に書けるこの機能、便利ですね。はじめからWi−Fiでアクセスできますし。
起動後ときどき反応がなくなる問題の対応
WiFiのPower ManagementがOnになっているから?という想定のもと、Power ManagementをOffにする手順を探しました。
こちらの3パラグラフ目をそのまま使用しました。Ubuntu 21.10を使用されてたようですが、22.04でも動きました。ありがとうございます。
PIGPIOのインストール
Ubuntu Serverにはg++もmakeも入っていないのでインストールする必要がありました。
sudo apt install g++ make
その後、PIGPIOをインストールしました。
mkdir ~/tmp
cd ~/tmp
git clone https://github.com/joan2937/pigpio.git
cd pigpio
make
sudo make install
pigpiodの自動起動設定
pigpioライブラリを使う方法とpigpiodを介在させる方法とどちらが良いんでしょう?正直わかりません。pigpiodを使う方を選んだのは単に参考図書がそうだったから、と言うだけ。
ただ毎回sudo pigpiod
をするのは嫌なので、自動起動するようにsystemdに追加しました。
sudo cp util/pigpiod.service /lib/systemd/system
sudo vi /lib/systemd/system/pigpiod.service
書き換え後はこんな感じ。ExecStartの修正とExecStopの追加です。-lオプションはリモート町つけ無効化、-sオプションはサンプリング周期(??よくわかりません)の変更のため。
[Unit]
Description=Pigpio daemon
[Service]
Type=forking
PIDFile=pigpio.pid
ExecStart=/usr/local/bin/pigpiod -l -s 10
ExecStop=/usr/bin/systemctl kill pigpiod
[Install]
WantedBy=multi-user.target
こちらを参考にさせて戴きました。
systemctlコマンドで起動してみます。
sudo systemctl start pigpiod
うまく起動したか確認します。
sudo systemctl status pigpiod
停止できるか確認します。
sudo systemctl stop pigpiod
sudo systemctl status pigpiod
起動と停止が上手く行ったら自動起動を有効化します。
sudo systemctl enable pigpiod
一度リブートして自動起動したか確認しましょう。
ステータスLEDをもうちょっとわかりやすく
ディスプレイを繋がずに使っていると、起動しているかどうかはLEDでしか外見からは判断できません。そのため、オンボードでついているLEDの付き方で判断できるようにしました。
sudo vi /boot/firmware/config.txt
末尾の方に1行追加しました。cm4と書いてある上の行です。起動中は赤LEDがheartbeatになるようにしました。起動してないときは点灯状態になります。
dtparam=pwr_led_trigger=heartbeat
[cm4]
# Enable the USB2 outputs on the IO board (assuming your CM4 is plugged into
# such a board)
dtoverlay=dwc2,dr_mode=host
[all]
とりあえずまとめ
ということで、まずは動きました。必要に応じて追加していきます。
が、ロボットに積める日が果たしてくるのでしょうか。
Discussion