Добрый день всем!!!

Данная статья в основном касается популярного модуля 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)


  1. AC130
    15.12.2019 10:54

    Максимальное количество устройств в сети составляет 256. Возможна коллизия идентификаторов устройств при наличии рядом других сетей, использующих тот же протокол. Непонятно как шифровать передаваемые данные.

    Метод хорош для DIY-проекта, но совершенно неприменим в индустриальных масштабах. Продавать в промышленных масштабах устройства, работающие с предложенным протоколом, нельзя. Взять ещё условный Wi-Fi HaLow, где можно спать без потери соединения с точкой доступа, и сравнить с ним — сильно выиграете?


    1. vyacheslavteplyakov
      15.12.2019 14:56

      Так esp и годится только для diy проектов, о каком промышленном применении вообще может идти речь? Какое шифрование? Враги узнают секретную температуру много самогонного аппарата?


      1. Iv38
        15.12.2019 16:12
        +1

        Не знаю на счет всякой промавтоматики, но ESP8266 широко используется в бытовых IoT устройствах, которые можно купить в магазине.


        1. vyacheslavteplyakov
          15.12.2019 16:53

          Не вижу противоречий.


      1. AC130
        15.12.2019 22:07

        Речь не идёт о промышленном применении. Речь идёт о массовом применении. Идея прекрасно работает пока вы лично один на весь город используете МАК-адрес для передачи 4 байт. Как только вы выпускаете миллион подобных устройств и их ставят все кому не лень — тут и полезут проблемы.

        Какое шифрование? Враги узнают секретную температуру много самогонного аппарата?

        Не только узнают, но и подменят. И не обязательно враги — это может быть сосед, просто поменявший МАК-адрес по своим причинам.


        1. nikolz Автор
          16.12.2019 08:54

          Статья не посвящена вопросам безопасности.
          А придуманная Вами проблема воинствующего окружения мало соответствует действительности. Дело в том, что ESP модули в закрытом помещении взаимодействуют друг с другом примерно на 10 метров. Чтобы враги не узнали, что вы передаете температуру самогонного аппарата, не надо им об этом рассказывать.


          1. trapwalker
            18.12.2019 13:31

            Так себе подход к безопасности (security by obscurity).
            Правильно говорили выше. Стоит такой вот конструкции самогонного аппарата получить более-менее приличное распространение (а с распространением полезняшек в комьюнити энтузиастов нынче проблем нет), найдётся обязательно какой-нибудь тщеславный хакер, который не поленится сделать WiFi пушку и походить с нею по густонаселенным кварталам вечерочком. Если эта штука позволит, скажем, через эксплойт выставить температуру за 102 градуса, то считай бомба получится.
            Но суть в том, что до массового применения уязвимости мироное население не знает и не догадывается о возможных последствиях.
            С учетом потенциальной масштабируемости таких решений, можно просто попасть под довольно глобальную шутку, проделанную ради фана или просто нечаянно в составе какой-то другой атаки.

            Я бы термостат этой методике не доверял. А температуру показывать… ну норм, окей. Но аппетит же приходит во время еды и найдётся умелец, который додумается о расширении протокола, но пренебрежет безопасностью. Принцип «неуловимого Джо» сбережёт большинство, но не всех.


            1. nikolz Автор
              18.12.2019 15:39

              Если страшно использовать Вариант 5, нет знаний чтобы использовать Вариант 3, то воспользуйтесь вариантом 2.
              Вариант 3 позволяет шифровать с ключом 256 байт и такой же по экономии батарейки как 4 и 5.
              Вариант 2 позволяет шифровать с ключом любой длины и лишь в 2 раза менее эффективнее, чем 3,4 и 5.
              Но вариант 2 экономичнее раз в 10, чем применяемые сейчас большинством.
              Проблема лишь в уровне знаний пользователя, особо когда кроме ардуино тот ничего другого не знает.


    1. nikolz Автор
      16.12.2019 09:13

      В индустриальных масштабах предлагаю использовать 2 и 3 варианты.


      1. trapwalker
        18.12.2019 13:33

        Кстати, статический IP тоже так себе подходит в индустриальных решениях. Только в случаях, когда для набора датчиков отдельная сеть. Да и то, если учесть насколько замусорен диапазон WiFi в многоквартирных домах, то нафига выбирать такой протокол для IoT и УмногоДома? Это ж только дискредитирует идею за счет глючности и ненадёжности.


  1. lingvo
    15.12.2019 12:02

    Вроде, как проблему давно победили — те же Shelly обещают по два года работы от одной батарейки. И они на ESP


    1. Zmiy666
      15.12.2019 19:06
      -1

      если устройство может работать 2 года на батарейке — то лучше батарейку вообще выкинуть из цепи, заменив ее конденсатором и неким источником, работающим от энергии внешней среды, от перепада тепла, давления, от света… ток мизерный но за 2 года любой такой генератор наделает больше энергии чем батарейка. И главное менять не надо.


      1. lingvo
        15.12.2019 20:57
        +1

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


        1. nikolz Автор
          16.12.2019 09:00

          Из своего опыта замечу, что использование описанным методов позволяют реализовать устройства на ESP8285 без батарейки или аккумулятора. Например для питания датчика температуры на улице достаточно солнечную панельку 4x7 см2 и суперкондер на 1f.
          При этом устройство способно передавать температуру каждые 10 минут.


          1. shadrap
            16.12.2019 11:14

            поделитесь схемкой? я так и не смог реализовать в ЛО ни одной схемы с портативной с-панелькой, которая в итоге отдавала б больше, чем забирал ее контроллер.


            1. nikolz Автор
              16.12.2019 11:31

              Простейший вариант для ESP8285:
              Солнечная панелька ->диод->С_1f->супервизор питания, управляющий активацией ESP через CE. И все.
              АЦП внутри ESP измеряет напряжение питания.
              минимальное напряжение работы ESP8285 2в.


              1. shadrap
                16.12.2019 11:36

                СПасибо. и какие потери на супервизоре, кондере? а главное сколько вы при этом имели от панельки? Моя панелька 80х80 в среднем больше 15ма не давала.


                1. nikolz Автор
                  16.12.2019 12:17

                  панелька может быть любая.
                  Энергия накапливается в суперкондере 1 фарада.
                  Используя вариант 2 передачи данных я измерил на какое количество сеансов хватит заряда супер кондера, если напряжение на нем составит 5 вольт.
                  В итоге получилось не менее 20 сеансов.
                  Работа устройства происходит так: суперкондер заряжается до порога супервизора, не менее 2.5в.
                  ESP начинает работать и передавать с заданным интервалом данные.
                  Как правило этот интервал не менее 1 минуты.
                  Погода бывает разная и следовательно скорость заряда будет разной.
                  ESP при активации проверяет напряжение питания и может увеличить время сна, либо отказаться от включения WiF,i либо что-то иное.


          1. lingvo
            16.12.2019 14:26

            Так это на улице. В доме оно непригодно.


            1. nikolz Автор
              16.12.2019 15:16

              Для дома ставим суперкондер 1f, который обеспечит активность примерно 10-20 раз без подзарядки, и маломощный источник питания от сети, который обеспечит подзарядку суперкондера.


              1. lingvo
                16.12.2019 15:34

                Вопрос был по альтернативе батарейному питанию. Если сеть есть, то никакие суперконденсаторы не нужны.


                1. nikolz Автор
                  16.12.2019 16:02

                  Мне не понятно, для каких целей в доме вы ставите ESP с батарейкой и каким образом все будет работать у вас без батарейки, если сеть вырубили на сутки или более?
                  В моем варианте для этой цели стоит суперкондер.
                  Кроме того, суперкондер решает проблему импульсного тока, который составляет до 300 мА для ESP и способен существенно сократить ресурс батарейки.

                  Для этого и ставим суперкондер.


                  1. lingvo
                    16.12.2019 16:58

                    Мне не понятно, для каких целей в доме вы ставите ESP с батарейкой и каким образом все будет работать у вас без батарейки, если сеть вырубили на сутки или более?

                    Есть места в доме, где электричества нет, но необходимо размещать датчики. Это всевозможные датчики температуры, которые должны измерять температуру комнаты, а не стены или лампы. Типичный пример также датчики влажности/протечки/присутствия/движения/открытия/закрытия дверей и окон. Здесь только с окнами можно что-то придумать в качестве харвестинга. Также есть некоторые актуаторы, которым тоже бы батарейка не помешала. Это в первую очередь замки(на дверь не особо электричество выведешь) и различные затворные клапана, например краны на батареях. Как видите сфера применений ESP или любой другой технологии с батарейками достаточно широкая.


                    И единственное интересное изобретение, что я видел в этом плане — управляемый лазер/IR для подзарядки устройств, оборудованных приемниками. Т.е. он сканирует помещение и периодически подзаряжает устройства в комнате. Например как вот такой продукт.
                    Но для этого устройства должны быть в прямой видимости и в одной комнате.


                    1. 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 лет.


                    1. Zmiy666
                      16.12.2019 18:38

                      в таком доме надо изначально делать слаботочную сеть для датчиков и солнечную панельку на крыше южной стене (чтоб зимой работала тоже) — пожалуй самое эффективное решение, что-бы не случилось, энергия будет всегда и для питания датчиков ее надо немного. Можно не бояться, что сядут батарейки или отрубят электричество.


                      1. nikolz Автор
                        16.12.2019 18:42

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


                      1. lingvo
                        16.12.2019 18:46

                        в таком доме надо изначально делать слаботочную сеть для датчиков и солнечную панельку на крыше южной стене (чтоб зимой работала тоже) — пожалуй самое эффективное решение,

                        Ну, надеюсь понятно, что речь идет о дооснащении существующей квартиры/дома. Если изначально проектировать помещения под Умный Дом, то можно многое наворотить и таких вопросов/требований не возникает.


    1. remzalp
      15.12.2019 19:12

      Но у них на батарейках датчики, которые измеряют величины, не особо быстро меняющиеся. Так что спит, измеряет, если показание изменилось, можно передавать. Это сильно экономично


  1. sav13
    15.12.2019 14:27

    Еще бы выход их сна у ESP был бы не через перезагрузку!
    А то костыль на костыле.


  1. Zolg
    15.12.2019 17:46

    При работе от батарейки, например, датчика температуры

    Можно было бы выбрать более подходящий протокол (zigbee, ble,...). Но, согласен, это путь слабаков.


  1. eri
    15.12.2019 20:55
    +1

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


    1. Paskin
      15.12.2019 23:42

      «Проблема соседа» — кто-то может (специально или нечаянно) использовать тот же метод в той же примерно локации и ваша система «сойдет с ума».


    1. nikolz Автор
      16.12.2019 09:07

      Так и делается в последнем методе. Для точки доступа используется пакет маяка. Для станции пакет запроса.


  1. boojum
    16.12.2019 07:09
    +1

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

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


    1. nikolz Автор
      16.12.2019 08:47

      Это лишь примеры работы устройства до включения wifi.
      Вопросы надежности работы устройства не являются предметом данной статьи.


    1. lingvo
      16.12.2019 14:28

      Ну можно посылать данные раз в сутки независимо от того в коридоре они или нет. Это на самом деле чисто детали реализации.


  1. yudinetz
    16.12.2019 11:19
    +1

    Я вообще не потребляю wifi-модули