あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

自宅のRaspberry PiのOSをBookwormにする(2)

ラズピッピをBookwormにしていくやつの続き。今回は3A+で動かしているベランダとカーテンEjectの環境をBookwormに更新しました。

ベランダ版メダカメラ

これは先日の室内メダカメラが2カメラから1カメラに減っているだけなので、スクリプトの用意等は変わりません。が、カメラケーブルが長すぎるせいか、タイムアウトエラーが頻発して映像も荒れ放題でした。タイムアウト値の追加みたいな情報を見つけたりして試していましたが、どうやらOSのアップデートで解消したようにみえています。何だったんだ。

以下はメモ。

  • アップデート前: 0.2.0+rpt20240215-1
  • アップデート後: 0.2.0+rpt20240418-1

カメラのタイムアウトの話題はこことか色んなところで見られます。タイムアウト値を変えて様子見をしたあとOSのアップデートをしたら設定が上書きされて吹っ飛んでしまったものの、現在は安定していそうという感じです。

https://github.com/raspberrypi/libcamera/issues/139

先日更新した室内メダカメラも、ちょくちょくサービスがコケているようなので、なにか問題がある様子。カメラ周りはlibcameraになってから全然ですねえ。。

BME280センサー

ベランダに放ってるBME280センサーも、スクリプトは無改造で対応完了。サービスのパスをvenvに変える等だけで済みましたが、py-zabbixでuse_configを使っている場合にtry文のexceptの対象が違っていた(ValueErrorからAttributeErrorに変わった?)ので、ValueErrorを雑にカットしました。

$ vi venv/lib/python3.11/site-packages/pyzabbix/sender.py

        try:
            # python2
            args = inspect.getargspec(
                configparser.RawConfigParser.__init__).args
#        except ValueError:
        except:
            # python3
            args = inspect.getfullargspec(
                configparser.RawConfigParser.__init__).kwonlyargs

py-zabbix/pyzabbix/sender.py at master · adubkov/py-zabbix · GitHub

Inky Impressionサーバー

7色電子ペーパーREST APIで書き換えするサービス。こちらもvenvに移行するだけで済みました。

カーテンEject

カーテンEjectはbashで雑にGPIOでフォトカプラーをLチカするだけのものでしたが、sysfsを使用していたため、代替を見つける必要があります。

akkiesoft.hatenablog.jp

以前はこんな感じでやっていました。

#!/bin/bash

if [ ! -f /sys/class/gpio/gpio23/direction ] ; then
  echo "23" | sudo tee /sys/class/gpio/export > /dev/null
  echo "out" | sudo tee /sys/class/gpio/gpio23/direction > /dev/null
fi

echo 1 | sudo tee /sys/class/gpio/gpio23/value > /dev/null
sleep 0.1
echo 0 | sudo tee /sys/class/gpio/gpio23/value > /dev/null

代替としてはpinctrlコマンドを使えばいいようです。ヘルプからoutput周りの例を抜き出すとこんな感じ。

$ pinctrl help
(一部抜粋)
  pinctrl set 10 op        Set GPIO10 to be an output
  pinctrl set 10 dl        Set GPIO10 to output low/zero (must already be set as an output)
  pinctrl set 20 op pn dh  Set GPIO20 to output with no pull and driving high

これでOKそうですね。

#!/bin/bash

pinctrl set 23 op dh
sleep 0.1
pinctrl set 23 op dl

まとめ

やはりというかカメラ周りに若干の不安を感じますが、3A+でも一応なんとか動いてくれているので、これで様子見かなという気がします。

次はPXEブートしている環境をやっていきです。が、一旦コミケ向けの執筆に戻りましょうかね……。

https://akkiesoft.hatenablog.jp/entry/20200510/1589086380

自宅のRaspberry PiのOSをBookwormにする

Bookwormが出てからしばらくたちましたが、そう言えば自宅の常設ラズピッピはいまだにBusterとかBullseyeのままなので、ぼちぼち入れ替えをしようかなと思いたち、軽めのやつから手を付けてみました。コミケの原稿?アッハハハwwwいや、これをやってたら記事にできそうなことも出るかもしれないじゃないですかガハハww(そんなにない)

ブログに書くと、バックアップを取ったつもりが取っていなかったみたいなバカをしたときに、ブログからサルベージできることがわかったので、書きます。

夜ふかしアラート

うすい本に書いた、22時になるとミクにはよ寝ろと怒られ続けるだけの装置です。

booth.pm

やってることは3点で、照度センサーとスピーカーを使ったモノになります。

  • BH1750照度センサーの値をI2Cで読んで、明るかったらI2S接続のサウンドバイスでwavファイルを鳴らす
  • 照度をZabbixに送るもの
  • 日中の営業時間内に時報チャイムを鳴らす

/boot/firmware/config.txtの中身

# I2C
dtparam=i2c_arm=on

# オンボードサウンドはいちおう切っとく
#dtparam=audio=on
# I2S
dtoverlay=hifiberry-dac

# 一応BTを切る(Wi-Fiは切らないので多分節電にはならないけど)
dtoverlay=disable-bt

# ACT LEDはつけない
dtparam=act_led_trigger=none
dtparam=act_led_activelow=off

# ヘッドレスなPiZeroWなのでGPUをカツカツにしてRAMを稼ぐ
gpu_mem=32

wav再生はaplayなのでそのままでよく、mp3再生はmpg123を使用しました。

$ sudo apt install mpg123

Bookwormに採用のPython 3.11からは、pipでライブラリを使用するのにvenvが必要になったので、そうします。I2C周りはシステムパッケージpython3-smsubを使いたいのだけど、そう言うときにvenvとうまく合わせるには「--system-site-packages」を使うと良いらしいです。

$ sudo apt install python3-smbus
$ python3 -m venv --system-site-packages venv
$ source venv/bin/activate
(venv)$ pip install py-zabbix

crontab。いくつか端折りましたが、venvのpythonを使うにはvenvディレクトリ以下のpythonを呼べばOK。簡単でしたね。

 *  * * *   * /home/akkie/py-hayonero/bin/python3 /home/akkie/send-illuminance-to-zabbix.py
30 23 * * 0-4 /home/akkie/py-hayonero/bin/python3 /home/akkie/hayonero.py /home/akkie/04_hayakunenasai.wav

0 10-11,14-17 * * 1-5 /usr/bin/mpg123 /home/akkie/nc119745.mp3
0 9,12-13,18 * * 1-5 /usr/bin/mpg123 /home/akkie/Japanese_School_Bell04-1.mp3

あとはzabbix-agentをいれて完了。

CM4 デュアルカメラのメダカメラシステム

バックアップのtarballを作ったのに、tarballを転送し忘れたままBookworkのイメージを書き込んで再構築となりました……あほすぎる。スクリプトのバックアップもMacに保管されておらず、どうしようかと思いながらブログを探したら、Pi 5のときに試していた記事を見てUSB SSDスクリプトをコピーしていたのを確認。USB SSDから無事原稿のスクリプトをサルベージできました。ブログに書くのは大事なんやね。

akkiesoft.hatenablog.jp

餌やりのギミックに使っていたシェルスクリプトもブログからサルベージ。他のファイルたちは過去のスクリプトなので、再構築に必要なものは最低限揃いました。あぶねー。

akkiesoft.hatenablog.jp

スクリプトMacにバックアップを置いて、環境構築開始。まずはconfig.txt。CM4のデュアルカメラは、以前はデュアルカメラを有効化するdt-blob.binを作って置く必要がありましたが、いつの間にか不要になり、dtoverlayだけで使用できるようになりました。ただし、自動検出はだめらしいので、camera_auto_detect=1をコメントアウトしたうえで、カメラポートに接続したカメラのモデルと、cam0 or cam1のポート番号を明示する必要がありました。また、以前は入れていたgpu_memは、むしろカメラが使えなくなることがわかったので削除しています。

[all]
# 水温センサー用の1-Wire
dtoverlay=w1-gpio

# 餌やり装置用のUART
enable_uart=1
dtparam=uart0=on

# カメラの認識は手動の模様
# camera_auto_detect=1
dtoverlay=imx708,cam0
dtoverlay=imx219,cam1

# むしろカメラが使えなくなることがわかったので削除
# gpu_mem=512

# 電源LEDを切る
dtparam=pwr_led_trigger=none

カメラ周りの整備。夜ふかしアラートと同様、Picamera2はシステムパッケージを使い、残りはvenvとしました。1-Wire用ライブラリと、餌やりのServo2040をいじるようのadafruit-ampy(念のため)の2点。

$ sudo apt install python3-picamera2
$ python3 -m venv --system-site-packages venv
$ source venv/bin/activate
(venv)$ pip install w1thermsensor adafruit-ampy

あとはスクリプトをおき、systemdのserviceファイルを配置。こちらもpythonの実行パスはvenvを使います。

[Unit]
Description = Live camera daemon
Requires=network-online.target
Wants=network-online.target
After=network-online.target

[Service]
ExecStart = /home/akkie/venv/bin/python3 /home/akkie/livecam_libcamera_dual.py
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target

あとはzabbix-agentをいれて完了。

zabbix-agent

昔何気なしにどこかから拾って入れたと思われる、ラズピッピのCPU温度、クロック数、電圧を取るやつが動いていなかったので修正しました。

多分ここから拾ったのかも?

scripts/userparameter_rpi.conf · master · qrl / zabbix · GitLab

vcgencmdのパスを/usr/binに修正。

UserParameter=rpi.cpuClock,/usr/bin/vcgencmd measure_clock arm|cut -d"=" -f2
UserParameter=rpi.cpuVoltage,/usr/bin/vcgencmd measure_volts | tr -d "volt=" | tr -d "V"
UserParameter=rpi.cpuTemperature,cat /sys/class/thermal/thermal_zone*/temp

vcgencmdはvideoグループに所属している必要があるので、zabbixをvideoグループに入れました。

# コマンドでできた気がするけど忘れたので雑にファイル編集
$ sudo vi /etc/group

video:x:44:akkie,zabbix


$ sudo systemctl restart zabbix-agent

テンプレートはこれをインポートすればOKです。

zbx_template_rpi.xml · master · qrl / zabbix · GitLab

ホストにテンプレートを割り当ててやれば出てくるはず。


まとめ

きのうは2台をやっつけました。カメラ周りとvenv周りはうすい本にできそうなネタですね。深掘りの余地を感じます。

そして次はベランダ方面用の3A+に着手の予定。こいつはlibcamera移行前のBusterなので、カメラのリソース使用量が増える見込みなのがわかっていてアレですが、まあいい加減やらざるを得ない……がんばる。

コミケ(C104)当選しました

月曜日 西館 さ-25a 「こくだランドです。告知画像はMastodon SMHN鯖でおさけーさんが作ってるAI botに作らせて、文字は自分で乗せました。他にもしょうもない画像を吸うパターン作りましたが略。

月曜日の西館、デジタル(その他)しか見れそうなジャンルがなくて、我々同人ソフトの閑散系と、コスプレ・ギャルゲーで終わりっぽくて、これは当日冷房の効きがだいぶ良くなりそうだな(悪い意味で)って気がしています。どれも人であふれるジャンルに見えないけど、東館との配置バランスは大丈夫なのか……?今からすでにだいぶ不安かも。

さておき、新刊はいつものラズピッピ雑多本と、久々のEject本を予定しています。ラズピッピ本はPi 5を中心にいつもの物欲刺激を促すスタイルの本にしていくつもりです。まあブログの再編集みたいなもんともいう。

Ejectの方は気がつけば活動15年くらいになり、直近のコミケではむしろ若者が(在庫処分のまとめ本を)手に取り、面白がってくれることもあったので、再入門本として制作してみようとしています。入門は何度擦ってもいい、日経Linuxもやってる。

月曜日 西館 さ-25a 「こくだランドでお待ちしています。販売ブースを無人化でもして東に行きてえ〜〜。

Raspberry Pi AI Kit予約してみた

なんか出てきましたね。

https://www.raspberrypi.com/news/raspberry-pi-ai-kit-available-now-at-70/

raspi.jpの方にも書いてあります。

www.raspi.jp

AIとか機械学習とか基本触らないんですけど、OSCのデモのネタにでもなりゃええかみたいなノリで、PimoroniのPre-orderのやつをポチってみました。日本でもKSY/スイッチさんで販売予定のようなので、そちらを待っても良いと思います。

RPiでやる意義とは……みたいなところから勉強していく必要がある状態ですが、とは言え、Xかなんかに流れてた"生成AIの小学生向け塾"とか言う世も末コンテンツより、こう言うのを勉強の教材として学んでもらったほうが有意義なのかもしれませんね。しらんけど。

さておき、Pimoroniでの価格は送料を入れて62.25GBP……。おそらく八丁の10GbEスイッチが買える勢いでしたが、公式のM.2 HAT+もいずれは1枚持っておきたかったので、それのついでに買ったと思えば、まあ悪くないかなと思っています。

HAILO……ガラスメーカーを思い浮かべてしまうな(それはHARIO)。

モバイルモニターを買った

メルカリで中古品ですが、買いました。13.3インチで、価格は1万切ったくらいな感じでした。

これまでは、つついさんからいただいたモニターを活用していましたが、10インチで小さく、OSC名古屋に持っていったら小さく感じてしまったので、もう少し大きいやつがほしいなと思って買ってみた次第。機材箱に入れやすいサイズという点で13インチ台に決めて、相場とかスペック感を調べ、最終的に目星をつけた型の中古を漁ってキメました。

購入したのはEVICIVとか言うメーカーのものですが、どうやらJAPANNEXTも同じものを扱っているようで、先にJAPANNEXTのやつを見つけて、そこからいい感じに謎メーカー版を見つけられました。

んで、Pi 5を接続するとこんな感じ。1920x1200(16:10)なのが地味に嬉しいですね。インターフェースはスタンダードサイズのHDMIなので、ディスプレイ側は変換とかを考えなくてよいのは便利です。

Type-C入力も対応なので、Macもこのとおり。ただし、解像度が1080pになってしまったので、手動で1920x1200にする必要がありました。

まだ試してませんが、モバイルモニターとしては多分珍しく、miniDPポートもあるので、これもいつか役に立ちそうな気がしてます。

あとはOSC機材箱に入れて運搬して壊れなければOKかなって感じですが、どうなるやら。最悪カバンに入れてハンドキャリーでも良いかもですが。