M5 ATOM LiteでRaspberry Piを間欠動作させる(暫定版)

# 暫定処置
モバイルバッテリーが休止から復帰できない問題に対応するための暫定処置として100円ショップで売ってるUSB-LEDライトを使うことにしました(￣▽￣)
これで間欠動作の動作確認ができましたので暫定版として公開します。
最終的にはUSBダミー負荷をつかってスリープ状態でもっと消費電力を抑えたいですね。

それからこの記事で肝心要の部品であるOnOffSHIMですがスイッチサイエンスさんでは品切れ(2021/5/30現在)ってことですぐに試したい方はマルツオンラインさんがDigi-Keyから取り寄せてくれます。
https://www.marutsu.co.jp/pc/i/26917993/
ボクもこちらで購入して5日程度で届きました。

# はじめに
とある用途でRaspberry Piをモバイルバッテリーで動かすことになりました。
(別記事で公開しました。[SORACOMとラズパイで郵便受けの中身を確認できるようにする](https://qiita.com/daikunjp/items/5fa52b2870d44f0585d4))
できるだけバッテリーを保たせたいので間欠動作させたい。
調べてみると↓このあたりの製品を使えば手軽に実装できそうなんですが…
[ラズベリーパイ用電源管理/死活監視モジュール「slee-Pi」](https://mechatrax.com/products/slee-pi/)
個人で買うには15,000円はちょっと高いですね(^_^;)  

仕事なら間違いなくこれ使うんですが…今回はできるだけ費用を抑えるためにバッテリー制御が可能なボードを使ってみました。
スイッチサイエンスさんを徘徊してたら良さそうなのがありました(￣ー￣)
https://www.switch-science.com/catalog/3295/
1,100円でボタンによるON/OFFが可能なようです。

## つかうもの

|品名|おおよその価格|備考|スイッチサイエンスURL|
|---|---|---|---|
|Raspberry Pi Zero|1,800円|今回はZeroを使いましたがもちろん普通のRaspberry PiでもOKです|https://ssci.to/3646|
|OnOffSHIM|1,100円|ボタンスイッチでRaspberry Piの電源操作ができます|https://ssci.to/3295|
|M5 ATOM Lite|1,300円|ESP32搭載でRTCもついてるので間欠動作のコントロールをさせます|https://ssci.to/6262|
|M5Stack用ミニリレーユニット|400円|ATOM Liteにつないでボタンスイッチの操作をさせます|https://ssci.to/4054|

# OnOff SHIM
ひとまず購入しましたが1点問題が…はんだ付けが必要なんだですが20年以上ハンダゴテさわったことがないし過去のはんだ付けも数える程度しかやったことがない…とにかくチャレンジ!!

最初のピンにハンダ付けしたらラズパイのGPIOピンに軽くのっけて固定すると楽にハンダ付けできます。
![OnOffSHIM1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142746/22300943-eba8-cc24-1a3b-58a2cefebd34.jpeg)
あとはがんばってハンダ付けしていく
結果↓こんな感じでした(ちょーへたくそ))
![OnOffSHIM3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142746/ef3eb245-dd55-3826-cc49-ced4475f66ad.jpeg)

ここでRaspberry Pi Zero に刺そうとして…ん? **ぎゃーーー!!** 表裏まちがえてつけちゃった orz
![OnOffSHIM4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142746/5650250c-472b-2ecc-f651-a638970e5fb1.jpeg)
みなさんはお気をつけくださいね(こんな間違いする人いないと思うけど…)

ま、こんなこともあろうかと…OnOff SHIMは2枚購入していたので再度ハンダ付け…トホホ
無事にRaspberry Pi Zero にOnOff SHIMを装着して制御するプログラムをインストールします。

```
% curl https://get.pimoroni.com/onoffshim | bash
```
これで角にあるボタンスイッチを押すと電源ON/シャットダウンが可能になります。

# 間欠動作

OnOffSHIMには外付けのボタンスイッチがつけられるようになっているのでこちらを使って間欠動作させます。
まずはOnOffSHIMの外付けボタン用端子に電線を巻きつけます。
![OnOffSHIM5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142746/0bb4a81d-86b5-b15b-37ab-7505a78439a5.jpeg)
ハンダ付けしてもよかったのですが再利用するかもしれないのでしっかり巻きつけてショートしないように余分な銅線をカットしました。
これで赤線と黒線の端子同士をショートさせると無事にRaspberry Piの電源ON・シャットダウンされます。

次にATOM Lite - ミニリレーユニットに接続します。
![OnOffSHIM6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142746/4140c5e7-1093-7acb-4693-5e3d297de3ff.jpeg)
今回はリレーに電流を流したときだけクローズしたいのでNO(ノーマルオープン)の真ん中の端子を使います。

ATOM Liteに1時間毎にリレーをON/OFFするプログラムを書き込みます。
Platform.ioで動かせるコードはこちらで公開しています。
https://github.com/daikunjp/m5atom-relay
ボクはPlatform.ioを使いましたがArduino IDEでも同じプログラムで動くのではないかと思います。

```main.cpp
#include <M5Atom.h>

#define SWITCH 26
#define SLEEPTIME 3600000000 /* 1000000マイクロ秒 × 3600 */

void setup() {
  M5.begin(true, false, true);
  pinMode(SWITCH, OUTPUT);
  // 一回LOWにしとかないとうまく起動してくれない
  digitalWrite(SWITCH, LOW);
  Serial.print("switch low ");
  delay(1000);
  // 3秒くらいONにしないと起動しないときがある
  digitalWrite(SWITCH, HIGH);
  Serial.print("switch high");
  delay(3000);
  digitalWrite(SWITCH, LOW);
  Serial.print("switch low");
  esp_deep_sleep(SLEEPTIME);
}

void loop() {
}
```

あとはRaspberry Piの`/etc/rc.local`に必要な処理とシャットダウンをおこなうスクリプトを書けばOKです。

これでしばらく動かしてみましたがだいたい1時間毎に起動しているようです。

###追記
USB-ACアダプタではうまく間欠動作できていたのですがモバイルバッテリーではモバイルバッテリー側が通電状態に復帰できない(/_;)
このあたりを使うとうまくいきそうなのですが…売り切れ
https://www.switch-science.com/catalog/3829/

### 2021/05/30暫定処置
とにかくモバイルバッテリーが休止状態にならなければいいので100円ショップでUSB-LEDライトを買ってきてモバイルバッテリーにつなぎました。
これで1時間毎に間欠動作していることは確認できました。
USB-LEDライトの消費電力は間欠動作できないので微妙ですが…つくろうとしていたものはカメラ撮影を伴うものなので明るく写せて結果オーライでした(^_^;)
![OnOffSHIM7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142746/0a867b45-e9e9-d19f-2976-036cd7a10199.jpeg)