Pull to refresh

Как уменьшить потребление wifi модулей в десять и более раз

Reading time4 min
Views28K
Добрый день всем!!!

Данная статья в основном касается популярного модуля ESP8266 (ESP8285).

Недавно на одном из форумов мне задали вопрос о протоколе ESP-NOW. В итоге решил рассказать о способах сокращения потребления датчиков и исполнительных устройств, работающих по WiFi, к ним относится и ESP8266, в частности Sonoff.

Сначала суть решаемой проблемы.

В классическом решении на WiFi необходимо использовать либо специальный роутер, либо смартфон или устройства в режиме точки доступа.

Сама процедура соединения и передачи данных без специальных танцев с бубном на ESP8266 составляет от 1 до 4 секунд. При этом ток потребления не менее 70 мA.

При работе от батарейки, например, датчика температуры используется режим глубокого сна. Устройство периодически просыпается, отсылает данные и засыпает.

На основе своего опыта могу сказать, что время активности ESP8266 можно сократить до 0.1-0.13 сек.

Причем существенную часть этого времени составляет время работы загрузчика: от 0.08 сек., до 0.1 сек., но в это время еще не включен wifi и поэтому ток потребления составляет в среднем 25 мA.

Использую этот интервал для проверки заряда аккумулятора.
Если заряда недостаточно для связи, снова посылаю устройство спать.
Использую это время для проверки показаний датчика и сравнения с заданным коридором значений.

Если в коридоре, то отправляю устройство снова спать.
Таким образом, существенно сокращаются лишние посылки данных.

Как правило, в проектах типа «умного дома», самогонного или пивного агрегата, метеостанции погоды надо измерять температуру и включать и выключать реле лампочку, насос, двигатель.
Для управления такими устройствами и получения данных температуры или давления на смартфон или другое устройство достаточно нескольких байт.

Применительно к ESP8266 в интернете известно несколько способов сокращения времени активности устройств в режиме передачи данных по WiFi.

Вариант 1: использование протокола TCP/IP и фиксированного адреса IP.
Первым его для ESP8266 сделал pvvx.
Недостатки: Применение самопального SDK.
Время активности от 0.54 сек.

Вариант 2: этот способ первым применил я давно, но в инете его не нашел и сегодня.
Использование протокола UDP, фиксация параметров соединения в RAM RTC, отключение DHCP.
Достоинство: стандартный SDK никаких костылей, длина пакета до 64К.
Время активности от 0.25 сек.

Вариант 3: протокол ESP-NOW.
Недостаток: сложность понимания любителями, необходимость комбинирования с протоколом wifi для обмена данными со смартфоном.
Достоинство: стандартная SDK, никаких костылей, длина пакета до 512 байт.
Время активности: от 0.13 сек(стандартный загрузчик); 0.1(специальный загрузчик)

Вариант 4: решение CNLohr на основе самопальной pvvx SDK и использования сырых пакетов.
Отличие от решения ESP-NOW в том, что передаваемый пакет меньше, но используется протокол WiFi.
Недостаток: очень сложно в освоении любителями, не может быть реализована в среде ардуино, требует внесение изменения в софт роутера.
Время активности: как в варианте 3.

Вариант 5: универсальный метод для частных сетей на основе WiFi.
Никаких костылей. Реализуемо легко на ардуино, софт стандартный.
Можно применять не только для ESP.
Не требует роутера.
Недостаток: длина пакета 4 байта
Время активности: как в варианте 3 и 4.

Метод:
В локальной сети мы используем специальные MAC адреса.
Первый байт адреса, например, 0x36.
Второй байт адреса указывает номер устройства.
3,4,5,6 байты содержат передаваемую информацию.
В итоге для получения переданной информации требуется лишь выполнить соединение.
Время на передачу данных равно нулю, так как данные получаем в момент соединения.

Вариант реализации этого метода для ардуино можно списать здесь.

В приведенном примере реализован лишь вариант данного метода передачи данных.

В нем нет режима глубокого сна. Поэтому экономия энергии в нем лишь за счет нулевого времени на передачу информации. Передатчик работает лишь при соединении и ток возрастает до 300 мА лишь на 2-4 мс.

Для получения полного эффекта экономии любым из вариантов необходимо реализовать режим глубокого сна стандартным способом.

Таким образом, в вариантах с 3 по 5, работа WiFi блока занимает не более 0.04 сек.
Именно в это время ток потребления изменяется в пределах от 70 до 300 мА.
В остальное время ток потребления ESP8266 не более 20 мA.
В итоге, вместо затрат энергии на один сеанс 70 мA*с, получаем примерно 3 мA*с.
Желающие могут точнее посчитать экономию для конкретных устройств.

Поясню подробнее вариант 2.
При выходе из deep-sleep возможны три варианта подключения к WiFi для передачи сообщений.

1) логин и пароль — новые значения.
Время подключения и передачи сообщения UDP 4 секунды.

2) логин, пароль и IP сохраняем в RTC.
Время подключения и передачи сообщения UDP 1.2 секунда.

3) логин, пароль, IP сохраняем в RTC и отключаем dhcp.
Время подключения и передачи сообщения UDP 0.25 секунды.

Время рассчитывается с учетом времени работы загрузчика,
которое составляет в стандартном boot 0.12 секунды.
Если переписать загрузчик, то время можно еще сократить дополнительно на 0.04-0.06 секунды.

Таким образом, если мы логин, пароль и IP сохраняем в RTC, то время работы батарейки увеличивается в 3 раза, чем без сохранения. Этот способ экономии известен в интернете и используется многими.

Но если Вы отключите DHCP, то время работы батарейки увеличится примерно в 13 раз.
Именно так я и поступаю, но в интернете я не встречал такого решения.

Всем успехов в экономии энергии.
Tags:
Hubs:
Total votes 31: ↑29 and ↓2+27
Comments40

Articles