Данная статья в основном касается популярного модуля 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.
При выходе из depp-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 раз.
Именно так я и поступаю, но в интернете я не встречал такого решения.
Всем успехов в экономии энергии.
Комментарии (37)
lingvo
15.12.2019 12:02Вроде, как проблему давно победили — те же Shelly обещают по два года работы от одной батарейки. И они на ESP
Zmiy666
15.12.2019 19:06-1если устройство может работать 2 года на батарейке — то лучше батарейку вообще выкинуть из цепи, заменив ее конденсатором и неким источником, работающим от энергии внешней среды, от перепада тепла, давления, от света… ток мизерный но за 2 года любой такой генератор наделает больше энергии чем батарейка. И главное менять не надо.
lingvo
15.12.2019 20:57+1Ну, наверное, не придумали еще такой генератор, да еще и для использования в домашних датчиках. Или может он экономически не выгоден.
Вот у меня везде стоят детекторы дыма, так там батарейка вообще раз в 10 лет меняется.nikolz Автор
16.12.2019 09:00Из своего опыта замечу, что использование описанным методов позволяют реализовать устройства на ESP8285 без батарейки или аккумулятора. Например для питания датчика температуры на улице достаточно солнечную панельку 4x7 см2 и суперкондер на 1f.
При этом устройство способно передавать температуру каждые 10 минут.shadrap
16.12.2019 11:14поделитесь схемкой? я так и не смог реализовать в ЛО ни одной схемы с портативной с-панелькой, которая в итоге отдавала б больше, чем забирал ее контроллер.
nikolz Автор
16.12.2019 11:31Простейший вариант для ESP8285:
Солнечная панелька ->диод->С_1f->супервизор питания, управляющий активацией ESP через CE. И все.
АЦП внутри ESP измеряет напряжение питания.
минимальное напряжение работы ESP8285 2в.shadrap
16.12.2019 11:36СПасибо. и какие потери на супервизоре, кондере? а главное сколько вы при этом имели от панельки? Моя панелька 80х80 в среднем больше 15ма не давала.
nikolz Автор
16.12.2019 12:17панелька может быть любая.
Энергия накапливается в суперкондере 1 фарада.
Используя вариант 2 передачи данных я измерил на какое количество сеансов хватит заряда супер кондера, если напряжение на нем составит 5 вольт.
В итоге получилось не менее 20 сеансов.
Работа устройства происходит так: суперкондер заряжается до порога супервизора, не менее 2.5в.
ESP начинает работать и передавать с заданным интервалом данные.
Как правило этот интервал не менее 1 минуты.
Погода бывает разная и следовательно скорость заряда будет разной.
ESP при активации проверяет напряжение питания и может увеличить время сна, либо отказаться от включения WiF,i либо что-то иное.
lingvo
16.12.2019 14:26Так это на улице. В доме оно непригодно.
nikolz Автор
16.12.2019 15:16Для дома ставим суперкондер 1f, который обеспечит активность примерно 10-20 раз без подзарядки, и маломощный источник питания от сети, который обеспечит подзарядку суперкондера.
lingvo
16.12.2019 15:34Вопрос был по альтернативе батарейному питанию. Если сеть есть, то никакие суперконденсаторы не нужны.
nikolz Автор
16.12.2019 16:02Мне не понятно, для каких целей в доме вы ставите ESP с батарейкой и каким образом все будет работать у вас без батарейки, если сеть вырубили на сутки или более?
В моем варианте для этой цели стоит суперкондер.
Кроме того, суперкондер решает проблему импульсного тока, который составляет до 300 мА для ESP и способен существенно сократить ресурс батарейки.
Для этого и ставим суперкондер.lingvo
16.12.2019 16:58Мне не понятно, для каких целей в доме вы ставите ESP с батарейкой и каким образом все будет работать у вас без батарейки, если сеть вырубили на сутки или более?
Есть места в доме, где электричества нет, но необходимо размещать датчики. Это всевозможные датчики температуры, которые должны измерять температуру комнаты, а не стены или лампы. Типичный пример также датчики влажности/протечки/присутствия/движения/открытия/закрытия дверей и окон. Здесь только с окнами можно что-то придумать в качестве харвестинга. Также есть некоторые актуаторы, которым тоже бы батарейка не помешала. Это в первую очередь замки(на дверь не особо электричество выведешь) и различные затворные клапана, например краны на батареях. Как видите сфера применений ESP или любой другой технологии с батарейками достаточно широкая.
И единственное интересное изобретение, что я видел в этом плане — управляемый лазер/IR для подзарядки устройств, оборудованных приемниками. Т.е. он сканирует помещение и периодически подзаряжает устройства в комнате. Например как вот такой продукт.
Но для этого устройства должны быть в прямой видимости и в одной комнате.nikolz Автор
16.12.2019 18:21Безусловно, если электричества нет и кругом темно, то надо батарейку или аккумулятор.
Рассмотренные в статье способы ускорения передачи сообщений решают задачу увеличение длительности работы батарейки.
— Например, для передачи одного сообщения по варианту 2 потребуется 0.25 секунды при среднем токе 52 мА т е один сеанс связи скушает 13 mA*s. или 0.004 mA*H.
Батарейки на 4000 mA*H с интервалом связи в 10 минут хватит на 7620 дней или 20 лет.
Если используете 3,4 или 5 вариант то и на все 40 лет.
— В системах контроле протечки, если затоплять соседей не чаще один раз в день, батарейки хватит на 120 лет.
Zmiy666
16.12.2019 18:38в таком доме надо изначально делать слаботочную сеть для датчиков и солнечную панельку на
крышеюжной стене (чтоб зимой работала тоже) — пожалуй самое эффективное решение, что-бы не случилось, энергия будет всегда и для питания датчиков ее надо немного. Можно не бояться, что сядут батарейки или отрубят электричество.nikolz Автор
16.12.2019 18:42Если я правильно понял, то речь идет об автономных датчиках, к которым нельзя конструктивно подключить какие-либо провода.
lingvo
16.12.2019 18:46в таком доме надо изначально делать слаботочную сеть для датчиков и солнечную панельку на крыше южной стене (чтоб зимой работала тоже) — пожалуй самое эффективное решение,
Ну, надеюсь понятно, что речь идет о дооснащении существующей квартиры/дома. Если изначально проектировать помещения под Умный Дом, то можно многое наворотить и таких вопросов/требований не возникает.
remzalp
15.12.2019 19:12Но у них на батарейках датчики, которые измеряют величины, не особо быстро меняющиеся. Так что спит, измеряет, если показание изменилось, можно передавать. Это сильно экономично
sav13
15.12.2019 14:27Еще бы выход их сна у ESP был бы не через перезагрузку!
А то костыль на костыле.
Zolg
15.12.2019 17:46При работе от батарейки, например, датчика температуры
Можно было бы выбрать более подходящий протокол (zigbee, ble,...). Но, согласен, это путь слабаков.
eri
15.12.2019 20:55+1а почему бы не пулять заранее сгенерированный пакет в открытую несуществующую сеть, данные собирать в режиме монитора. там даже слой мак не нужен. передавай все в tlv структуре заголовка wifi
Paskin
15.12.2019 23:42«Проблема соседа» — кто-то может (специально или нечаянно) использовать тот же метод в той же примерно локации и ваша система «сойдет с ума».
nikolz Автор
16.12.2019 09:07Так и делается в последнем методе. Для точки доступа используется пакет маяка. Для станции пакет запроса.
boojum
16.12.2019 07:09+1Если в коридоре, то отправляю устройство снова спать. Таким образом, существенно сокращаются лишние посылки данных.
При таком подходе, если устройство выйдет из строя, вы об этом не узнаете, а будете считать, что раз данных нет, значит всё в порядке.nikolz Автор
16.12.2019 08:47Это лишь примеры работы устройства до включения wifi.
Вопросы надежности работы устройства не являются предметом данной статьи.
lingvo
16.12.2019 14:28Ну можно посылать данные раз в сутки независимо от того в коридоре они или нет. Это на самом деле чисто детали реализации.
AC130
Максимальное количество устройств в сети составляет 256. Возможна коллизия идентификаторов устройств при наличии рядом других сетей, использующих тот же протокол. Непонятно как шифровать передаваемые данные.
Метод хорош для DIY-проекта, но совершенно неприменим в индустриальных масштабах. Продавать в промышленных масштабах устройства, работающие с предложенным протоколом, нельзя. Взять ещё условный Wi-Fi HaLow, где можно спать без потери соединения с точкой доступа, и сравнить с ним — сильно выиграете?
vyacheslavteplyakov
Так esp и годится только для diy проектов, о каком промышленном применении вообще может идти речь? Какое шифрование? Враги узнают секретную температуру много самогонного аппарата?
Iv38
Не знаю на счет всякой промавтоматики, но ESP8266 широко используется в бытовых IoT устройствах, которые можно купить в магазине.
vyacheslavteplyakov
Не вижу противоречий.
AC130
Речь не идёт о промышленном применении. Речь идёт о массовом применении. Идея прекрасно работает пока вы лично один на весь город используете МАК-адрес для передачи 4 байт. Как только вы выпускаете миллион подобных устройств и их ставят все кому не лень — тут и полезут проблемы.
Не только узнают, но и подменят. И не обязательно враги — это может быть сосед, просто поменявший МАК-адрес по своим причинам.
nikolz Автор
Статья не посвящена вопросам безопасности.
А придуманная Вами проблема воинствующего окружения мало соответствует действительности. Дело в том, что ESP модули в закрытом помещении взаимодействуют друг с другом примерно на 10 метров. Чтобы враги не узнали, что вы передаете температуру самогонного аппарата, не надо им об этом рассказывать.
trapwalker
Так себе подход к безопасности (security by obscurity).
Правильно говорили выше. Стоит такой вот конструкции самогонного аппарата получить более-менее приличное распространение (а с распространением полезняшек в комьюнити энтузиастов нынче проблем нет), найдётся обязательно какой-нибудь тщеславный хакер, который не поленится сделать WiFi пушку и походить с нею по густонаселенным кварталам вечерочком. Если эта штука позволит, скажем, через эксплойт выставить температуру за 102 градуса, то считай бомба получится.
Но суть в том, что до массового применения уязвимости мироное население не знает и не догадывается о возможных последствиях.
С учетом потенциальной масштабируемости таких решений, можно просто попасть под довольно глобальную шутку, проделанную ради фана или просто нечаянно в составе какой-то другой атаки.
Я бы термостат этой методике не доверял. А температуру показывать… ну норм, окей. Но аппетит же приходит во время еды и найдётся умелец, который додумается о расширении протокола, но пренебрежет безопасностью. Принцип «неуловимого Джо» сбережёт большинство, но не всех.
nikolz Автор
Если страшно использовать Вариант 5, нет знаний чтобы использовать Вариант 3, то воспользуйтесь вариантом 2.
Вариант 3 позволяет шифровать с ключом 256 байт и такой же по экономии батарейки как 4 и 5.
Вариант 2 позволяет шифровать с ключом любой длины и лишь в 2 раза менее эффективнее, чем 3,4 и 5.
Но вариант 2 экономичнее раз в 10, чем применяемые сейчас большинством.
Проблема лишь в уровне знаний пользователя, особо когда кроме ардуино тот ничего другого не знает.
nikolz Автор
В индустриальных масштабах предлагаю использовать 2 и 3 варианты.
trapwalker
Кстати, статический IP тоже так себе подходит в индустриальных решениях. Только в случаях, когда для набора датчиков отдельная сеть. Да и то, если учесть насколько замусорен диапазон WiFi в многоквартирных домах, то нафига выбирать такой протокол для IoT и УмногоДома? Это ж только дискредитирует идею за счет глючности и ненадёжности.