ラズベリーパイ用電源管理/死活監視モジュール「slee-Pi3」のセットアップ

# はじめに

**ラズベリーパイ用電源管理/死活監視モジュールslee-Piシリーズの最新機種「slee-Pi3」**が2020年8月3日にリリースされました。

slee-Piシリーズは大きく以下のような機能があります。

- **間欠動作（搭載RTCにより、指定日時でコールドブート可）**
- **ラズパイ本体や常時稼働ソフトの死活監視、自動電源再投入等**
- **ラズパイ本体への安定した電源供給**
- **外部入力端子によるラズパイの起動(slee-Pi2 plus以降)** 
- **外部出力端子を使った外部機器等のON/OFF(slee-Pi2 plus以降)** 

slee-Piシリーズの内容を詳しく知りたい方は以下記事を参照ください。

[メカトラックス株式会社 slee-Pi公式サイト](https://mechatrax.com/products/slee-pi/)
[slee-Piを使った間欠動作（タイマー動作）と死活監視](https://qiita.com/syasuda/items/dd1564896e75b03b2b7d)

本記事は**slee-Pi3での変更点やセットアップ手順を中心に紹介**します。
slee-Pi2からの**大きな仕様変更点は3つ**あります。


## 仕様変更① RTCをボタン電池でバックアップ(時刻保持)
**slee-Pi2**：キャパシタによるRTCのバックアップのため、電源喪失時の寿命が3時間程
**slee-Pi3**：**ボタン電池によるRTCのバックアップとなり、電源喪失時の寿命が1～2年程**

ボタン電池でバックアップされるのはRTCと一部レジスタのみで、マイコン全体はバックアップはされませんのでご注意ください。
##仕様変更②  電源の2系統をそれぞれ電圧計測も可能

**slee-Pi2**：電源の2系統のうち高い方のみ電圧測定可能
**slee-Pi3**：**電源の2系統のどちらの電圧測定可能**

電源の2系統とは、CN1(電源コネクタ)、CN2(補助電源コネクタ)の2つのことを意味します。

参考までに、CN1,CN2の配置場所は以下のようになります。
![Sleepi3_rev1.4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/29f32208-7a5e-69ec-d122-60e7d2480ce5.png)

##仕様変更③  外部入出力端子の標準搭載
**slee-Pi2**：外部入出力端子が搭載なし　※slee-Pi2 plusは搭載
**slee-Pi3**：**外部入出力端子が標準搭載**

外部入力端子は、無電圧入力のためリレーやスイッチ等を使用し、
CN1の端子間を短絡することで制御することができます。
※間違えて印加しないようにしましょう。

外部出力端子は、オープンコレクタ出力として別機器の制御が可能です。

# slee-Pi3のセットアップ
以下内容は完了済の前提で進めます。

- OSはRaspberry Pi OS (32-bit) Liteをインストール済
- キーボードやWiFiは設定済
 
##使用機材
- slee-Pi3
- ラズパイ3B(含マイクロSDカード 4GB以上)
- ACアダプタ(12V 2A)

## slee-Pi3の内容物
同梱資料に内容物の記載があります。
![IMG_3598.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/e7bc34a7-0a0e-8fe3-d9f3-6d4bc987d7bb.jpeg)
![IMG_3596.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/934b49cd-9d1d-ae57-dd24-ebcadc9eae7c.jpeg)

slee-Pi3の内容物を確認しましょう。
![IMG_3590.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/c1ad6b48-2c1f-2b4c-44c8-ecaed5a88d8f.jpeg)

## 組立て方法
1.六角スペーサとナットをラズパイに取り付けます。
![IMG_3615.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/063a1cac-8ccf-4917-9aa8-952ded1b7afc.jpeg)

2.ラズパイ上にslee-Pi3をマウントし、六角スペーサをねじ止めします。
![IMG_3618.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/df1ae2e4-b929-908a-e872-f6c091286b62.jpeg)



3.付属のハーネスの片側にslee-Pi3のCN1もしくはCN2を接続し、もう片側にACアダプタを接続します。
![IMG_3625.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146895/dd7bad61-3c0f-60ec-11d5-cbf73710d14c.jpeg)




## slee-Pi3パッケージのインストール
詳細は[slee-Pi3のGitHub](https://github.com/mechatrax/slee-pi3)をご覧ください。
> ↑ URLの設定
slee-Pi3のパッケージを更新用にリポジトリを追加します。

```bash
curl https://mechatrax.github.io/setup.sh | sudo bash
```

次にslee-Pi3のパッケージをインストールします。

```bash
sudo apt-get install sleepi3-firmware sleepi3-utils sleepi3-monitor
```

パッケージを最新版に更新します。

```bash
sudo apt-get update
sudo apt-get upgrade
```
ラズパイを再起動します。

```bash
sudo shutdown -r now
```

以上でslee-Pi3パッケージのインストールが完了です。

##チュートリアル① ラズパイからslee-Pi3 RTCへの時刻反映
Raspberry Pi OS(32-bit) Lite (Raspbian Buster 以降)では、systemd-timesyncd が起動する設定のため、**インターネット接続環境では自動的に正確な時刻が反映されます。**

「timedatectl」コマンドでOSの時刻・RTCの時刻を確認できます。
しかし、起動直後は「System clock synchronized: no」になっているので正確な時刻が反映されていませんのでご注意ください。

```bash
sudo timedatectl
```
```:ターミナル出力内容
               Local time: Fri 2020-07-17 11:15:52 JST
           Universal time: Fri 2020-07-17 02:15:52 UTC
                 RTC time: Fri 2020-07-17 02:15:52
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no
```

起動後しばらくして「timedatectl」コマンドを実行すると「System clock synchronized: yes」となり、OSに正確な時刻が反映されます。

```bash
sudo timedatectl
```


```:ターミナル出力内容
               Local time: Fri 2020-07-17 11:16:08 JST
           Universal time: Fri 2020-07-17 02:16:08 UTC
                 RTC time: Fri 2020-07-17 02:16:09
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
```

上記のターミナル出力でOSの時刻が自動的に設定されたことが分かりました。
しかし、上記例では「Universal time」と「RTC time」がわずか1秒ですが、ずれています。

そのため、以下2つのどちらかのコマンドを使用してOSの時刻(UTC)をRTCに反映させる必要があります。

① 時刻反映コマンドを使用する

```bash
sudo hwclock -w
```

② シャットダウンする

```bash
sudo shutdown -h now
```

###補足①：RTC timeが「n/a」の場合
RTCデバイスが読み込めていない場合は、「RTC time: n/a」と表記されます。
その場合は、slee-Pi3が接続できているか確認しましょう。

```bash
sudo timedatectl
```


```:ターミナル出力内容
               Local time: Fri 2020-07-17 11:15:52 JST
           Universal time: Fri 2020-07-17 02:15:52 UTC
                 RTC time: n/a
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no
```

###補足②:タイムゾーンが初期の場合
タイムゾーンが初期のままの場合は、「Europe/London (BST, +0100)」となります。

```bash
sudo timedatectl
```

```:ターミナル出力内容
               Local time: Sat 2020-07-18 15:01:51 BST
           Universal time: Sat 2020-07-18 14:01:51 UTC
                 RTC time: Sat 2020-07-18 14:01:51
                Time zone: Europe/London (BST, +0100)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
```

以下コマンドで東京に設定しましょう。

```bash
sudo timedatectl set-timezone Asia/Tokyo
```


```:ターミナル出力内容
               Local time: Fri 2020-07-17 11:15:52 JST
           Universal time: Fri 2020-07-17 02:15:52 UTC
                 RTC time: n/a
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no
```

## チュートリアル② slee-Pi3 RTC からラズパイへの時刻反映
以下コマンドでslee-Pi3 RTCからラズパイに時刻を反映します。

```bash
sudo hwclock -s
```

既に時刻を合わせたラズパイでは反映結果がわかりにくいです。
時刻反映の検証時はラズパイを「ネット回線を切断」&「現在時刻ではない」状態にするのが良いでしょう。
※ネットワークに接続されているとNTPにて正しい時刻を自動取得してしまいます。
※sleepi3-utilsがインストールされている場合は起動時にRTCから時刻を読み出します。

または、OSをインストールしたばかりのラズパイにslee-Pi3を乗せ換えることでも検証可能です。
言い換えると、**ネットワークに接続できない環境のラズパイでも、slee-Pi3があれば時刻を正確に合わせられます。**

#まとめ
**slee-Pi3の改良ポイント**

- RTCをボタン電池でバックアップ ⇒ **1～2年のあいだ電源喪失しても時刻保持できる**
- 電源（2系統）の2系統のそれぞれの電圧計測可 ⇒ **主電源,補助電源のどちらの電圧も図れる**
- 外部入出力端子の標準搭載 ⇒ **別デバイスと簡易的な連携できる**

次回記事はslee-Pi3の基本的な使い方を紹介します！