GPIO¶
外部IOからの入力トリガーにて復帰します。設定できるIOは複数だけで、プルアップも利用可能です。 このモードはライトスリープでのみ利用できます。
サンプルスケッチ[GitHub]¶
int bootCount = 0; // ライトスリープは通常の変数で良い void setup() { // シリアル初期化 Serial.begin(115200); // シリアル初期化待ち delay(1000); // GPIO37(M5StickCのHOMEボタン)かGPIO39(M5StickCの右ボタン)がLOWになったら起動 pinMode(GPIO_NUM_37, INPUT); pinMode(GPIO_NUM_39, INPUT); gpio_wakeup_enable(GPIO_NUM_37, GPIO_INTR_LOW_LEVEL); gpio_wakeup_enable(GPIO_NUM_39, GPIO_INTR_LOW_LEVEL); // GPIOをウェイクアップソースとして有効にする esp_sleep_enable_gpio_wakeup(); } void loop() { // 起動回数カウントアップ bootCount++; Serial.printf("起動回数: %d ", bootCount); // 起動方法取得 esp_sleep_wakeup_cause_t wakeup_reason; wakeup_reason = esp_sleep_get_wakeup_cause(); switch(wakeup_reason){ case ESP_SLEEP_WAKEUP_EXT0 : Serial.printf("外部割り込み(RTC_IO)で起動\n"); break; case ESP_SLEEP_WAKEUP_EXT1 : Serial.printf("外部割り込み(RTC_CNTL)で起動 IO=%llX\n", esp_sleep_get_ext1_wakeup_status()); break; case ESP_SLEEP_WAKEUP_TIMER : Serial.printf("タイマー割り込みで起動\n"); break; case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.printf("タッチ割り込みで起動\n"); break; case ESP_SLEEP_WAKEUP_ULP : Serial.printf("ULPプログラムで起動\n"); break; case ESP_SLEEP_WAKEUP_GPIO : Serial.printf("ライトスリープからGPIO割り込みで起動\n"); break; case ESP_SLEEP_WAKEUP_UART : Serial.printf("ライトスリープからUART割り込みで起動\n"); break; default : Serial.printf("スリープ以外からの起動\n"); break; } // シリアルをすべて出力する Serial.flush(); // ライトスリープ esp_light_sleep_start(); }