----------------------------Ну нету у ESP8266 возможности засыпания с просыпанием по кнопке с его SDK от Espressif, который и используется в Arduino. Надо что-нибудь довешивать.
Команда system_deep_sleep_set_option() и system_deep_sleep() в SDK работают. Сложностей там вроде нет, кроме времени исполнения (времени от подачи команды до отключения - он потупит не менее 0.1 сек и отключиться).
Ошибка в system_deep_sleep() во всех последних SDK, ставящая неправильный флаг для следующего просыпания вам не помешает. (Ошибка связана с тем, что по последующему просыпанию система считает, что перезагрузилась по причине "протектед", а не по "deep_sleep" и соответственно будет полностью инициализировать WiFi, а не как это описано в документации. Причина в неправильном коде процедуры в iram переключения процессора в deep_sleep и аппаратно отключив flash он по ret в ней успевает возвращаться в коды flash, а там уже неопределенный код... и успевает сработать "протектед", записывая в RTC память причину перезагрузки по ошибке... Т.е. ошибка плавающая - успеет или не успеет нарваться в отключенном "кэш" на кривую инструкцию. На 160 MHz - успевает всегда...).
При просыпании система считает (код 5) что проснулась ( у меня на стандартном SDK именно так и работает)
enum rst_reason {
REANSON_DEFAULT_RST = 0, // normal startup by power on
REANSON_WDT_RST = 1, // hardware watch dog reset
// exception reset, GPIO status won’t change
REANSON_EXCEPTION_RST = 2,
// software watch dog reset, GPIO status won’t change
REANSON_SOFT_WDT_RST = 3,
// software restart ,system_restart , GPIO status won’t change
REANSON_SOFT_RESTART = 4,
REANSON_DEEP_SLEEP_AWAKE = 5, // wake up from deep-sleep
REANSON_EXT_SYS_RST = 6, // external system reset
-------------------------------
"И только ученик третьего класса ЦПШ Вася,
сидевший на последней парте и считавшейся двоечником,
сказал,
что у профессора ,
в третьей строке написанных выкладок на доске,
ОШИБКА в пределах тройного интеграла"