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

?v=1

Добрый день, Всем!!!
Данная статья в основном касается популярного модуля 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 адреса.
Первый байт адреса, например, 0×36.
Второй байт адреса указывает номер устройства.
3,4,5,6 байты содержат передаваемую информацию.
В итоге для получения переданной информации требуется лишь выполнить соединение.
Время на передачу данных равно нулю, так как данные получаем в момент соединения.

Вариант реализации этого метода для ардуино можно списать здесь:
github.com/HarringayMakerSpace/sonoff-adhoc
В приведенном примере реализован лишь вариант данного метода передачи данных.
В нем нет режима глубокого сна. Поэтому экономия энергии в нем лишь за счет нулевого времени на передачу информации. Передатчик работает лишь при соединении и ток возрастает до 300 мА лишь на 2–4 мс.
Для получения полного эффекта экономии любым из вариантов необходимо реализовать режим глубокого сна стандартным способом.
Таким образом, в вариантах с 3 по 5, работа WiFi блока занимает не более 0.04 сек.
Именно в это время ток потребления изменяется в пределах от 70 до 300 мА.
В остальное время ток потребления ESP8266 не более 20 мA.
В итоге, вместо затрат энергии на один сеанс 70 мA*с, получаем примерно 3 мA*с.
Желающие могут точнее посчитать экономию для конкретных устройств.
Всем успехов в экономии энергии.

© Habrahabr.ru