# Power *電源関連の機能はIP5306チップに依存しています。必要に応じてデータシート[IP5306](https://github.com/m5stack/M5-Schematic/blob/master/Core/IIC_IP5306_REG_V1.4.pdf)を参照してください* *古いM5STACKハードウェアの場合、IP5306チップが通信未対応です。機能を使う場合は制御できないケースも考慮してください。* 下記の例のように、初期化、通信確認、制御の順で使用してください。 ```arduino M5.Power.begin(); if(!M5.Power.canControl()) { //can't control. return; } M5.Power.lightSleep(SLEEP_SEC(5)); ``` ## begin() **構文:** void begin() **説明:** Powerクラスの初期化を行います。 **引数** なし。 **戻り値** なし。 ## setPowerBoostOnOff() **構文:** bool setPowerBoostOnOff(bool en) **説明:** 電源をON/OFFの方法を変更します。 USB接続時は電源をOFFにできません。 **引数** | 値 |説明 | | --- |--- | |true|長押しでON/OFFします。| |false|短押し2回でON/OFFします。 | **戻り値** | 値 |説明 | | --- |--- | |true|制御成功。| |false|制御失敗。| ## setPowerBoostSet() **構文:** bool setPowerBoostSet(bool en) **説明:** 電源をON/OFFの方法を変更します。 USB接続時は電源をOFFにできません。 **引数** | 引数 |説明 | | --- |--- | |true|短押し1回でON/OFFします。| |false|setPowerBoostOnOff()の方法に従います。 | **戻り値** | 値 |説明 | | --- |--- | |true|制御成功| |false|制御失敗| ## setPowerVin() **構文:** bool setPowerVin(bool en) **説明:** USBなどからの電源供給が途切たとき、 電源を再投入するかを決定します。 **引数** | 値 |説明 | | --- |--- | |true|電源を再投入します。| |false|電源を再投入しません。 | **戻り値** | 値 |説明 | | --- |--- | |true|制御成功| |false|制御失敗| ## setPowerWLEDSet() **構文:** bool setPowerWLEDSet(bool en) **説明:** 電源LEDを付けるためのモードを設定します。 なお、M5GOのIP5306は結線されておらず、この関数では制御できません。 **引数** | 値 |説明 | | --- |--- | |true|短押し2回でLEDをつけます| |false|長押しでLEDをつけます| **戻り値** | 値 |説明 | | --- |--- | |true|制御成功| |false|制御失敗| ## setPowerBtnEn() **構文:** bool setPowerBtnEn(bool en) **説明:** 電源ボタンを受け付けるか設定します。 ボタンを受け付けない場合は、 通電状態ならば電源ボタンはCPUリセットのみを受け付けます。 非通電状態ならば、電源は投入できなくなります。 **引数** | 値 |説明 | | --- |--- | |true|電源操作を受け付けます。| |false|電源操作を受け付けません。| **戻り値** | 値 |説明 | | --- |--- | |true|制御成功| |false|制御失敗| ## setLowPowerShutdownTime() **構文:** bool setLowPowerShutdownTime(ShutdownTime time) **説明:** IP5306が省エネ判断をして電源OFFするまでの待ち時間を設定します。 **引数** | 値 |説明 | | --- |--- | |ShutdownTime::SHUTDOWN_8S |8秒待ちます。| |ShutdownTime::SHUTDOWN_16S|16秒待ちます。| |ShutdownTime::SHUTDOWN_32S|32秒待ちます。| |ShutdownTime::SHUTDOWN_64S|64秒待ちます。| **戻り値** | 値 |説明 | | --- |--- | |true|制御成功| |false|制御失敗| ## setPowerBoostKeepOn() **構文:** bool setPowerBoostKeepOn(bool en) **説明:** 省エネを無効にし電源供給状態を維持します。 **引数** | 値 |説明 | | --- |--- | |true|電源供給を常に保ちます。 (IP5306スリープ無効)| |false| 電源供給はIP5306が判断します。(IP5306スリープ有効)| **戻り値** | 値 |説明 | | --- |--- | |true|制御成功| |false|制御失敗| ## setKeepLightLoad() **構文:** bool setKeepLightLoad(bool en) **説明:** 自動シャットダウン無効化機能を設定します。 (非推奨:この関数は無効化され、今後なくなります) **引数** | 値 |説明 | | --- |--- | |true| 軽負荷時に自動シャットダウンしません。 | |false| 軽負荷時に自動シャットダウンします。 | **戻り値** | 値 |説明 | | --- |--- | |true|制御成功| |false|制御失敗| ## setLowPowerShutdown() **構文:** bool setLowPowerShutdown(bool en) **説明:** 省電力時の自動シャットダウン機能を設定します。 (非推奨:この関数は無効化され、今後なくなります。setPowerBoostKeepOnを使ってください) **引数** | 値 |説明 | | --- |--- | |true|省エネシャットダウン機能を有効にします。| |false|省エネシャットダウン機能を無効にします。| **戻り値** | 値 |説明 | | --- |--- | |true|制御成功| |false|制御失敗| ## setAutoBootOnLoad() **構文:** bool setAutoBootOnLoad(bool en) **説明:** IP5306の2次側に電力消費が発生した場合に自動起動するかを設定します。 **引数** | 値 |説明 | | --- |--- | |true|自動起動機能を有効にします。| |false|自動起動機能を無効にします。| **戻り値** | 値 |説明 | | --- |--- | |true|制御成功| |false|制御失敗| ## setCharge() **構文:** bool setCharge(bool en) **説明:** 充電制御状態を指示します。 満充電時は、有効→無効→有効とセットすることで再充電ができます。 **引数** | 値 |説明 | | --- |--- | |true|充電開始指示。| |false|充電中止指示。| **戻り値** | 値 |説明 | | --- |--- | |true|制御成功| |false|制御失敗| ## isChargeFull() **構文:** bool isChargeFull() **説明:** 満充電かを判断します。 **引数** なし。 **戻り値** | 値 |説明 | | --- |--- | |true|満充電。 | |false|満充電ではない。 | ## canControl() **構文:** bool canControl() **説明:** 電源コントローラが制御可能かどうかを判断します。 古いM5Stackなど、IP5306を認識できない場合はfalseとなります。 その場合は、Powerクラスのほとんどが機能しません。 **引数** なし。 **戻り値** | 値 |説明 | | --- |--- | |true|電源コントローラーを制御可能。| |false|電源コントローラーを制御不可能。| ## isCharging() **構文:** bool isCharging() **説明:** 充電状態かどうかを判断します。 **引数** なし。 **戻り値** | 値 |説明 | | --- |--- | |true|充電中。| |false|充電中ではない。| ## getBatteryLevel() **構文:** int8_t getBatteryLevel() **説明:** バッテリー残量(%)を返します。 **引数** なし **戻り値** バッテリーレベルを(0-100)の範囲で返します。(単位:%) もし残量が確認できる状態になければ-1を返します。 ## setWakeupButton() **構文:** void setWakeupButton(uint8_t button) **説明:** スリープから復帰するときに監視する信号ポートを設定します。 **引数** | 値 |説明 | | --- |--- | |button| ポート番号 | **戻り値** なし **使用例:** ```arduino setWakeupButton(BUTTON_A_PIN); ``` ## reset() **構文:** void reset(); **説明:** CPUをリセットし、再起動します。 **引数** なし **戻り値** なし ## isResetbySoftware() **構文:** bool isResetbySoftware() **説明:** 現在の起動状態がCPUリセット後であるか判定します。 (reset()もしくはRTOS等から同等の処理を行うとtrueになります) **引数** なし **戻り値** | 値 |説明 | | --- |--- | |true| ソフトウェアリセットによるもの| |false| それ以外によるもの| ## isResetbyWatchdog() **構文:** bool isResetbyWatchdog() **説明:** 現在の起動状態がウォッチドッグ後であるか判定します。 **引数** なし **戻り値** | 値 |説明 | | --- |--- | |true|ウォッチドッグによるもの| |false|それ以外によるもの| ## isResetbyDeepsleep() **構文:** bool isResetbyDeepsleep() **説明:** 現在の起動状態がdeepSleep()後であるか判定します。 **引数** なし **戻り値** | 値 |説明 | | --- |--- | |true|deepSleep()後の起動| |false|それ以外によるもの| ## isResetbyPowerSW() **構文:** bool isResetbyPowerSW() **説明:** 現在の起動状態がパワーSWからの電源投入後であるか判定します。 **引数** なし **戻り値** | 値 |説明 | | --- |--- | |true|パワーSWからの電源投入後の起動| |false|それ以外によるもの| ## deepSleep() **構文:** void deepSleep(uint64_t time_in_us) **説明:** 省電力モードに移行します。 指定した時間、もしくはポートに変化があった場合に起動します。 復帰した後は、次の行からの実行ではなく、CPUは再起動されます。 **使用例:** 5秒省エネを行い、その後に再起動します。 ```arduino deepSleep(SLEEP_SEC(5)); ``` ## lightSleep() **構文:** void lightSleep(uint64_t time_in_us) **説明:** 省電力モードに移行します。 指定した時間、もしくはポートに変化があった場合に起動します。 復帰した後は、次の行から実行されます。 deepSleepに比べ、省電力能力に欠けます。 **使用例:** 5秒省エネを行い、その後に再起動します。 ```arduino lightSleep(SLEEP_SEC(5)); ``` ## powerOFF() **構文:** void powerOFF() **説明:** 電源を切ります。 省電力機能を用いて、IP5306を8秒後にOFFさせることで 回路側に供給される電源をOFFとします。 **使用上の注意** 強制的に電源をOFFにする手段が用意されていないため IP5306の省電力機能をつかってこの機能を実現しています。 そのためユーザが回路で電流を消費している場合には IP5306は電源OFFへの移行判断に失敗します。