Меню

Esp8266 датчик движения deep sleep

ESP8266. Режимы сна или как экономить заряд батарейки

ESP8266 — это модуль от компании Espressif Systems и он был разработан специально для мобильных устройств, носимой электроники и IoT-приложений. Модуль обладает Wi-Fi — приемопередатчиком с встроенной поддержкой стека TCP/ IP и является универсальным устройством, способным выступать в роли WiFi модуля и микроконтроллера с довольно богатой периферией. Однако использование этих возможностей увеличивает энергопотребление, особенно при обмене данными в сетях WiFi.

Все мы знаем то, что потребление у ESP8266 в режиме бодрствования довольно больше

80мА, а в пике может достигать и все 250мА! А при автономном питании ESP8266 для нас очень важно будет экономия энергии аккумулятора или батарейки от которой питается наш микроконтроллер, при таком большом потреблении (80 — 250мА) наш источник не проработает очень долго и его заряд быстро закончиться и наше устройство не сможет нормально выполнять свои функции. Например, при постоянной работе литий-полимерного аккумулятора емкостью 2500 мАч хватит всего лишь на 30 часов. Так какой же есть способ экономить энергию источника питания?

Способ для экономии используют довольно простой и он заключается в том, что мы периодически уходим в режим сна и потом просыпаемся и так по кругу, снова и снова. Режим сна это режим при котором потребление микроконтроллера резко снижается и составляет порядка нескольких десятков микроампер. В этом режиме основная часть программы останавливает свою работу и потом через заданное время происходит «пробуждение» микроконтроллера и выполнение программы продолжается.

За счет чего же достигается такое низкое потребление энергии? Все просто, за счет отключения не нужных «блоков» (блок — это часть в микропроцессоре которая отвечает за определенную деятельность, допустим АЦП или математический блок) в микропроцессоре, которые потребляют очень много, а оставляют только те блоки которые нужно что бы обратно вернуться в рабочий режим. Обычно это блоки с таймером, при срабатывании которого просыпается наш микропроцессор.

Режимы сна ESP8266

Существует несколько режимов сна для ESP8266: No-sleep, Modem-sleep, Light-sleep, Deep-sleep и Power-down. Режимы задаются через управляющие команды ESP8266, допустим в Arduino есть команда ESP.deepSleep() которая отвечает за переход в режим Deep-sleep. Ниже перечислены все режимы и их характеристики:

Без сна

В режиме No-Sleep, будет работать все по максимуму. Очевидно, что это наиболее неэффективно.

Modem-sleep

Это режим по умолчанию для ESP8266. Тем не менее, он используется только когда вы подключены к точке доступа. Потребление при этом порядка 15мА.

В режиме «Modem-sleep» контроллер отключает wi-fi между интервалами маяка DTIM . Этот интервал устанавливается вашим маршрутизатором.

Light-sleep

Выполняет ту же функцию, что и «Modem-sleep», но также отключает системные часы и приостанавливает работу CPU. Потребление при этом режиме еще меньше и составляет порядка 1мА.

Deep-sleep

В режиме глубокого сна Deep Sleep модуль ESP8266 отключает Wi-Fi и проводной интерфейс и оставляет в активном состоянии только часы реального времени RTC для периодических пробуждений. В этом случае потребление снижается до 20-80 мкА, в зависимости от параметров конфигурации.

Power-down

В режиме ожидания Power-Down выключается даже модуль RTC. Это означает, что сигнал пробуждения должен быть внешним, при этом потребление тока уменьшается до 1 мкА. Использование режима ожидания Power Down с выключенным RTC совместно с внешней микропотребляющей схемой пробуждения помогает значительно снизить потребление системы в спящем состоянии. Таким образом, общий ток в состоянии сна оказывается примерно в 10 раз меньше, чем при использовании режима глубокого сна Deep Sleep с включенным RTC.

Вывод

Как мы увидели микроконтроллер обладает довольно большими возможностями для того что бы успешно и довольно долго работать автономно. Используя различные режимы ESP8266 вы можете довольно сильно экономить емкость источника питания.

Читайте также:  Как проверить датчик кислорода лада гранта мультиметром

Источник

Esp8266 датчик движения deep sleep

Режим экономии энергии ESP8266 (DEEP SLEEP)


Итак, вы создали потрясающий проект, используя аппаратное обеспечение ESP8266, в котором есть LiPo аккумулятор, или вы просто подключили свой NodeMCU к USB-аккумулятору. Но после запуска вы понимаете, что питание от аккумулятора длится недолго.

Поскольку мы много времени не контролируем аппаратное обеспечение / компоненты в микроконтроллере, мы не можем оптимизировать оборудование. Но мы можем написать прошивку, которая будет отключать оборудование, чтобы сэкономить электроэнергию. Во время сна устройство потребляет гораздо меньше энергии, чем при пробуждении.

В этой статье мы сосредоточимся на режиме DEEP SLEEP (режим экономии электроенергии) с ESP8266.

ТИПЫ СНА
Существует четыре режима сна для ESP8266: No-sleep, Modem-sleep, Light-sleep и Deep-sleep.

Все они имеют разные функции.

NO-SLEEP

Установка No-Sleep режима значить что постоянно будет работать все оборудование. Очевидно, что это наиболее неэффективно и будет потреблять больше всего энергии.

MODEM-SLEEP

MODEM-SLEEP — это режим по умолчанию для ESP8266. Однако он включен только когда вы подключены к точке доступа.

В режиме «MODEM-SLEEP» ESP8266 отключает модем (WiFi) на как возможно дольше. Он отключает модем между интервалами DTIM Beacon. Этот интервал устанавливается вашим маршрутизатором.

LIGHT-SLEEP

Light-sleep выполняет ту же функцию, что и «MODEM-SLEEP», но также отключает системные часы и приостанавливает работу CPU. CPU не выключен. Это просто холостой ход.

DEEP-SLEEP

Все выключено, но часы реального времени (RTC) включены потому что нужно контролировать время. Поскольку все выключено, это наиболее энергоэффективный вариант.

Если вам нужна дополнительная информация, обязательно ознакомьтесь с документацией.

MODEM-SLEEP и LIGHT-SLEEP полезны, если вам все еще нужно работать в ESP8266, и вам нужны дополнительные опции питания. Они также легко настраиваются в настройках WiFi ESP8266. Но, если вам нужно какое-то серьезное управление мощностью, Deep-sleep — это ваш вариант.


С Deep-sleep структура наших приложений будет выполнять следующие шаги:

Выполните некоторые действия (считывание информации с датчика)
Сон на n микросекунд
Повторение

Важно отметить, что время сна указано в микросекундах (мкс).

Забавный факт, вы не можете отключить ESP8266 на вечно. Согласно SDK ESP8266, вы можете отключить его только на 4 294 967 295 мкс, что составляет около

Теперь давайте посмотрим код. В этих примерах я собираюсь использовать IDE Arduino.

Давайте рассмотрим простой пример:

Несмотря на то, что мы ничего не подключаем, чтобы включить Deep-sleep, нам нужно связать контакт RST с GPIO 16 на ESP8266. На NodeMCU GPIO 16 представлен как D0.

Если мы посмотрим на распиновку для NodeMCU, мы увидим, что GPIO 16 является специальным выводом:

Вывод RST поддерживается сигналом HIGH при запуске ESP8266. Однако, когда контакт RST получает сигнал LOW, он перезапускает микроконтроллер. Когда ваше устройство находится в режиме глубокого сна, он отправит сигнал LOW на GPIO 16, когда таймер сна будет включен. Вам необходимо подключить GPIO 16 к RST для пробуждения (или сброса) устройства, когда Deep-sleep закончился.

Вот пример кода:

В этом примере мы заходим в Serial, спим в течение 20 секунд и повторяем. Вы можете использовать этот пример в качестве шаблона для других программ.

DEEP-SLEEP W/ ПОДКЛЮЧЕНИЕ

В реальном мире мы хотим выполнить действие, например, сделать сетевой запрос, в то время как устройство отключено. Давайте рассмотрим пример отправки показаний датчика температуры в Losant каждые 20 секунд и сон между ними.

Вот код:
В этом примере мы выполняем следующие шаги:

Подключение к Wi-Fi (если не подключено)
Считывание датчика температуры из аналогового
Режим сна — 1мин
Повторение

Читайте также:  Чем можно обрабатывать узи датчики

Вывод
Теперь, когда вы знаете, как использовать режим экономии энергии (DEEP-SLEEP), вы можете сделать свое оборудование более энергоэффективным.

Источник

Deep Sleep Component¶

The deep_sleep component can be used to automatically enter a deep sleep mode on the ESP8266/ESP32 after a certain amount of time. This is especially useful with nodes that operate on batteries and therefore need to conserve as much energy as possible.

To use deep_sleep first specify how long the node should be active, i.e. how long it should check sensor values and report them, using the run_duration option.

Next, tell the node how it should wakeup. On the ESP8266, you can only put the node into deep sleep for a duration using sleep_duration , note that on the ESP8266 GPIO16 must be connected to the RST pin so that it will wake up again. On the ESP32, you additionally have the option to wake up on any RTC pin ( GPIO0 , GPIO2 , GPIO4 , GPIO12 , GPIO13 , GPIO14 , GPIO15 , GPIO25 , GPIO26 , GPIO27 , GPIO32 , GPIO39 ).

While in deep sleep mode, the node will not do any work and not respond to any network traffic, even Over The Air updates.

Configuration variables:¶

run_duration (Optional, Time ): The time duration the node should be active, i.e. run code.

sleep_duration (Optional, Time ): The time duration to stay in deep sleep mode.

touch_wakeup (Optional, boolean): Only on ESP32. Use a touch event to wakeup from deep sleep. To be able to wakeup from a touch event, Binary Sensor must be configured properly.

wakeup_pin (Optional, Pin Schema ): Only on ESP32. A pin to wake up to once in deep sleep mode. Use the inverted property to wake up to LOW signals.

wakeup_pin_mode (Optional): Only on ESP32. Specify how to handle waking up from a wakeup_pin if the wakeup pin is already in the state with which it would wake up when attempting to enter deep sleep. See ESP32 Wakeup Pin Mode . Defaults to IGNORE

id (Optional, ID ): Manually specify the ID used for code generation.

esp32_ext1_wakeup (Optional): Use the EXT1 wakeup source of the ESP32 to wake from deep sleep to wake up on multiple pins. This cannot be used together with wakeup pin.

pins (Required, list of pin numbers): The pins to wake up on.

mode (Optional): The mode to use for the wakeup source. Must be one of ALL_LOW (wake up when all pins go LOW) or ANY_HIGH (wake up when any pin goes HIGH).

Only one deep sleep component may be configured.

ESP32 Wakeup Pin Mode¶

On the ESP32, you have the option of waking up on any RTC pin. However, there’s one scenario that you need to tell ESPHome how to handle: What if the wakeup pin is already in the state with which it would wake up when the deep sleep should start? There are three ways of handling this using the wakeup_pin_mode option:

IGNORE (Default): Ignore the fact that we will immediately exit the deep sleep mode because the wakeup pin is already active.

KEEP_AWAKE : Keep the ESP32 awake while the wakeup pin is still active. Or in other words: defer the activation of the deep sleep until the wakeup pin is no longer active.

Читайте также:  Датчик гур ниссан теана j32 где находится

INVERT_WAKEUP : When deep sleep was set up to wake up on a HIGH signal, but the wakeup pin is already HIGH, then re-configure deep sleep to wake up on a LOW signal and vice versa. Useful in situations when you want to use observe the state changes of a pin using deep sleep and the ON/OFF values last longer.

deep_sleep.enter Action¶

This action makes the given deep sleep component enter deep sleep immediately.

sleep_duration (Optional, templatable , Time ): The time duration to stay in deep sleep mode.

deep_sleep.prevent Action¶

This action prevents the given deep sleep component from entering deep sleep. Useful for keeping the ESP active during data transfer or OTA updating (See note below for more information).

For example, if you want to upload a binary via OTA with deep sleep mode it can be difficult to catch the ESP being active.

You can use this automation to automatically prevent deep sleep when a MQTT message on the topic livingroom/ota_mode is received. Then, to do the OTA update, just use a MQTT client to publish a retained MQTT message described below. When the node wakes up again it will no longer enter deep sleep mode and you can upload your OTA update.

Remember to turn “OTA mode” off again after the OTA update by sending a MQTT message with the payload OFF . To enter the the deep sleep again after the OTA update send a message on the topic livingroom/sleep_mode with payload ON . Deep sleep will start immediately. Don’t forget to delete the payload before the node wakes up again.

Источник

Спящий режим и автономное питание ESP8266

Часто возникает вопрос с автономным питанием ныне уже популярного модуля ESP8266. Эта заметка без уникальных фотографий, но она рассказывает, как оно делается на Си и SDK от Espressif и сколько потребляет.

1. Железное вмешательство

Для начала, если ESP-01 (а он самый популярный и разумный в данной ситуации), надо сделать перемычку с 8 ножки esp8266 на пин RST и убрать светодиод, как показано на фотографии выше. Если перемычку не сделать — модуль из режима Deep Sleep не выйдет.

2. Программируем

Установку комплекта для Windows, производил по хорошей статье с geektimes.
Для примера мы возьмём проект examples\dht22_thingspeak. Он хорош тем, что его очень легко поправить под свои цели отправки температуры и влажности.

Со всего проекта нам нужны user_main.c, который содержит основной пользовательский код, и user_config.h, который содержит настройки.

Это содержимое файла user_config.h. Задержку отправки изменять не надо, но если хочется, то можно. Но для однократной отправки — не надо.

Если нужен не народный мониторинг, а что-то другое — пишете в строке сервер свое. У меня там указан IP моей Raspberry.

Далее вносим изменения в код файла user_main.c, в процедуре dht22_cb:

В этой строке задаётся всё, что нам необходимо для отправки. Для народного мониторинга можно сделать автоматическое получение MAC-адреса, но на мой взгляд это лишнее — проще один раз написать.

Далее в том же файле, но в процедуре user_init, задаём таймер для процедуры спячки:

Здесь 5000 — время в миллисекундах, а 1 — повторять.

Ну и последняя, собственно, сама процедура спячки. В данном случае — 10 минут.

В итоге мы имеем модуль, который спит 10 минут, просыпается, отправляет данные с DHT22 (GPIO2) куда надо и засыпает на следующие 10 минут.

Пока я не выяснил, с чем связано, но 10 минут плавают ±30 секунд.

Источник

Adblock
detector