🤖

余ってたラズパイ3をロボット用途にセットアップしたい

2023/01/04に公開

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