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

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

    Данная статья в основном касается популярного модуля 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 раз.
    Именно так я и поступаю, но в интернете я не встречал такого решения.

    Всем успехов в экономии энергии.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 39

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

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

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

          +2
          Не знаю на счет всякой промавтоматики, но ESP8266 широко используется в бытовых IoT устройствах, которые можно купить в магазине.
          0
          Речь не идёт о промышленном применении. Речь идёт о массовом применении. Идея прекрасно работает пока вы лично один на весь город используете МАК-адрес для передачи 4 байт. Как только вы выпускаете миллион подобных устройств и их ставят все кому не лень — тут и полезут проблемы.
          Какое шифрование? Враги узнают секретную температуру много самогонного аппарата?

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

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

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

                Ну откуда вы такие цифры берёте, 10 метров? 20-30 метров, читай как два-три этажа вниз и вверх пробивает легко. Для меня реально проблема незащищённость Bluetooth устройств Сяоми, да, у них всех совсем до недавнего времени просто отсутствовал пароль. Сейчас пароль можно задать, но он действует только для софта mi home. А для утилиты умного дома этот пароль побоку, она все устройства легко видит. Видимо разработчики тоже так рассуждали, что максимальный радиус 8 метров. Но по факту я вижу кроме своих ещё 4 соседских девайса умного дома, а mi flora до сих пор не имеет возможности задать пароль, и не редко сосед меняет у моих цветков имя. Причем для любых действий с mi flora достаточно только приложения, никаких паролей не нужно, ничего на девайсе нажимать не нужно.
                И того, я знаю когда сосед поливает свои растения, я знаю когда он проветривает свою комнату, я знаю когда он купается или готовит (влажность прстепенно или лавинообразно взлетает. По этим причинам я отказался от блютуз девайсов сяоми.

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

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

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

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

                  0
                  Из своего опыта замечу, что использование описанным методов позволяют реализовать устройства на ESP8285 без батарейки или аккумулятора. Например для питания датчика температуры на улице достаточно солнечную панельку 4x7 см2 и суперкондер на 1f.
                  При этом устройство способно передавать температуру каждые 10 минут.
                    0
                    поделитесь схемкой? я так и не смог реализовать в ЛО ни одной схемы с портативной с-панелькой, которая в итоге отдавала б больше, чем забирал ее контроллер.
                      0
                      Простейший вариант для ESP8285:
                      Солнечная панелька ->диод->С_1f->супервизор питания, управляющий активацией ESP через CE. И все.
                      АЦП внутри ESP измеряет напряжение питания.
                      минимальное напряжение работы ESP8285 2в.
                        0
                        СПасибо. и какие потери на супервизоре, кондере? а главное сколько вы при этом имели от панельки? Моя панелька 80х80 в среднем больше 15ма не давала.
                          +1
                          панелька может быть любая.
                          Энергия накапливается в суперкондере 1 фарада.
                          Используя вариант 2 передачи данных я измерил на какое количество сеансов хватит заряда супер кондера, если напряжение на нем составит 5 вольт.
                          В итоге получилось не менее 20 сеансов.
                          Работа устройства происходит так: суперкондер заряжается до порога супервизора, не менее 2.5в.
                          ESP начинает работать и передавать с заданным интервалом данные.
                          Как правило этот интервал не менее 1 минуты.
                          Погода бывает разная и следовательно скорость заряда будет разной.
                          ESP при активации проверяет напряжение питания и может увеличить время сна, либо отказаться от включения WiF,i либо что-то иное.
                            +1
                            Очень круто и любопытно! =) Напишите статью, пожалуйста. Уверен, она вызовет неподдельный интерес!
                      0

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

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

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

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

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

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


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

                                0
                                Безусловно, если электричества нет и кругом темно, то надо батарейку или аккумулятор.
                                Рассмотренные в статье способы ускорения передачи сообщений решают задачу увеличение длительности работы батарейки.
                                — Например, для передачи одного сообщения по варианту 2 потребуется 0.25 секунды при среднем токе 52 мА т е один сеанс связи скушает 13 mA*s. или 0.004 mA*H.
                                Батарейки на 4000 mA*H с интервалом связи в 10 минут хватит на 7620 дней или 20 лет.
                                Если используете 3,4 или 5 вариант то и на 30 лет.
                                — В системах контроле протечки, если затоплять соседей не чаще один раз в день, батарейки хватит на 120 лет.
                                  0
                                  в таком доме надо изначально делать слаботочную сеть для датчиков и солнечную панельку на крыше южной стене (чтоб зимой работала тоже) — пожалуй самое эффективное решение, что-бы не случилось, энергия будет всегда и для питания датчиков ее надо немного. Можно не бояться, что сядут батарейки или отрубят электричество.
                                    0
                                    Если я правильно понял, то речь идет об автономных датчиках, к которым нельзя конструктивно подключить какие-либо провода.
                                      0
                                      в таком доме надо изначально делать слаботочную сеть для датчиков и солнечную панельку на крыше южной стене (чтоб зимой работала тоже) — пожалуй самое эффективное решение,

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

                      0

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

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

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

                          +1
                          а почему бы не пулять заранее сгенерированный пакет в открытую несуществующую сеть, данные собирать в режиме монитора. там даже слой мак не нужен. передавай все в tlv структуре заголовка wifi
                            0
                            «Проблема соседа» — кто-то может (специально или нечаянно) использовать тот же метод в той же примерно локации и ваша система «сойдет с ума».
                              0
                              Так и делается в последнем методе. Для точки доступа используется пакет маяка. Для станции пакет запроса.
                              +1
                              Если в коридоре, то отправляю устройство снова спать. Таким образом, существенно сокращаются лишние посылки данных.

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

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

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

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

                                  Самое читаемое