Как узнать, просыпается ESP32 самостоятельно или вручную
У меня есть проект, в котором я помещаю ESP32 в режим глубокого сна на определенное время, например: 1 час
Чтобы иметь возможность самостоятельного пробуждения, кабель должен быть подключен от GPIO 16 к контакту сброса, поэтому в основном ESP отключает контакт 16 и вызывает сброс.
Мне также нужна возможность вручную разбудить ESP, поэтому параллельно этому кабелю я подключаю кнопку к GND, чтобы я мог вручную сбросить ESP и разбудить его.
Однако мне нужно иметь возможность определить, пробудился ли ESP сам, потому что прошел один час, или он был разбужен вручную.
Я не могу подключить ESP к ISP времени, чтобы проверить время, поэтому первым делом я подключил кнопку также к входу и считывал ее при запуске ESP.
Однако ESP не запустится до тех пор, пока не будет отпущена кнопка, задающая низкий уровень RST, а затем уже слишком поздно читать ее и смотреть, была ли она нажата.
Можно ли узнать, был ли сброс настроек ESP вручную или он проснулся сам по себе?
@Sembei Norimaki, 👍1
1 ответ
Лучший ответ:
Я думаю, вы путаете ESP32 и ESP8266. Нет необходимости подключать GPIO16 для сброса на ESP32.
Вместо этого ESP32 имеет код "ULP" - Процессор со сверхнизким энергопотреблением (по сути, процессор RTC), который посылает сигналы пробуждения ядрам ESP32. Именно это пробуждает систему через час.
UTP также может запускать пробуждение из других источников — чаще всего используется для пробуждения от внешнего сигнала, например кнопки. Но это работает только в том случае, если этот сигнал подключен к одному из входных контактов RTC (GPIO с 34 по 39) или к определенным контактам, поддерживающим прерывание (вы можете прочитать больше о том, что может разбудить систему здесь).
После пробуждения вы можете запросить ULP, чтобы узнать, почему он разбудил ESP32, используя esp_sleep_get_wakeup_cause()
.
- ESP32 не может спать дольше 35 минут.
- ESP32 — петля DeepSleep или нет?
- Невозможно создать переменную RTC_DATA_ATTR внутри класса
- ESP32 - неточность NTP после глубокого сна
- целочисленное переполнение в выражении типа 'int' приводит к
- Детектор браунаута ESP32-S2 Случайно срабатывает в глубоком сне
- Монитор напряжения батареи сразу после глубокого сна
- Почему ESP32 не остается в глубоком сне дольше 35 минут?
esp8266 также имеет RTC, но есть некоторая ошибка в дизайне, и он не может проснуться внутри. подключение io 16 для сброса является обходным путем, @Juraj
Еще одна причина не заморачиваться с esp8266 и сразу перейти на ESP32..., @Majenko
Спасибо. похоже, это то, что мне было нужно., @Sembei Norimaki