Часто возникает вопрос с автономным питанием ныне уже популярного модуля ESP8266. Эта заметка без уникальных фотографий, но она рассказывает, как оно делается на Си и SDK от Espressif и сколько потребляет.
Для начала, если ESP-01 (а он самый популярный и разумный в данной ситуации), надо сделать перемычку с 8 ножки esp8266 на пин RST и убрать светодиод, как показано на фотографии выше. Если перемычку не сделать — модуль из режима Deep Sleep не выйдет.
Установку комплекта для 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 секунд.
Лабораторий и мегатестеров не имею. Все замеры производил дешёвым китайским тестером с соответствующей точностью.
В активном режиме (от просыпания до засыпания) — от 240мА до 360мА. В среднем 300мА где-то в районе 5-10 секунд.
В спящем — <1mA.
На самом деле, тестер пытался показать какие-то циферки, но его точность менее 1мА под огромным сомнением. Но и 1мА при питании от пальчиковых батареек считаю достойным результатом.
Можно выкинуть очень многое из этого проекта, если планируется простой автономный датчик температуры. Как минимум, вывод в терминал лишний.
О реальной продолжительности жизни от батареек судить пока не берусь — слишком мало время такой эксплуатации.
Всё найдено на просторах интернета и является собственностью тех, кто писал. Я только собрал в кучку и показал, как нажимать кнопочки на клавиатуре.
ESP8266 Community forum
Low Power ESP8266 – Sleeping at 78 micro Amps
ESP8266 SDK API Guide v1.0.0
1. Железное вмешательство
Для начала, если ESP-01 (а он самый популярный и разумный в данной ситуации), надо сделать перемычку с 8 ножки esp8266 на пин RST и убрать светодиод, как показано на фотографии выше. Если перемычку не сделать — модуль из режима Deep Sleep не выйдет.
2. Программируем
Установку комплекта для Windows, производил по хорошей статье с geektimes.
Для примера мы возьмём проект examples\dht22_thingspeak. Он хорош тем, что его очень легко поправить под свои цели отправки температуры и влажности.
Со всего проекта нам нужны user_main.c, который содержит основной пользовательский код, и user_config.h, который содержит настройки.
#define USE_WIFI_MODE STATION_MODE
#define WIFI_CLIENTSSID "wifi_net_name"
#define WIFI_CLIENTPASSWORD "wifi_net_pass"
#define DATA_SEND_DELAY 1000 /* milliseconds */
#define THINGSPEAK_SERVER "narodmon.ru"
Это содержимое файла user_config.h. Задержку отправки изменять не надо, но если хочется, то можно. Но для однократной отправки — не надо.
Если нужен не народный мониторинг, а что-то другое — пишете в строке сервер свое. У меня там указан IP моей Raspberry.
Далее вносим изменения в код файла user_main.c, в процедуре dht22_cb:
os_sprintf(data, "http://%s/post.php?ID=xx-xx-xx-xx-xx-xxx&T1=%s&H1=%s", THINGSPEAK_SERVER, temp, hum);
В этой строке задаётся всё, что нам необходимо для отправки. Для народного мониторинга можно сделать автоматическое получение MAC-адреса, но на мой взгляд это лишнее — проще один раз написать.
Далее в том же файле, но в процедуре user_init, задаём таймер для процедуры спячки:
os_timer_disarm(&sleep_timer);
os_timer_setfn(&sleep_timer, sleep_cb, NULL);
os_timer_arm(&sleep_timer, 5000, 1); //5s
Здесь 5000 — время в миллисекундах, а 1 — повторять.
Ну и последняя, собственно, сама процедура спячки. В данном случае — 10 минут.
static ETSTimer sleep_timer;
LOCAL void ICACHE_FLASH_ATTR sleep_cb(void *arg)
{
os_timer_disarm(&sleep_timer);
system_deep_sleep(600*1000*1000);//second*1000*1000
}
В итоге мы имеем модуль, который спит 10 минут, просыпается, отправляет данные с DHT22 (GPIO2) куда надо и засыпает на следующие 10 минут.
Пока я не выяснил, с чем связано, но 10 минут плавают ±30 секунд.
3. Замеряем
Лабораторий и мегатестеров не имею. Все замеры производил дешёвым китайским тестером с соответствующей точностью.
В активном режиме (от просыпания до засыпания) — от 240мА до 360мА. В среднем 300мА где-то в районе 5-10 секунд.
В спящем — <1mA.
На самом деле, тестер пытался показать какие-то циферки, но его точность менее 1мА под огромным сомнением. Но и 1мА при питании от пальчиковых батареек считаю достойным результатом.
4. Итоги
Можно выкинуть очень многое из этого проекта, если планируется простой автономный датчик температуры. Как минимум, вывод в терминал лишний.
О реальной продолжительности жизни от батареек судить пока не берусь — слишком мало время такой эксплуатации.
Всё найдено на просторах интернета и является собственностью тех, кто писал. Я только собрал в кучку и показал, как нажимать кнопочки на клавиатуре.
Источники
ESP8266 Community forum
Low Power ESP8266 – Sleeping at 78 micro Amps
ESP8266 SDK API Guide v1.0.0