09. Sleep
sleepオブジェクトは、省電力機能を提供する組み込みオブジェクトです。
機能概要:
- スタンバイモードとしてSpresenseの
Cold Sleep
及びDeep Sleep
モードをサポートします。 - バックアップRAMへのデータの読み書き機能を提供します。
- 無線通信を制御する機能を提供します。
省電力機能の詳細動作についてはこちらを参照してください。
バックアップRAMは給電が続く限り、省電力モードに遷移しても、設定値が保持されるメモリです。給電が停止すると、設定値は失われます。バックアップRAMはCold Sleep
モード使用時のみ有効です。Deep Sleep
モードでは、設定値が保持されません。
sleep Global Object
Methods()/Properties | Summary | Version | Note |
---|---|---|---|
sleep.setStandby() | ネットワーク通信をシャットダウンしてからスタンバイモードに遷移します。 | 02.00.00+ | |
sleep.setStandbySync() | ネットワーク通信を強制的にシャットダウンしてからスタンバイモードに即時遷移します。 | 02.00.00+ | |
sleep.getEntryResumeControl() | 直前に設定されていたresumeFlag値を取得します。 | 02.00.00+ | |
sleep.setUserRegister() | バックアップRAMに任意の値を保存します。 | 02.00.00+ | |
sleep.getUserRegister() | バックアップRAMに保存されている値を取得します。 | 02.00.00+ | |
sleep.setRadio() | 無線通信の有効/無効を設定します。 | 02.00.00+ | |
sleep.setRadioSync() | 無線通信の有効/無効を設定します。 | 02.00.00+ |
Details
sleep.setStandby(rtcAlarm,resumeFlag[,callback])
ネットワーク通信をシャットダウンしてからスタンバイモードに遷移します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
rtcAlarm | Object | mandatory | レジューム時刻 hour : {number} アラーム発生時刻[時] 設定範囲: 0~23 (※1) minute : {number} アラーム発生時刻[分] 設定範囲: 0~59 (※1) second : {number} アラーム発生時刻[秒] 設定範囲: 0~59 (※1) | ※1: アラームによるレジュームを使用しない場合は-1 を指定します。 |
resumeFlag | number | mandatory | レジューム時の動作を指定します。 0: 通常レジューム ( Cold Sleep )1: オフラインレジューム ( Cold Sleep )以外: 通常レジューム ( Deep Sleep ) | (*** )は使用するSpresenseのスリープモードとなります。 |
callback() | function | optional | スタンバイモードへ遷移する直前にコールバック処理を実行します。 | |
return | undefined | - | - | 異常が発生した時は、例外となります。 |
sleep.setStandbySync(rtcAlarm,resumeFlag)
ネットワーク通信を強制的にシャットダウンしてからスタンバイモードに即時遷移します。
本メソッドの中で即時遷移します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
rtcAlarm | Object | mandatory | レジューム時刻 hour : {number} アラーム発生時刻[時] 設定範囲: 0~23 (※1) minute : {number} アラーム発生時刻[分] 設定範囲: 0~59 (※1) second : {number} アラーム発生時刻[秒] 設定範囲: 0~59 (※1) | ※1: アラームによるレジュームを使用しない場合は-1 を指定します。 |
resumeFlag | number | mandatory | レジューム時の動作を指定します。 0: 通常レジューム ( Cold Sleep )1: オフラインレジューム ( Cold Sleep )以外: 通常レジューム ( Deep Sleep ) | (*** )は使用するSpresenseのスリープモードとなります。 |
return | undefined | - | - | 異常が発生した時は、例外となります。 |
sleep.getEntryResumeControl()
直前に設定されていたresumeFlag値を取得します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | number | - | resumeFlag値 | 給電が停止し値が消滅した場合、Deep Sleep モードからレジュームした後は0 となります。 |
sleep.setUserRegister(userValue)
バックアップRAMに任意の値を保存します。
汎用的に使用可能です。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
userValue | number | mandatory | 任意の値 設定範囲: 0~4294967295 (0x00000000~0xFFFFFFFF) | |
return | undefined | - | - |
sleep.getUserRegister()
バックアップRAMに保存されている値を取得します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | number | - | 読み出した値 | 値が未設定の場合、給電が停止し値が消滅した場合、Deep Sleep モードからレジュームした後は0 となります。 |
sleep.setRadio(ctrl[,callback])
無線通信の有効/無効を設定します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
ctrl | number | mandatory | 無線通信設定 0: 無線通信OFF 1: 無線通信ON | 無線通信OFF を指定した場合、ネットワークを使用したサービス・機能が使用できなくなります。回復する場合は無線通信ON 設定に戻す必要があります。 |
callback() | function | optional | 指定された無線通信設定が完了した際にコールバック処理を実行します。 | |
return | undefined | - | - | 異常が発生した時は、例外となります。 |
sleep.setRadioSync(ctrl)
無線通信の有効/無効を設定します。
本メソッドの中で即時遷移します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
ctrl | number | mandatory | 無線通信設定 0: 無線通信OFF 1: 無線通信ON | 無線通信OFF を指定した場合、ネットワークを使用したサービス・機能が使用できなくなります。回復する場合は無線通信ON 設定に戻す必要があります。 |
return | undefined | - | - | 異常が発生した時は、例外となります。 |
オブジェクトの使用例
Sample 1
スタンバイモードのサンプルです。
現在時刻を基にスリープとレジュームを繰り返します。
var now_count = sleep.getUserRegister();
var entry_resume = sleep.getEntryResumeControl();
print('entry resume cont.=' + entry_resume);
var MAX_COUNT = 5;
var delay_s = 10;
var set_count;
var now_date = new Date();
print('Now time: ' + now_date.toString());
now_date.setSeconds(now_date.getSeconds() + delay_s);
print('Set time: ' + now_date.toString());
var rtc_time = {hour: now_date.getHours(), minute: now_date.getMinutes(),
second: now_date.getSeconds()};
if(entry_resume == 0) {
set_count = MAX_COUNT;
} else {
print(Date() + ': resume!!!');
set_count = --now_count;
}
sleep.setUserRegister(set_count);
if(set_count != 0) {
sleep.setStandby(rtc_time, 1, function() {
print('standby ready');
});
} else {
print('Sleep Finish:');
}
Updated: 2022-06-02