Raspberry PiにPower Management HAT (B)を接続してみる

# 1. 概要
Raspberry Pi用の電源管理HATである Raspberry PiにPower Management HAT (B) を使ってみる。

# 2. 機材
* Raspberry Pi Zero（サイズとかコネクタ干渉があっていまいちだけど）
すぐに使えるのがなかった
* Power Management HAT (B)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1865486/8805765c-b4f4-180c-7c6c-41e40af8969d.png)

# 3. 情報元
Wikiだが、
https://www.waveshare.com/wiki/Power_Management_HAT_(B)
であって
https://www.waveshare.com/wiki/Power_Management_HAT
ではない
Arduinoと間違えてしまい、当初話がさっぱり分からなかった。

あと、Git
https://github.com/waveshare/Power-Management-HAT

# 4. 環境設定
まずはRaspberry Piだけで設定。

## 4.1. シリアルポート機能
先にシリアルポート機能有効を確認しておく。
キャラクタベースGUIが起動するので、以下の選択肢からUARTを有効にしておく。

```
sudo raspi-config
3. Interface Options
P6 Serial Port Enable/disable
```

## 4.2. コンパイル環境構築
```
cd ~
mkdir work
cd work
wget https://raw.githubusercontent.com/raspberrypi/pico-setup/master/pico_setup.sh
chmod +x pico_setup.sh
./pico_setup.sh
```
思った以上に長い処理が始まる。が、とりあえずの動作確認はいらない。

終わったら
```
sudo reboot
```

## 4.3. ステータス取得のスクリプト
コンパイル環境構築の手順上のミスかArduinoでのミスか不明だが、ファイルがなかったり設定ができていなかったので、確認手順を書いておく。

/home/pi/bin/PowerManagementHAT/StatusDetection.py　がGPIOを見るスクリプトになっている。存在しないとダメみたいだ。ネット上にはPower-Management-HAT-Setup.shで全部おわることになっているが、動作がどうにもおかしい（気がする）。

なので以下で対処
```
wget https://raw.githubusercontent.com/waveshare/Power-Management-HAT/master/StatusDetection.py
mkdir -p /home/pi/bin/PowerManagementHAT
mv -f StatusDetection.py /home/pi/bin/PowerManagementHAT
sudo sed -i '/exit 0/i python /home/pi/bin/PowerManagementHAT/StatusDetection.py &' /etc/rc.local
```

rc.local の編集がおかしくないか、確認しておく。
StatusDetection.pyが複数行ある場合、手順のミスなので削除しておく。
以下のようになっていればよいようだ。
```
cat /etc/rc.local 

～略～
python /home/pi/bin/PowerManagementHAT/StatusDetection.py &
exit 0
```

## 4.4. HATのサンプルで試す
コンパイル環境を作ってみたものの何をしたらよいのか分からないので、サンプルバイナリで試してしまう。

https://www.waveshare.com/w/upload/2/27/Power-example.7z


HATだけの状態で、USBケーブルをつないでWindows PCにつなぐとストレージが見える。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1865486/f567cda3-7426-b2d6-3d7b-a4801af4fb58.png)

Wikiに載っているサンプルの中身の、「Power_Management_HAT.uf2」をコピーする。勝手に閉じるので終わり。

電源を落として、Raspberry PiとHATをつないぎ、HATのUSBには電源を供給、Raspberry Pi本体には電源を接続しない。その状態で、HATのPWRボタンを長押ししたらRaspberry Piが起動する。

:::note info
一度何かを書いていると、ストレージモードにならない。その場合、PCにUSBケーブルでつなぎ、BootボタンとResetボタンを同時に押し、最初にResetボタンを放す。次にBootボタンを放すとストレージモードになる。
:::


### 4.4.1. 動いている？
Raspberry PiでUARTをのぞいてみる

```
sudo minicom -D /dev/ttyS0
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1865486/2e16d5d2-dacc-e5be-ea4c-85e803367df7.png)
改行コード？がずれているけど、動いているようだ。
このログは サンプルコードの Period_Time.c と一致する。

# 5. 動作確認
HATのパワーボタン（3つ並んでいるものの1つ）を長押しすると、起動中ならシャットダウン、停止中なら起動が行われる。単に電源が切れているだけの疑惑があるので、OSのログが残っているので多分大丈夫、たぶん。

journalctlで
```
pi@raspberrypi:~ $ journalctl --list-boots
 0 995b4659f1284a5a96a7b9a7c4129e24 Sun 2023-01-22 01:37:46 JST—Sun 2023-01-22 12:46:28 JST
pi@raspberrypi:~ $ 
```

lastで
```
pi@raspberrypi:~ $ last -x shutdown
shutdown system down  5.10.103+        Sun Jan 22 01:37 - 09:00 (-19378+16:37)
shutdown system down  5.10.103+        Sun Jan 22 01:33 - 09:00 (-19378+16:33)
shutdown system down  5.10.103+        Sun Jan 22 01:30 - 09:00 (-19378+16:30)
```

# 6. 今後
ボタン電池が手元になかったので、入手したらRTCを試したい。
バッテリパックも手元になかったので、バッテリ駆動での動作を作って試したい。