【ラズパイ】UbuntuのRunLevelを物理スイッチで操作出来るようにした。【Bash/GPIO】
Ubuntu環境
Ubuntu 22.04.02 LTS
Raspberry Pi 4
使用するPIN
- 3.3v
- GND
- GPIO 17
回路
正直回路は雰囲気でやっている。自信はない。
書いたコード
cronに登録して定期的にスイッチの状態を確認する。
runlevelコマンドは、起動直後にunknownを返す場合がある為、elseを使わない。
配線を外している場合はCUIになるようにしている。
#!/bin/bash
inPin=17
#in setup
echo "${inPin}" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio${inPin}/direction
# 変更があれば1
bool=0
# 入力PINの状態
check=`cat /sys/class/gpio/gpio${inPin}/value`
# 現在のrunlevel
level=`runlevel | sed -e s/^..//g`
#echo "check"
#echo ${check}
#echo "level"
#echo ${level}
if [ ${check} -eq 0 ] && [ ${level} -eq 5 ]; then
bool=1
echo "Change to OFFLINE , Start CUI mode"
systemctl set-default multi-user.target
elif [ ${check} -eq 1 ] && [ ${level} -eq 3 ]; then
bool=1
echo "Change to ONLINE , Start GUI mode"
systemctl set-default graphical.target
else
echo "正常"
fi
# pinを解放
echo "${inPin}" > /sys/class/gpio/unexport
# 変更があれば再起動。
if [ ${bool} -eq 1 ]; then
shutdown -r now
fi
配線
秋月電子からこれらを買ってきた。
ここにないものは抵抗位だろうか。
コネクタ付ケーブル 20cm 40P オスメス: パーツ一般 秋月電子通商-電子部品・ネット通販
L型ピンソケット 2×20(40P): パーツ一般 秋月電子通商-電子部品・ネット通販
基板用小型3Pトグルスイッチ 1回路2接点: パーツ一般 秋月電子通商-電子部品・ネット通販
2種ポリウレタン銅線 2UEW 0.4mm 10m: パーツ一般 秋月電子通商-電子部品・ネット通販
片面ガラスコンポジット・ユニバーサル基板 Cタイプ めっき仕上げ (72×47mm) 日本製: パーツ一般 秋月電子通商-電子部品・ネット通販
用途
最近ラズパイ4に大型のファンを取り付けたので、もっと活用の幅を増やしたいと思った。
DeskTopを起動したときのみログをとるような機能を積んでいる。
しかし、これは外出中以外は動作させたくないものなので、気軽にOn/Off出来るようにしてみた。
LEDは夜に鬱陶しいが、レバースイッチなら一目でわかり触りやすいと思った。