【ラズパイ】UbuntuのRunLevelを物理スイッチで操作出来るようにした。【Bash/GPIO】

Ubuntu

環境

Ubuntu 22.04.02 LTS
Raspberry Pi 4
20230611_225621.jpg

使用するPIN

  • 3.3v
  • GND
  • GPIO 17

回路

正直回路は雰囲気でやっている。自信はない。
kairo.png

書いたコード

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は夜に鬱陶しいが、レバースイッチなら一目でわかり触りやすいと思った。