PiSugar3 Plusのセットアップ
ソフトウェアのインストール
pi で次のスクリプトを実行します。
curl http://cdn.pisugar.com/release/pisugar-power-manager.sh | sudo bash
OTAファームウェアのアップグレード
curl https://cdn.pisugar.com/release/PiSugarUpdate.sh | sudo bash
i2cアドレスを確認する
$ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- 57 -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
0x57と0x68の2つのアドレスが確認できます。
0x57がPiSugarのi2cアドレス
0x68はRTCのi2cアドレス
Pythonで電源監視プログラムを作成します
Pythonでi2cを使用するために、smbusモジュールをインストールします。
pip install smbus
電源の切断を監視して、5秒後にRaspberry PiをシャットダウンさせるためのPythonプログラムを作成します
nano PiSugerPowerDown.py
#!/usr/bin/env python3
import smbus
import time
import os
#SMBusの引数に1を指定する。Raspberry Piのi2cバスの番号
i2c = smbus.SMBus(1)
#デバイスのアドレス 0x68
addr = 0x57
# シャットダウンまでの時間を指定(5秒)
THRESHOLD = 5
while True:
cnt = 0
# print("待機中")
while True:
state = i2c.read_byte_data(addr, 0x02)
if not ((state & 0x80) == 0x80):
print("電源切断")
cnt += 0.05
if cnt >= THRESHOLD:
os.system("sudo shutdown -h now")
break
if cnt > 0 and ((state & 0x80) == 0x80):
print("電源復旧")
break
if cnt == 0:
break
time.sleep(0.05)
systemdで自動起動させる
systemsを使用して、電源監視プログラムを自動起動させます。
/etc/systemd/systemにPiSugarPWDWN.serviceというファイルを作成します。
sudo nano /etc/systemd/system/PiSugarPWDWN.service
[Unit]
Description=PiSugar3 Plus PowerDown Check
[Service]
ExecStart=/usr/bin/python3 /home/trip/PiSugarPowerDown.py
Restart=always
[Install]
WantedBy=multi-user.target
以下のコマンドを使用して、systemdを使ってサービスを起動します
sudo systemctl start PiSugarPWDWN.service
サービスの起動が確認できたら、自動起動を設定します。
以下コマンドを実行します。
sudo systemctl enable PiSugarPWDWN.service
以下のコマンドを使用して、サービスの動作確認ができます。
sudo systemctl status PiSugarPWDWN.service
● PiSugerPWDWN.service - PiSugar3 Plus PowerDown Check
Loaded: loaded (/etc/systemd/system/PiSugarPWDWN.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-09-20 11:37:05 JST; 57min ago
Main PID: 596 (python3)
Tasks: 1 (limit: 1624)
CPU: 2min 23.874s
CGroup: /system.slice/PiSugerPWDWN.service
└─596 /usr/bin/python3 /home/trip/PiSugarPowerDown.py
9月 20 11:37:05 pios systemd[1]: Started PiSugar3 Plus PowerDown Check.
電源の再接続で、起動できるようにPiSugar3 Plusの設定を行う
https://github.com/PiSugar/PiSugar/wiki/PiSugar-3-Seriesを見ると、0x02アドレスの4番目のビットにオン(1)にすると電源の再接続でPiSugarが起動するようになります。
0x02アドレスを読んでみて、現在の設定を確認します。
sudo i2cget -y 1 0x57 0x02
0xec
4ビット目はオフ(0)なので、設定を変更して動作を確認します。
0x0bを読み込んでみて書き込み可能かどうか確認します。
sudo i2cget -y 1 0x57 0x0b
0x00
0x00で書き込み不可
0x0bアドレスに0x29を書き込むとが書き込み保護が解除されて0x02アドレスに設定書き込むことができるようになります。
sudo i2cset -y 1 0x57 0x0b 0x29
もう一度、0x0bを読み込んでみて書き込み可能かどうか確認します。
sudo i2cget -y 1 0x57 0x0b
0x01
0x01で、書き込みができるようになっています。
0x02アドレスの4ビット目をオン(1)にして起動できるか確認を行います。
sudo i2cset -y 1 0x57 0x02 0x7c
もう一度、0x02アドレスを読んでみて、設定できているか確認します。
sudo i2cget -y 1 0x57 0x02
0xfc
4ビット目はオン(1)なって、設定ができています。
電源監視プログラムの動作確認を含めて確認をしてみます。
PiSugar3 Plusから電源(USB Type-C)を取り外します。
電源切断を認識して5秒後にRaspberry Piがシャットダウンされます。
PiSugar3 Plusに電源(USB Type-C)をつなげると起動します。
起動後、0x02アドレスを確認してみます。
sudo i2cget -y 1 0x57 0x02
0xec
4ビット目がオフ(0)に戻っていて設定は保持されないようなので、起動時に設定を行うようにします。
設定を行うPythonプログラムを作成します。
nano PiSugarStartup.py
#!/usr/bin/env python3
import smbus
# SMBusの引数に1を指定する。Raspberry Piのi2cバスの番号
i2c = smbus.SMBus(1)
# デバイスのアドレス 0x68
addr = 0x57
# 書き込み保護の解除
i2c.write_byte_data(addr, 0x0b, 0x29)
# Automatically resume booting when power is reconnected
i2c.write_byte_data(addr, 0x02, 0x7C)
# 書き込み保護
i2c.write_byte_data(addr, 0x0b, 0xFF)
#data = i2c.read_byte_data(addr, 0x02)
#print('hex: {:x}'.format(data))
作成したプログラムを起動時実行するようにします。
起動時に1度実行すればよいだけなので、cronで実行するように設定します。
n crontab -e
以下の内容を追記します
@reboot /home/pi/PiSugarStartup.py
再起動してみて、0x02アドレスの4ビット目がオン(1)になっていることを確認しす。