Esp8266 потребление тока. Как уменьшить энергопотребление ESP8266 и продлить время автономной работы

Как снизить энергопотребление модуля ESP8266 в 10 и более раз. Какие режимы энергосбережения есть у ESP8266. Как правильно настроить глубокий сон модуля. Какие компоненты схемы влияют на энергопотребление. Как оптимизировать код для экономии энергии.

Содержание

Энергопотребление ESP8266 в различных режимах работы

Модуль ESP8266 в активном режиме потребляет довольно много энергии — около 70-80 мА. Это делает проблематичным длительную автономную работу устройств на его основе. Однако есть несколько способов существенно снизить энергопотребление:

  • Использование режима глубокого сна (deep sleep)
  • Отключение Wi-Fi на время сна
  • Снижение тактовой частоты процессора
  • Оптимизация кода и алгоритмов работы
  • Использование эффективных компонентов в схеме

Рассмотрим подробнее энергопотребление ESP8266 в различных режимах:

  • Активный режим с включенным Wi-Fi: 70-80 мА
  • Режим модема (только Wi-Fi): 15-20 мА
  • Легкий сон: 0.9 мА
  • Глубокий сон: 20 мкА

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

Использование режима глубокого сна ESP8266

Режим глубокого сна (deep sleep) — основной способ экономии энергии для ESP8266. В этом режиме отключается большинство систем модуля, включая Wi-Fi и процессор. Активным остается только RTC таймер, который может разбудить модуль через заданное время.

Для перехода в глубокий сон используется функция:

ESP.deepSleep(sleepTimeInMicroseconds);

Время сна задается в микросекундах. Максимальное время — около 71 минуты.

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

Оптимизация кода для экономии энергии

Чтобы максимально сократить время активной работы ESP8266 между периодами сна, необходимо оптимизировать код:

  • Минимизировать время подключения к Wi-Fi
  • Использовать статический IP вместо DHCP
  • Отправлять данные сразу после подключения к сети
  • Избегать длительных задержек и циклов
  • Выключать ненужную периферию

Пример оптимизированного кода с использованием глубокого сна:

void setup() {
  // Инициализация датчиков
  initSensors();
  
  // Подключение к Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(10);
  }

  // Отправка данных на сервер  
  sendData();

  // Уход в глубокий сон
  ESP.deepSleep(60e6); // 60 секунд
}

void loop() {
  // Пустой, так как используется deepSleep
}

Аппаратная оптимизация схемы для снижения энергопотребления

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

  • Использовать эффективные LDO стабилизаторы с низким током потребления
  • Отключать неиспользуемые компоненты через MOSFET ключи
  • Использовать датчики с низким энергопотреблением
  • Отказаться от подтягивающих резисторов там, где это возможно
  • Применять понижающие DC-DC преобразователи вместо линейных стабилизаторов

Пример схемы с отключением питания датчиков на время сна:

Схема отключения питания датчиков

Выбор оптимального источника питания

Для длительной автономной работы важно правильно выбрать источник питания. Наиболее эффективны:

  • Литий-ионные и литий-полимерные аккумуляторы
  • Литиевые батарейки типа CR123A или 18650
  • Солнечные панели с аккумулятором

Следует избегать использования щелочных батареек из-за их низкой емкости. Также не рекомендуется применять повышающие преобразователи, так как они снижают КПД системы питания.

Мониторинг напряжения батареи

Для контроля разряда батареи можно использовать встроенный АЦП ESP8266. Это позволит вовремя сигнализировать о необходимости замены или подзарядки.

Пример кода для измерения напряжения:

float getBatteryVoltage() {
  int rawValue = analogRead(A0);
  float voltage = rawValue * (4.2 / 1023.0);
  return voltage;
}

Важно учитывать, что точность измерения может быть не очень высокой. Для более точных измерений рекомендуется использовать внешний АЦП.

Расчет времени автономной работы

Зная потребление тока в различных режимах и емкость батареи, можно рассчитать примерное время автономной работы устройства. Формула для расчета:

Время работы (ч) = Емкость батареи (мАч) / Средний ток потребления (мА)

Пример расчета для устройства с циклом: 5 секунд активной работы, 55 секунд сна:

  • Потребление в активном режиме: 80 мА
  • Потребление в режиме сна: 0.02 мА
  • Средний ток: (80 * 5 + 0.02 * 55) / 60 = 6.68 мА
  • Время работы от батареи 2000 мАч: 2000 / 6.68 = 299 часов ≈ 12.5 дней

Этот расчет дает приблизительную оценку. Реальное время работы может отличаться из-за саморазряда батареи, колебаний температуры и других факторов.

Дополнительные способы оптимизации энергопотребления

Помимо основных методов, существуют и другие способы снизить энергопотребление ESP8266:

  • Использование режима модема (modem-sleep) для периодического отключения Wi-Fi
  • Снижение мощности передатчика Wi-Fi
  • Использование протокола MQTT вместо HTTP для передачи данных
  • Применение алгоритмов сжатия данных перед отправкой
  • Оптимизация частоты опроса датчиков и отправки данных

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


сколько NodeMCU GPIO максимальный ток и NodeMCU автономное энергопотребление?



К сожалению, я не могу найти аппаратную спецификацию о NodeMCU.

поэтому я хочу знать об ограничении тока GPIO, автономном источнике питания Comsumptionm и размере платы.

или вы можете поделиться ссылкой о спецификации оборудования NodeMCU?

некоторые страницы говорят, что максимальный ток GPIO составляет 12 мА, но я не могу найти ни одного уверенно сказать.

Спасибо.

esp8266 nodemcu
Поделиться Источник ParkDyel     07 октября 2016 в 07:21

2 ответа


  • Программирование NodeMCU-gpio

    Я использую плату NodeMCU, распиновку V3 и Arduino IDE. Мне нужно осциллировать один из выходных контактов, и, покопавшись, я нашел эту страницу: https://github.com/nodemcu/nodemcu-firmware/blob/master/docs/en/modules/gpio. md Очень полезно, особенно функция gpio.serout() , но я не могу заставить…

  • Почему NodeMCU запускает gpio в обратном порядке при использовании Lua?

    При использовании Lua и модуля GPIO с my NodeMCU мои высокие и низкие значения происходят в обратном порядке. Я скачал свою сборку из NodeMCU пользовательских сборок: ссылка Чтобы включить синий LED на ESP8266 , GPIO , как правило, вы устанавливаете пин-код от 0 до максимума. Что происходит со…



6

В справочнике данных (то есть «техническом справочнике») ничего не говорится, но сотрудник Espressif ответил на этот вопрос на своих форумах :

  1. 12МА здесь относится к току источника, а ток стока больше 12МА.
  2. 12 мА-это для каждого штыря, и каждый штырь одинаков.
  3. Ток мощности привода всех GPIO контактов всего может be 16 x 12 мА.

И

Ток стока GPIO составляет около 20 мА. Максимальный ток источника GPIO составляет около 12 мА.

Поделиться Marcel Stör     07 октября 2016 в 13:13



3

Небольшой момент, чтобы добавить, потребление энергии ESP8266 легко найти в спецификации ( например , http://www.esp8266.com/wiki/ doku.php?id=esp8266_power_usage ), но на самом деле это не NodeMCU. USB UART, LDO, LED on NodeMCU все потребляют постоянную мощность, если вы хотите, например, работать от батареи( https://tinker.yeoman.com.au/2016/05/29/running-nodemcu-on-a-battery-esp8266-low-power-consumption-revisited/ ) это необходимо учитывать.

Из приведенной выше ссылки:

Я измерил 18 Ма на плате NodeMCU, пока ESP8266 находился в режиме глубокого сна – на порядки более энергозатратном, чем я искал..

Теперь для самой большой экономии – отключить USB UART.

Теперь вы уменьшите энергопотребление примерно на 360x до примерно 50 МКА 20 МКА [обновлено 28 января 2017 года, когда я питал только NodeMCU, без дополнительной схемы]. …

Поделиться Ben     27 февраля 2017 в 11:57


Похожие вопросы:


Невозможно запрограммировать NodeMCU

Этот вопрос связан с тем,что нельзя запрограммировать ESP8266 , но разные настройки. У меня есть NodeMCU devkit v1 , его коммерческое название- NodeMCU v2 . Я попробовал другую настройку для…


HTTPS получить запросы с NodeMCU и ESP8266

У меня возникли проблемы с выполнением запроса HTTPS GET с NodeMCU, хотя кажется, что это должно быть возможно в соответствии с их документацией и этим ответом здесь, на StackOverflow. Код, который…


проблемы сборки пользовательской прошивки nodemcu

всем привет:) Я построил прошивку с помощью сервиса сборки cloud.

Прошивка Мастер и включает в себя АЦП, файл, интерфейс GPIO, http, протоколу MQTT, сетка, узел, ой, спи, ПМР, интерфейсы UART, wifi,…


Программирование NodeMCU-gpio

Я использую плату NodeMCU, распиновку V3 и Arduino IDE. Мне нужно осциллировать один из выходных контактов, и, покопавшись, я нашел эту страницу:…


Почему NodeMCU запускает gpio в обратном порядке при использовании Lua?

При использовании Lua и модуля GPIO с my NodeMCU мои высокие и низкие значения происходят в обратном порядке. Я скачал свою сборку из NodeMCU пользовательских сборок: ссылка Чтобы включить синий LED…


Невозможно загрузить Lua скриптов в NodeMCU: недопустимо node.chipid()

Для всех этих сценариев я могу загрузить прошивку и монитор через serial usb. Но после создания моей первой прошивки, для всех новых прошивок, я не могу загрузить скрипты Lua с помощью nodemcu-tool,…


Thingsboard NodeMCU

Я подключил NodeMCU к датчику температуры и отправил данные о температуре на thingsboard, при отправке локально ( сервер thingsboard работает на localhost и NodeMCU, подключенных к одной сети )он. ..


среда сборки nodemcu Docker

У меня Ubuntu 16.04 LTS. У меня установлен Docker. docker run hello-world работает правильно. Я хочу использовать среду сборки Marcel nodeMCU docker. Я клонировал NodeMCU-прошивку с GitHub. cd…


Как защитить скрипты lua внутри Nodemcu

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


Дом NodeMCU прошивки

Я пытаюсь создать прошивку nodemcu, клонируя github и используя команду make, https://github.com/nodemcu/nodemcu-firmware . Я использую raspberry pi, что может быть проблемой. Я ничего не изменяю,…

Энергосбережение и сон Arduino


У вас наверняка есть настольные часы-будильник с датчиком температуры и влажности, которые работают на двух пальчиковых батарейках уже не первый год и даже не планируют разряжаться. В то же время, если подключить плату Ардуино к “паурбанку” на 10 Ампер*часов, она высосет его за две недели. Как же так вышло?!

Разработать энергоэффективное автономное устройство на Ардуино или голом микроконтроллере гораздо труднее, чем питающееся от “сети”: потребление схемы складывается из большого количества факторов: как аппаратных, так и программных. В этом уроке мы постараемся рассмотреть их все. Основные моменты энергосбережения:

  • Правильно подобрать источник питания по напряжению.
  • Минимизировать и оптимизировать потребление пассивных компонентов (стабилизаторы напряжения, светодиоды индикации, делители напряжения и т.д.).
  • Задать оптимальный режим работы устройства и отдельных его частей: максимальное энергосбережение бОльшую часть времени работы, пробуждение по внешним событиям или таймеру, работа различных компонентов по расписанию и т.д. Например: опрос датчика и отправка данных по радио раз в минуту, всё остальное время – максимальный сон МК и отключение датчика и радио от питания.
  • Что касается сна самого МК – спать можно при помощи встроенных команд (например ассемблерной asm("sleep") или sleep_mode() из avr/sleep.h), а можно использовать библиотеки. Например есть стандартная avr/sleep.h, которая идёт в комплекте со средой разработки. Из нестандартных есть весьма популярные Narcoleptic и Low-Power, имеющие гораздо бОльшие возможности по настройке сна. Мы сделали свою библиотеку для управления энергосбережением МК – GyverPower, которая включает в себя удобное управление сном и энергопотреблением МК на всех уровнях (сон, управление частотой и периферией), а также встроенный калибровщик сторожевого таймера и несколько уникальных фишек, которых нет ни в каких других библиотеках. В данном уроке я буду ссылаться именно на неё, с полной документацией можно ознакомиться здесь.
  • Также потребление МК сильно зависит от частоты. Можно понижать частоту между периодами активной работы (вычислений, работы с датчиками), об этом читай ниже.

Вольты, амперы, ёмкость


Начнем с базовых понятий мира электричества: Вольты и Амперы (более подробно про это читай в этом уроке). Вольты – напряжение, оно же разность потенциалов. Напряжение задаёт источник питания, например батарейка или блок питания. Амперы – сила тока в цепи, показывает с какой силой “расходуется” электрическая энергия. Ток в цепи задаёт потребитель. (Примечание: описанное выше справедливо для источника напряжения, коим является любая батарейка/аккумулятор или обычный блок питания. Источником тока может быть специальное зарядное устройство или светодиодный драйвер, от них питать предназначенную для источника напряжения схему нельзя – сразу сгорит).

Потребляемую и запасаемую энергию принято считать в Ампер*часах, работает это следующим образом: допустим, ёмкость аккумулятора составляет 1 А*ч (Ампер*час). Это означает, что такой аккумулятор сможет отдавать ток с силой 1 Ампер в течение одного часа, полностью при этом разрядившись. Если ток в цепи будет 0.5 А – аккумулятора хватит на 1 А*ч / 0.5 А == 2 часа. Плата Ардуино потребляет в районе 24 мА, то есть тот же условный аккумулятор сможет питать её в течение 1000 мА*ч /24 мА ~ 42 часов. При параллельном подключении потребителей, как это обычно бывает в схеме, ток потребления суммируется. Если добавить в “схему” из предыдущего расчёта дисплей с подсветкой, который будет потреблять условно ещё 30 мА, то такая схема проработает от того же аккумулятора 1000 мА*ч / (24+30 мА) ~ 18.5 часов. 

Потребление компонентов схемы


Если в устройстве помимо МК есть какие-то другие модули/датчики/дисплеи/микросхемы, то больший вклад в потребление энергии будут вносить именно они, потому что МК можно погрузить в сон, а их – не всегда. Логично, что для максимальной экономии энергии нужно держать все компоненты в полностью отключенном состоянии и включать только на период активной работы: датчики – на время опроса, дисплеи и подсветки – на время взаимодействия с человеком, и тому подобное.

  • Некоторые железки имеют очень удобный пин EN – enable, позволяющий логическим уровнем с МК полностью включать и выключать компонент, что позволяет очень просто управлять его состоянием.
  • Некоторые микросхемы имеют встроенный режим энергосбережения, который можно активировать из программы (например, передав нужную команду по интерфейсу связи). Информацию нужно искать в даташите или библиотеке на конкретную железку.
  • Если таких возможностей у железки нет – всегда можно просто разорвать ей питание при помощи транзистора или оптопары. Электромеханическое реле использовать не рекомендуется, т.к. оно само потребляет приличный ток.
  • Маломощные (до 20 мА) компоненты можно питать напрямую от пинов МК, что ещё больше упрощает задачу по управлению питанием. Примечание: у “Ардуиновских” AVR весьма приличный запас по току – в районе 40 мА на пин, но на таком токе напряжение просаживается и работа “железки” может стать нестабильной, поэтому не рекомендуется подключать на пин нагрузку выше 20 мА. К слову, у других процессоров (STM32, esp8266) максимальный ток с пинов на порядок ниже (2-5 мА) и что-то от них питать в принципе невозможно.
  • Большинство “интерфейсных” микросхем при сбросе питания будут требовать повторной инициализации. У того же например lcd дисплея после отключения и включения питания нужно вызвать метод .init(), чтобы дисплей начал реагировать на остальные команды.

Если система измеряет напряжение питания выше 5V (напряжение батареи аккумуляторов), то делитель напряжения должен быть рассчитан оптимально, чтобы не тратить ток в холостую. Об этом мы говорили в уроке про аналоговые входы.

Потребление платы Ардуино


Честно говоря, сам микроконтроллер может работать абсолютно самостоятельно просто при наличии питания, а смена режима сна или частоты будет влиять на потребление ровно так, как написано в даташите. Если в основе проекта лежит плата ардуино – начинаем загибать пальцы: светодиоды индикации, стабилизатор питания и usb-ttl преобразователь – все они потребляют ток в холостом режиме, просто потому что они сидят на общем питании. Плата Nano в активном режиме потребляет около 24 мА, а если погрузить МК в максимальный сон – в районе 5 мА. В то же время по даташиту МК в таком режиме должен потреблять в районе 1 мкА, то есть в 5000 (пять тысяч) раз больше!!! Эти самые 5 мА потребляют перечисленные выше компоненты на плате ардуино, поэтому для создания действительно энергоэффективного проекта нужно делать свою плату и паять на неё МК, либо брать скальпель/паяльник и убирать лишнее с платы Ардуино.

Потребление МК

Частота тактирования


Вычислительное ядро потребляет энергию всегда, когда находится в активном режиме: вычисляет ли программа арккосинус, ожидает ли окончание задержки delay(), висит ли в бесконечном пустом for(;;) – неважно. Потребление будет одинаковым во всех случаях, пока ядро тактируется. Более того, от частоты тактирования зависит напряжение, при котором МК гарантированно стабильно работает. Вот картинки из даташита на ATmega328:

 

На самом деле всё как обычно слегка “завышено”, потому что на 16 МГц клоке Ардуино прекрасно работает начиная от 3. 3V, а на 8 МГц (внутреннем) – от 1.8V (при отключенном BOD). Есть четыре уровня управления тактовой частотой:

  • Подключение внешнего кварца с нужной частотой (на плате Ардуино стоит 16 МГц, сам МК поддерживает вплоть до 20 МГц без разгона).
  • Выбор источника тактирования при помощи фьюзов: внешний (частота соответствует установленному генератору) и внутренний (8 МГц).
  • Изменение системной частоты прямо из программы: большинство МК avr позволяют понизить приходящую с источника тактирования частоту, а именно – поделить (реализовано в GyverPower). Таким образом можно замедлить работу всего МК для уменьшения потребления энергии или увеличения стабильности работы от пониженного напряжения. Можно выполнить необходимые действия на высокой частоте, а затем понизить её до минимума до наступления внешних событий по прерываниям или по таймеру. На некоторых МК есть PLL – умножитель частоты (например на Attiny85), позволяющий тактироваться на частоте 36 МГц от внутреннего источника! Для такого разгона придется поднять напряжение и обеспечить теплоотвод, но об этом не в этом уроке =).
  • Фьюз CKDIV8: системный делитель из предыдущего пункта автоматически устанавливается на 8 перед запуском МК. Это нужно для более надёжного старта при низком напряжении. Обычно используют так: МК стартует с CKDIV8 на пониженной частоте, измеряет напряжение питания, если оно достаточно высокое (аккумулятор не разряжен) частота выставляется на необходимую и работа продолжается. Иначе например можно всё вырубить и уйти в сон.

Также прилагаю картинку с графиками тока потребления МК в активном режиме (не во сне) в зависимости от частоты и напряжения питания:

Режимы энергосбережения


У микроконтроллера есть несколько режимов энергосбережения, в каждом из которых остаются в активном режиме только некоторые из аппаратных блоков (таймеры, интерфейсы, АЦП, и т.д.). Также у мк есть блок BOD, отвечающий за постоянный мониторинг напряжения и перезагрузку в случае его падения ниже настроенного порога. Во всех режимах сна остаётся активен АЦП, его нужно отключать отдельно (всё реализовано в GyverPower). Режимы энергосбережения МК (AVR):

  • IDLE – Легкий сон, отключается только клок CPU и Flash, пробуждается мгновенно от любых прерываний
  • POWERDOWN – Наиболее глубокий сон, отключается всё кроме WDT и внешних прерываний, просыпается от аппаратных (обычных + PCINT) или WDT, пробуждение за 16+6 тактов (~1.375 мкс на 16 МГц). Прерывание должно быть длиннее этого времени для успешного пробуждения!
  • STANDBY – Глубокий сон, идентичен POWERDOWN + system clock активен, пробуждение за 6 тактов (0.4 мкс)
  • POWERSAVE – Глубокий сон, идентичен POWERDOWN + timer 2 активен (+ можно проснуться от его прерываний), можно использовать для счета времени
  • EXTSTANDBY – Глубокий сон, идентичен POWERSAVE + system clock активен, пробуждение за 6 тактов (0.4 мкс)

Самый часто используемый на практике режим – power down, самый глубокий сон. В нём отключается всё, кроме watchdog и аппаратных прерываний (обычные external и PCINT). В данном режиме МК потребляет минимальный ток (ATmega328 – чуть меньше 1 мкА), а проснуться можно только по прерыванию Watchdog таймера или по аппаратному прерыванию (по кнопке). Очевидно, что в глубоком сне не работают таймеры и прерывания по ним, поэтому счёт времени становится отдельной задачей (в GyverPower эта задача решена максимально удобно).

Периферия


Помимо главного “ядра” у микроконтроллера есть куча периферийных блоков (АЦП, компаратор, таймеры, интерфейсы связи), которые по сути работают отдельно и могут общаться с МК на аппаратном уровне. Каждый блок потребляет некоторый ток, и при желании некоторые блоки можно отключить. В режиме глубокого сна они отключаются автоматически, а вот в активной работе нужно отключить их вручную. Большую таблицу с потреблением МК в разных режимах и с разным набором активной периферии можно посмотреть на официальной странице библиотеки Low Power, на всякий случай приложу её ниже. Управление периферией также реализовано в GyverPower.

Измерения проводились на 8 МГц плате Pro Mini при питании от Li-Ion аккумулятора (3.7V):

Питание

Источник питания


Выбор источника питания очень важен для эффективного энергосбережения: максимально желательно питать МК напрямую от батарейки/аккумулятора:

  • Трёх-четырёх АА/ААА батареек или аккумуляторов достаточно для работы на стандартной частоте 16 МГц (с 4-мя батарейками нужно быть аккуратнее по суммарному напряжению, а 4 никелевых аккумулятора подходят идеально).
  • От одного литиевого аккумулятора (3.7-4.2V) можно работать на 16 МГц, но при разряде ниже 3.5V работа на такой частоте уже может быть не очень стабильной (частоту можно чуть понизить, об этом ниже).
  • От литиевой 3V таблетки (CR2025, CR2032 и прочие) микроконтроллер отлично будет работать на внутреннем 8 МГц клоке.
  • Плохим вариантом можно считать ситуации, когда приходится использовать понижающие преобразователи и стабилизаторы: они все будут тратить несколько миллиампер “в тепло”, и даже режим сна МК может оказаться абсолютно бессмысленным. Но в любой ситуации нужно считать потребление и прикидывать время работы, для каких-то задач и работа от “Кроны” через стабилизатор будет приемлемой во имя упрощения схемы и стабильных 5 Вольт (китайский транзистор-тестер, например, включается на несколько секунд, поэтому заморочек по питанию нет).
  • Если в устройстве используется аккумуляторная батарея, то можно схитрить: высоковольтный потребитель (мотор к примеру) может питаться от общего напряжения с батареи через драйвер, а микроконтроллер может работать от одной его “банки”, соединяясь общим проводом с минусом. Микроконтроллер, особенно в режиме сна, потребляет ничтожно мало по сравнению с тем же мотором, поэтому о разбалансировке банок можно не беспокоиться. Таким образом МК также может мониторить напряжение батареи и отключать её при разряде, выполняя роль BMS. Про измерение напряжения мы говорили в уроке про аналоговые входы.
  • Также напомню, что питать всякие железки напрямую от МК можно только в некоторых пределах, подробнее о них и вообще питании проекта мы говорили в уроке о питании Ардуино и схемы в целом.

Самоблокировка питания


Самый надёжный и аппаратно простой способ сэкономить энергию – самоблокировка питания. Он подходит для устройств, которые включаются тактовой кнопкой (без фиксации) и через некоторое время должны сами отключиться до следующего клика по кнопке. Самоблокировка работает следующим образом: нажатие на кнопку подаёт ток на МК, он запускается, подаёт сигнал на “ключ”, который запараллеливает линию питания. Мы отпускаем кнопку, а МК продолжает работать, потому что сам удерживает ключ, через который идёт питание. Отсюда и название: самоблокировка питания. По тайм-ауту или другому алгоритму работы МК может отпустить ключ и отключиться. Через этот же ключ могут питаться и остальные железки, и точно так же быть отключены от питания при самовыключении.

Проблема в том, что МК от AVR могут питаться от любого GPIO пина (при наличии общей GND), поэтому практически все старые схемы из интернета не работают. Пока что удалось найти две схемы на форуме arduino, но лично я их не тестировал. В будущем дополню урок.

Но есть шикарный, простой и рабочий вариант: использовать стабилизатор напряжения с пином Enable, за который МК может “заблокировать” себе питание (за идею спасибо Дмитрию Карманову). Вот пример со стабилизатором me6212c33m5g на 3.3V (стоит в районе 15 руб). На схеме PWR_EN ведёт на физическую кнопку, подключенную второй ногой к питанию (батарейке), BUT_MK идёт на пин МК, который будет подавать высокий сигнал при запуске. 3V3 соответственно линия 3.3 (от неё питается сам МК и опционально что-то ещё), и BAT – батарейка.

Видео


Важные страницы


Измерение потребляемой электроэнергии и тока в сети 220В, добавление в HomeKit

Добрый день, Друзья! Давно у меня не было интересных самоделок с ESP8266. Сегодня хочу рассказать Вам, как очень просто измерять ток и нагрузку в сети 220В. Для этого нам понадобится:

Прошивка модуля

Рассказывать, как прошивать модуль nodeMCU или любой другой ESP8266, я не буду. Уже не однократно об этом говорилось в моих предыдущих статьях, например в этой: Охранная система в гараж на ESP 8266 с интеграцией в Apple HomeKit. Перейдем непосредственно к прошивке. 

По умолчанию в прошивке ESPEasy модуль PZEM-004T не поддерживается. Но на форуме letscontrolit имеется ветка по PZEM-004T, где aleph0 собрал прошивку для ESP8266. Прошивку скачиваем отсюда.

Подключение

Подключение PZEM-004T к nodeMCU осуществляется при помощи проводов Dupont мама-мама (4 шт.). Позже можно все распаять на монтажной плате. 

PZEM-004T
nodeMCU
5V (VDD)
VIN
RXGPIO-12 (D6)
TXGPIO-14 (D5)
GNDGND

AC подаем напряжение 220В, для замера.

CT подключаем трансформатор тока.

Заходим на Web интерфейс нашей прошитой ESP8266. Переходим во вкладку «Devices«. И добавляем новое устройство, «Voltage & Current (AC) — PZEM-004T«

Далее заполняем поля по аналогии. У меня это выглядит так:

Примечание: Значение Delay рекомендуется устанавливать не менее 15. При частом опросе модуль может выйти из строя. 

Нажимаем кнопку «Submit«, и видим такую картину. 

Настройки MQTT на ESPEasy

Переходим во вкладку «Сontrollers» и добавляем MQTT клиента. 

Настройка HomeAssistent

Повторяться, как устанавливать и настраивать MQTT брокер, тоже не буду. Берем все в той же статье. Приступим сразу к добавлению сенсора в конфигурационный файл. Открываем на редактирование «configuration.yaml» ищем раздел «sensor:» и добавляем:

- platform: mqtt
  name: "Voltage (V)"
  state_topic: "/Voltage/pzem/Voltage (V)"
- platform: mqtt
  name: "Current (A)"
  state_topic: "/Voltage/pzem/Current (A)"
- platform: mqtt
  name: "Power (W)"
  state_topic: "/Voltage/pzem/Power (W)"
- platform: mqtt
  name: "Energy (Wh)"
  state_topic: "/Voltage/pzem/Energy (Wh)"

После чего проверяем конфигурацию и перезагружаем Home Assistant. Далее добавляем новую карточку.

title: Учет электроэнергии
entities:
  - entity: sensor.voltage_v
  - entity: sensor.current_a
  - entity: sensor. power_w
  - entity: sensor.energy_wh
type: entities
show_header_toggle: true

Примечание: Чтобы устройства добавились в HomeKit их необходимо представить, например в виде датчика освещенности. 

Для этого в Веб — интерфейсе Home Assistant переходим в Настройки -> Настройка -> в поле «Entity» ищем наши сенсоры и добавляем в параметр «unit_of_measurement» значение «lm«

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

Настройка HomeBridge

По аналогии можно завести в HomeBridge, для этого нам необходим плагин homebridge-mqttthing, с устройством Light Sensor.

Конфигурационный файл будет выглядеть так:

{
      "accessory": "mqttthing",
      "type": "lightSensor",
      "name": "Voltage (V)",
      "url": "mqtt://127.0.0.1",
      "logMqtt": true,
      "topics": {
        "getCurrentAmbientLightLevel": "/Voltage/pzem/Voltage (V)"
      }
},
{
      "accessory": "mqttthing",
      "type": "lightSensor",
      "name": "Current (A)",
      "url": "mqtt://127.0.0.1",
      "logMqtt": true,
      "topics": {
        "getCurrentAmbientLightLevel": "/Voltage/pzem/Current (A)"
      }
},
{
      "accessory": "mqttthing",
      "type": "lightSensor",
      "name": "Power (W)",
      "url": "mqtt://127.0.0.1",
      "logMqtt": true,
      "topics": {
        "getCurrentAmbientLightLevel": "/Voltage/pzem/Power (W)"
      }
},
{
      "accessory": "mqttthing",
      "type": "lightSensor",
      "name": "Energy (Wh)",
      "url": "mqtt://127.0.0.1",
      "logMqtt": true,
      "topics": {
        "getCurrentAmbientLightLevel": "/Voltage/pzem/Energy (Wh)"
      }
}

Фотоотчет 

Схему я собрал на монтажной плате и поместил в корпус. 

В HomeKit это выглядит вот так. Да, знаю, эти люксы портят весь вид.

Если сильно заморочиться можно упаковать в «Корпус Z100F (белый)» и подключить дисплей «LCD1602» получиться законченное устройство в щиток на DIN-рейку. 

У меня в щитке столько свободного места не оказалось, поэтому я разместил все в компактный корпус и спрятал внутри щитка. Дисплей планирую подключить на шлейф и вывести между этажами автоматов. Об этом напишу когда-нибудь в своем блоге. 

Примечание: На один модуль ESP8266 можно подключить 3-4 PZEM-004T, таким образом можно снимать показания с разных силовых узлов. 

На этой все. Ставьте лайки, подписывайтесь на мои публикации. Впереди нас ждет еще много всего интересного.

Лучший способ питания ESP8266 (3,3 В) от батареек АА с LDO

Я вижу много проектов, использующих MCP1700 LDO в сочетании с ESP. Этот LDO имеет очень низкий ток покоя (<2 мкА), но в техническом описании сказано, что максимальный выходной ток составляет 200 мА, из того, что я прочитал, ESP может иметь пики до 250+ мА. Разве это не проблема?

Это не может быть проблемой, если выходной конденсатор на регуляторе может обеспечить дополнительные 50 мА в течение короткого периода времени без чрезмерного понижения выходного напряжения. Если конденсатор составляет, скажем, 100 мкФ, а текущее требование составляет, скажем, 0,1 мс, вы можете использовать формулу I = C dv / dt для расчета падения напряжения (dv) в 1 мс (dt).

Таким образом, 0,05 ампер х 0,1 мс = 100 мкФ х дв, следовательно, дв = 50 мВ, т. Е. Не сильно понижение. Сказав все это, я не знаю, как долго продлится пик 250 мА.

Какой LDO я должен использовать для стабильной, но энергосберегающей настройки?

Понятия не имею, что вы спрашиваете?

Как я могу рассчитать время, в течение которого эта установка будет работать, пока напряжение батарей не упадет ниже своего минимума?

Если каждая батарея рассчитана на 1900 мАч, общее последовательное соединение все равно будет 1900 мАч, но это может быть полное истощение до 2,5 Вольт (просто пример), так что будьте осторожны и предполагайте, что у вас есть только около 1000 мАч. В качестве альтернативы прочитайте таблицу данных для типа батареи и посмотрите, какие графики она показывает. Если это приличная батарея, у нее будут листы данных. Если вы купили его на ebay или aliexpress, не считайте это.

Какие заглушки я должен использовать для развязки LDO? Только те, которые предложены в таблице? Это важно, если конденсаторы керамические или электролитические?

Используйте типы в техническом паспорте, но имейте в виду, что вы должны попытаться использовать электролитические средства с низким ЭПР, если в DS не указано иное.

Начало работы с платой NodeMcu ESP8266 v3 Lua

NodeMcu – платформа на основе ESP8266 для создания различных устройств интернета вещей (IoT). Модуль умеет отправлять и получать информацию в локальную сеть либо в интернет при помощи Wi-Fi. Недорогой модуль часто используется для создания систем умного дома или роботов Arduino, управляемых на расстоянии. В этой статье мы рассмотрим описание платы, отличие версий и распиновку последней версии модуля Esp8266 NodeMcu v3. Также мы коротко рассмотрим язык Lua, на котором нужно писать программы для NodeMcu.

Описание ESP8266 NodeMcu v3

Технические характеристики модуля:

  • Поддерживает Wi-Fi протокол 802.11 b/g/n;
  • Поддерживаемые режимы Wi-Fi – точка доступа, клиент;
  • Входное напряжение 3,7В – 20 В;
  • Рабочее напряжение 3В-3,6В;
  • Максимальный ток 220мА;
  • Встроенный стек TCP/IP;
  • Диапазон рабочих температур от -40С до 125С;
  • 80 МГц, 32-битный процессор;
  • Время пробуждения и отправки пакетов 22мс;
  • Встроенные TR переключатель и PLL;
  • Наличие усилителей мощности, регуляторов, систем управления питанием.

Существует несколько поколений плат NodeMcu – V1(версия 0.9), V2(версия 1.0) и V3 (версия 1.0). Обозначения V1, V2, V3 используются при продаже в интернет-магазинах. Нередко происходит путаница в платах – например, V3 внешне идентична V2. Также все платы работают по принципу open-source, поэтому их могут производить любые фирмы. Но в настоящее время производством плат NodeMcu занимаются Amica, DOIT и LoLin/Wemos.

Отличия от других модификаций

Платы поколения V1 и V2 легко отличить – они обладают различным размером. Также второе поколение оснащено улучшенной модификацией чипа ESP-12 и 4 Мб флэш-памяти. Первая версия, устаревшая, выполнена в виде яркой желтой платформы. Использовать ее неудобно, так как она покрывает собой 10 выходов макетной платы. Плата второго поколения сделана с исправлением этого недостатка – она стала более узкой, выходы хорошо подходят к контактам платы. Платы V3 внешне ничем не отличаются от V2, они обладают более надежным USB-выходом. Выпускает плату V3 фирма LoLin, из отличий от предыдущей платы можно отметить то, что один из двух зарезервированных выходов используется для дополнительной земли, а второй – для подачи USB питания. Также плата отличается большим размером, чем предыдущие виды.

Где купить модули NodeMCU и ESP8266

Сегодня на рынке доступно множество достаточно недорогих модификаций плат на базе ESP8266. Мы сделали небольшую подборку наиболее интересных вариантов:

 

Питание модуля NodeMcu

Подавать питание на модуль можно несколькими способами:

  • Подавать 5-18 В через контакт Vin;
  • 5В через USB-разъем или контакт VUSB;
  • 3,3В через вывод 3V.

Преимущества NodeMcu v3

  • Наличие интерфейса UART-USB с разъемом micro USB позволяет легко подключить плату к компьютеру.
  • Наличие флэш-памяти на 4 Мбайт.
  • Возможность обновлять прошивку через USB.
  • Возможность создавать скрипты на LUA и сохранять их в файловой системе.

Недостатки модуля NodeMcu

Основным недостатком является возможность исполнять только LUA скрипты, расположенные в оперативной памяти. Этого типа памяти мало, объем составляет всего 20 Кбайт, поэтому написание больших скриптов вызывает ряд трудностей. В первую очередь, весь алгоритм придется разделять на линейные блоки. Эти блоки необходимо записать в отдельные файлы системы. Все эти модули исполняются при помощи оператора dofile.

При написании нужно соблюдать правило – при обмене данными между модулями нужно пользоваться глобальными переменными, а при вычислении внутри модулей – локальными. Также важно в конце каждого написанного скрипта вызывать функцию collectgarbage (сборщик мусора).

Распиновка NodeMcu v3

Модуль V3 имеет 11 контактов ввода-вывода общего назначения. Помимо этого некоторые из выводов обладают дополнительными функциями:

  • D1-D10 – выводы с широтно-импульсной модуляцией;
  • D1, D2– выводы для интерфейса I²C/TWI;
  • D5–D8 – выводы для интерфейса SPI;
  • D9, D10 – UART;
  • A0 – вход с АЦП.

Подключение NodeMCU к компьютеру

Для начала работы с NodeMcu нужно подключить плату к компьютеру. Первым шагом будет установка драйвера CP2102 и открытие Arduino IDE. Затем нужно найти в «Файл» – «Настройки» и в окно «дополнительные ссылки для менеджера плат» вставить ссылку http://arduino.esp8266.com/versions/2.3.0/package_esp8266com_index.json.

После этого в меню «документы» – «плата» «менеджер плат» выбрать «esp8266» и установить последнюю версию. После проделанных действий в меню «инструменты» – «плата» нужно найти NodeMCU.

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

Пример подключения светодиода к NodeMCU

Принципиальная схема подключения представлена на рисунке.

Итоговый макет макет выглядит следующим образом:

 

Сама плата работает от напряжения 3.3 В, поэтому для подключения светодиода нужно использовать резистор. В данном примере для красного светодиода берется резистор номиналом 65 Ом.

Похожим способом к плате подключается и фотодиод:

Плату NodeMCU можно использовать и для управления по ИК каналу. Для управления нужен пульт дистанционного управления с ИК приемником и сама платформа. Инфракрасный приемник подключается по схеме, представленной ниже:

Прошивки для esp8266 NodeMcu

В основу платформы загружена стандартная прошивка Node MCU, в которую встроен интерпретатор языка Lua. При помощи Lua-команд можно выполнять следующие действия:

  • Подключение к Wi-Fi точке доступа;
  • Работа в роли Wi-Fi точки доступа;
  • Переход в режим глубокого сна для уменьшения потребления энергии;
  • Включение или выключения светодиода на выходе GPIO16;
  • Выполнение различные операции с файлами во флэш-памяти;
  • Поиск открытой Wi-Fi сети, подключение к ней;
  • Вывод MAC адреса;
  • Управление пользовательскими таймерами.

Для программирования NodeMCU можно использовать Arduino IDE или комплекс средств разработки SDK – ESPlorer. Этот комплекс обладает рядом отличий:

  • Он может работать на множестве различных платформ;
  • Обладает поддержкой нескольких открытых файлов;
  • Позволяет подсвечивать код языка Lua;
  • Возможность умной отправки файлов;
  • Возможность поддержки нескольких видов прошивки одновременно.

Для обеспечения корректной и стабильной работы нужно обновить прошивку до последней версии. Существует несколько способов обновления – облачный сервис, Docker Image и компилирование в Linux. Каждый из этих способов обладает своими плюсами и минусами. Наиболее простым и понятным является первый способ.

Сбор прошивки в облачном сервисе

Облачный сервис обладает простым и удобным интерфейсом. Работа начинается с ввода email. Далее будет предложено выбрать тип прошивки – стабильная прошивка или тестируемая. Первая используется для обучения и создания большого количества объектов, поэтому рекомендуется выбирать именно ее. Следующим шагом будет подключение нужных модулей. По умолчанию уже записано несколько основных пунктов, остальные нужно включать только по необходимости. Затем выбираются дополнительные опции. Среди них есть поддержка FatFS для чтения sd-карты или включение режима отладки.

После начала сборки придет письмо на почту, сигнализирующее о начале запуска процесса. Через некоторое время придет и второе письмо – будет предложено выбрать версию float (дробные числа) или integer (целые числа).

После перехода по полученной ссылке нужно будет скачать файл bin и поместить его в Resources – Binaries. Там будет расположен файл nodemcu_integer_0.9.5_20150318.bin, который нужно удалить. В итоге содержимое папки будет выглядеть следующим образом.

Обновление прошивки Node Mcu

Для правильной и стабильной работы платы требуется перезаписать esp_init_data_default.bin. Скачать его можно на официальном сайте. Нужный файл нужно поместить снова в систему для прошивки NodeMCU Flasher по пути Resources – Binaries, предварительно удалив из него старый файл.

Затем можно подключать  NodeMCU и приступить к обновлению. Для начала нужно поменять настройки – в NodeMCU Flasher во вкладке Config нужно выбрать файл собранной прошивки вместо INTERNAL://NODEMCU.

Остальное оставить без изменений, перейти на Operations и нажать Flash. Как только окончится прошивка, нужно снова перейти на Config и в первой строке указать путь esp_init_data_default.bin. Также дополнительно указывается адрес, куда нужно переместить этот файл. Для модуля NodeMCU следует выбрать адрес 0x3FC000. После этого нужно снова вернуться на Operations и нажать Flash.

После этого нужно переформатировать всю файловую систему млаты. Для этого нужно запустить ESPlorer, обязательно поставить скорость обмена 115200 и перезагрузить NodeMCU. После всех вышеописанных действий будет новая версия прошивки. Отладочная плата полностью перепрошита и готова к работе.

Краткое описание языка Lua

Язык Lua обладает простым синтаксисом и мощными конструкциями описания данных, которые основаны на массивах и расширяемой семантике.  Этот мощный язык программирования используется для создания программного обеспечения, расширения различных игр. В отличие от остальных языков Lua обладает более гибкими и более мощными конструкциями.

Мигание светодиодами на Lua

Можно рассмотреть простейшую схему – мигание светодиодом. Этот пример поможет изучить работы с контактами GPIO. Светодиод нужно подключить как показано на схеме.

Затем нужно записать следующий скетч в левое окно ESPlorer:

pin_number = 1

gpio.mode (pin_number, gpio.OUTPUT) // установка рабочего режима на выход

gpio.write (pin_number, gpio.HIGH)// установка высокого уровня

gpio.write (pin_number, gpio.LOW)// установка низкого уровня

gpio.serout (1, gpio.HIGH, {+990000,990000}, 10, 1) // установка мигания светодиодом 10 раз

После нужно сохранить скрипт с названием init.lua. Сразу после этого начнется автоматическая загрузка написанного кода в отладочную плату и его выполнение. Если операция выполнена успешно, отладочная плата начнет мигать светодиодом.

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

Стабилизатор напряжения для микроконтроллера ESP8266

Хорошо известно, что микроконтроллер ESP8266 довольно прожорлив во время работы интерфейса Wi-Fi. Он может потреблять от 50 мА до 170 мА. Во многих случаях трудно применять такое устройство совместно с аккумулятором.

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

Однако для некоторых проектов с микроконтроллером ESP8266, где используется режим глубокого сна и нет необходимости в постоянной работе интерфейса Wi-Fi, применение перезаряжаемых литий-полимерных аккумуляторов станет прекрасным решением.

Если используется питания от аккумуляторов рекомендуется плата ESP-01, так как на ней установлено небольшое количество компонентов.

Платы, подобные ESP8266 NodeMCU, используют много энергии, поскольку оснащены дополнительными элементами, такими как резисторы, конденсаторы, микросхемы и т. д.

Так как литий-полимерные аккумуляторы широко распространены, покажем как обеспечить питание микроконтроллера ESP8266 с их помощью.

В этом руководстве не объясняется как устроены и работают различные типы аккумуляторов. Здесь даётся лишь информация необходимая для реализации описываемой схемы.

Полностью заряженный аккумулятор имеет на выходе напряжение 4,2 В

Со временем оно снижается.

Рекомендуемое рабочее напряжение микроконтроллера ESP — 3,3 В, но он может функционировать в диапазоне 3—3,6 В. Так что нельзя просто подключить литий-полимерный аккумулятор напрямую к микроконтроллеру ESP8266 — вам потребуется стабилизатор напряжения.

Использование стандартного линейного стабилизатора для снижения напряжения с 4,2 до 3,3 В — не очень хорошее решение.

Например: если аккумулятор разрядится до выходного напряжения 3,7 В, ваш стабилизатор перестанет работать, так как у него высокое напряжение отсечки

Чтобы эффективно понизить напряжение аккумулятора, вам необходим стабилизатор с малым падением напряжения известный также как LDO-стабилизатор, который может регулировать выходное напряжение.

Малое падение напряжения означает, что даже если аккумулятор будет выдавать лишь 3,4 В, стабилизатор всё рано продолжит работать. Помните, что никогда не стоит полностью разряжать литий-полимерный аккумулятор, так как это повредит его или сократит срок службы.

Один из самых лучших LDO-стабилизаторов – MCP1700-3302E.

Он довольно компактный и выглядит как транзистор.

Есть также хороший вариант в виде HT7333-A.

Любой LDO-стабилизатор с характеристиками, аналогичными приведённым в документе ниже, также является хорошим вариантом. Ваш LDO-стабилизатор должен иметь такие же показатели для следующих параметров:

  • Выходное напряжение (3,3 В).
  • Ток в рабочей точке (~1,6 мкА).
  • Выходной ток (~250 мА).
  • Малое падение напряжения (~178 мВ).

Назначение выводов стабилизатора MCP1700-3302E. Есть выводы GND, Vin и Vout (земля, вход и выход):

У других LDO-стабилизаторов должно быть такое же назначение выводов, но обязательно найдите техническое описание вашего стабилизатора, чтобы проверить это.

Для стабилизатора нам понадобятся следующие компоненты:

Внимательно ознакомившись со схемой вы сможете самостоятельно собрать стабилизатор.

Или посмотрите схему, созданную с помощью ПО Fritzing (керамический и электролитический конденсатор подключены параллельно выводам GND и Vout стабилизатора).

Кнопка подключена к выводу RESET (СБРОС) платы ESP-01, сейчас в этом нет необходимости, однако это пригодится в будущих руководствах.

Готовое устройство.

Для LDO-стабилизаторов необходимо подключать керамический и электролитический конденсатор параллельно выводам GND и Vout, для сглаживания скачков напряжения. Конденсаторы не допускают неожиданный перезапуск и нестабильную работу микроконтроллера ESP8266.

Давайте подключим питание к схеме и проверим её. Измеряя мультиметром входное напряжение Vin от литий-полимерного аккумулятора, вы сможете увидеть приблизительно 4,2 В, поскольку сейчас аккумулятор полностью заряжен.

Теперь подключим щуп мультиметра к выводу Vout. Мультиметр показывает приблизительно 3,3 В — это рекомендуемое напряжение для микроконтроллера ESP8266.

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

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

Делаем монитор потребления тока на базе EVAL-ADUC7061MKZ

Добрый день,
Предлагаю Вашему вниманию мини-обзор, в котором я сделаю монитор потребления тока на базе демонстрационной платы EVAL-ADUC7061MKZ.

История

Идея монитора была найдена на русском сообществе esp8266.ru, там же был найден софт от pvvx, который позволяет решить задачу в несколько кликов.
Моё применение монитора — отладка датчика открытия двери на базе esp8266, который питается от двух АА батареек (на правах анонса нового обзора).

О плате

Плата содержит FTDI usb to serial мост и чип ADuC7061.
ADuC7061 это комбинированный чип, который имеет двухканальный сигма-дельта АЦП со скоростью 8 kSPS, разрядностью 24-бит и ARM7 ядро с флэш и eeprom памятью.

Прошивка ADuC7061

Необходимо установить драйвера для FTDI, в диспетчере устройств нужно назначить последовательному порту имя COM5.
Запускаю ARMWSD.exe и нажимаю Start в программе.
После этого зажимаю и держу кнопку Download на плате и кратковременно нажимаю кнопку Reset.
Вот так выглядит окно при успешной прошивке:

Настройка АЦП

Запустил DebMon.exe из архива.
Указал COM5.
Нажал кнопку Start и в меню Tools->Установки АЦП привел всё к такому виду:

После установки нажал внизу Send. Если график не запущен, то кнопка не активна (маленький бажок).

Первая проба

Подключил шунт к AIN0 и AIN1. В роли шунта использовал 30см кусочек провода от LVDS кабеля LCD матрицы.
Собрал последовательную гирлянду из ЛБП, UT181A и 300Ом 2Вт резистора. Проверим линейность:

Из коробки получилось неплохо.

Измерение

Дверной датчик написан в среде Arduino.
Нормально разомкнутый геркон при открытии/закрытии двери притягивает к земле Reset и датчик подключается к WiFi и взаимодействует с ifttt.com, после уходит в сон до следующего сброса.

График напряжения на шунте при опросе с частотой 5,8Гц:

График напряжения на шунте при опросе с частотой 19,4Гц:

Частоту опроса можно изменить меняя параметры ADCFLT.

Экспортировал данные варианта 19,4Гц и превратил в график тока:

Датчик был активен с 49 по 146-й отсчет, т.е. в течении 97 отсчетов или ровно 5с и в это время он потреблял в среднем 69мА от 3В батареек. Во сне ESP потребляет 16мкА согласно UT181A, а по данным «измерителя» на порядок больше :(.

Работа над ошибками(предлагайте в комментариях)

Сделать другой шунт, добиться лучшей линейности, добавить RC цепочки, сделать делитель на второй канал для измерения напряжения…

24 бит: это невероятно


Определение энергопотребления ESP8266

Заинтригован откровениями из предыдущей статьи, Я взял ESP8266 в лабораторию и измерил его с помощью подходящего осциллографа.

Эта статья является частью серии «esp» — см. Также ESP8266 убивает себя? для первой части, и беспроводной терминал с ESP8266 для решения со сторожевым таймером напряжения, который я в итоге использовал.

Здесь я представляю свои измерения, а также некоторые скриншоты осциллограмм.Измерения были выполняется на модуле ESP-01 с использованием LeCroy WaveRunner 6050A и его дополнительного датчика тока, как показано на рисунке (осциллограф зонда за пределами экрана):

Пристальный взгляд на стартап

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

Ясно одно — здесь возникает состояние отказа.

Давайте посмотрим на текущий профиль:

Во время начального «плато» любые блокирующие конденсаторы могут зарядиться, чтобы подготовиться к работе. для взрыва. По истечении этих 160 мс будет потребляться 40 мс тока между 300 мА и 430 мА, где происходит наибольшее падение Vdd.

Вот несколько скриншотов из прицела (щелкните, чтобы увеличить и увидеть описания):

Просто потому, что прицел может это сделать, я также подсчитал энергию, потребляемую во время запуска всплеск — W = 36 мДж.Это можно использовать для расчета необходимых разделительных конденсаторов.

Похоже, что код приложения может запуститься не ранее, чем через 230 мс после включения питания, что нужно учитывать при разработке внешнего сторожевого таймера (обсуждалось в предыдущем статья).

Потребление холостого хода

Мои измерения потребления холостого хода сведены в следующую таблицу:

Государство Расход
Отключение 200 мкА
Активно, Wi-Fi выключен 34 мА
WiFi ВКЛ 67 мА + 435 мА всплески

Вот несколько подтверждающих снимков экрана — обратите внимание на периодические всплески.Они происходят каждые 100 мс. и имеют длину около 700 мкс, причем некоторые более плотные всплески возникают случайным образом. Это могло быть вызвано считыванием с флэш-памяти или, что более вероятно, кадрами маяка WiFi (или какой-либо другой подобной формальностью).

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

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

ESP8266 против ESP32 при питании от батареи

Подробно изучив энергопотребление esp8266 и esp32, пора сравните два.

Во всех сравнениях в этом посте используются следующие определения / допущения:

  • время работы рассчитано на основе идеальной батареи емкостью 1000 мАч,
  • : используемая точка доступа довольно простаивает, но в сети есть другие хосты и, следовательно, постоянно низкая скорость фоновых широковещательных пакетов (ARP-запросы, связующее дерево и т. д.),
  • TCP-соединения содержат минимальный пакет данных,
  • TLS-соединения используют набор шифров PSK, а
  • MQTTS использует TLS и содержит сообщение публикации и доставку сообщения подписки.

Глубокий сон с периодическим пробуждением

Сравнение начинается с режима глубокого сна с периодическим пробуждением. Предполагается, что все оптимизации, описанные в предыдущих сообщениях, сделаны, например, предоставление всех параметров для wifi.begin и wifi.config .

Точка открытого доступа

В двух следующих диаграммах сравнивается время работы в днях между esp8266 и esp32. при запуске тестового приложения, которое отправляет простой пакет на сервер по TCP.Слева диаграмма показывает интервалы пробуждения 10 и 60 минут, в то время как правая диаграмма показывает интервалы пробуждения 20 секунд и 1 минуту. Это действительно может быть одна диаграмма, за исключением того, что одна вертикальная шкала будет сделать полосу 20-секундного интервала высотой в один пиксель…

Из диаграмм видно, что при использовании открытой точки доступа esp8266 потребляет меньше энергии, чем esp32. Причина в том, что в потреблении преобладает ток, используемый в активном состоянии, что выше в случае esp32, и оба активны примерно одинаковое количество времени, в котором преобладает зондирование точки доступа.

Безопасная точка доступа

На следующих двух диаграммах сравнивается время выполнения при использовании защищенной точки доступа и добавлении MQTTS / TLS в esp32. дело.

При использовании защищенной точки доступа esp8266 и esp32 показывают примерно одинаковую производительность. Причина в том, что, хотя esp32 потребляет больше энергии в активном состоянии, он завершает WPA2-PSK. ассоциация быстрее, чем esp8266.

Добавление MQTT и TLS к обмену не требует дополнительных затрат энергии из-за скорости, с которой esp32 выполняет криптографический и быстрый обмен пакетами Wi-Fi.

Легкий сон, поддерживающий ассоциацию

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

В случае esp32 на диаграмме используются значения для «выталкиваемых» версия, который устанавливает listen_interval до 5 секунд и удаляет задержку ACK в LwIP.

Сравнение немного искажено, потому что esp8266 просто отправляет небольшой объем данных по TCP. в то время как esp32 публикует сообщение через MQTT / TLS и получает сообщение подписки. Однако, как мы видели ранее, точный характер связи, как правило, не является доминирующим. коэффициент общего энергопотребления.

В режиме легкого сна esp32 работает намного лучше, чем esp8266, во многом благодаря ошибка esp8266, из-за которой он переходит в режим сна модема вместо легкого сна примерно в половине случаев после маяк.

Тот факт, что esp32 позволяет явно устанавливать интервал прослушивания, также является преимуществом, а не только с точки зрения цифр, показанных здесь, но также потому, что это снижает влияние трансляции Wi-Fi Мероприятия.

Выводы

В заключение исследования маломощного Wi-Fi esp8266 и esp32 на приведенном ниже графике показаны компромисс между двумя микроконтроллерами и двумя режимами сна. Это что-то вроде диаграммы с так много линий, но линии идут парами, поэтому ходить не так уж сложно (см. ниже).График показывает время работы от идеализированной батареи емкостью 1000 мАч по вертикальной оси (то есть чем больше, тем лучше) vs. интервал, с которым код просыпается для связи. Все числа основаны на моделировании наблюдаемого поведения микроконтроллеров.

Линии, выходящие за верхнюю часть диаграммы, соответствуют глубокому сну с периодическим пробуждением с использованием небезопасная открытая точка доступа. Глубокий сон без криптографии использует наименьшую мощность из всех вариантов, когда время итерации превышает несколько секунд.Esp8266 работает лучше, чем esp32, потому что он потребляет меньше энергии в активном состоянии и имеет более короткую последовательность запуска. В обоих случаях указываются все параметры для WiFi.begin и WiFi.config , т.е. они оптимизированные корпуса.

Две другие прямые линии, расположенные одна над другой, предназначены для глубокого сна с периодическим пробуждение, но с использованием безопасной точки доступа WPA2-PSK. Несколько удивительно, что два микроконтроллера работают в основном одинаково, хотя сравнение немного перекошено, потому что esp32 обменивается данными с сервером MQTT / TLS при каждом пробуждении, в то время как esp8266 отправляет только короткое TCP-сообщение.Esp32 выполняет шифрование WPA2 быстрее, чем esp8266, но при этом потребляет больше энергии.

Две сплошные изогнутые линии предназначены для автоматического перехода в режим легкого сна, когда цикл (), повторяется периодически и в сети примерно один широковещательный пакет каждые 10 секунд, который также пробуждает микроконтроллер. В обоих случаях используется безопасная точка доступа. Линии изогнуты, потому что на коротких интервалах петля () пробуждение является доминирующим эффектом, когда при длительных интервалах пробуждение широковещательного пакета становится доминирующим.Здесь esp32 работает намного лучше, чем esp8266, прежде всего потому, что он надежно возвращается в режим легкого сна. Кроме того, интервал прослушивания в режиме энергосбережения в 5 раз больше и после пробуждения он быстрее засыпает.

Последние две пунктирные линии идеализированы: они не могут быть достигнуты с текущим Wi-Fi Espressif. прошивка. В случае esp32 пунктирная линия представляет автоматический легкий сон, где длительный интервал перед повторным входом в режим энергосбережения было сокращено с 50 мс до 10 мс.В случае esp8266 это представляет собой исправление ошибки, которая переводит микроконтроллер в режим модемного сна вместо легкого сна. в половине случаев. Эти две строки показывают, чего можно было бы достичь, если бы Espressif исправил эти проблемы.

Сравнение случаев легкого сна esp32 и глубокого сна показывает пересечение около интервала 60 секунд. Это означает, что варианты использования, которые требуют будильника только каждую минуту или дольше, должны использовать режим глубокого сна, как ожидалось, но в случаях, когда микроконтроллер должен оставаться доступным вообще раз лучше работает в режиме легкого сна.

Мое личное мнение об этом сравнении смещено в сторону безопасности, и это решительно в пользу esp32 не только из-за энергопотребления, но и из-за большего объема памяти, что делает использование TLS намного практичнее.

Хотя есть еще кое-что, что я хотел бы изучить с помощью esp8266 и esp32, следующая запись немного переключает передачи и исследует RealTek RTL8710 в виде файла RTLDuino.


Проект

: запуск микроконтроллеров Wi-Fi от батареи

Я всегда ценю комментарии и отвечаю на каждый!

(Чтобы получать ответы, укажите свой адрес электронной почты и нажмите кнопку «@» в правом нижнем углу текстовое поле.Я не собираю адреса и не отправляю нежелательные электронные письма.)

(PDF) Разработка моделей энергопотребления для недорогих узлов мониторинга IoT с поддержкой ESP8266

O. O. Akintade et al.

10.4236 / ait.2019.91001 13 Достижения в Интернете вещей

Интернет вещей: обзор эффективных технологий, протоколов и приложений

.

IEEE Communications Surveys and Tutorials

, 17, 2347-2376.

https://doi.org/10.1109/COMST.2015.2444095

[2] Espressif Systems (2016) ESP8266EX Datasheet. Технический паспорт систем Espressif.

https://www.espressif.com/sites/default/files/documentation/0a-esp8266ex_datashe

et_en.pdf

[3] Карагианнис, В., Хацимисиос, П., Васкес-Гальего, Ф. и Алонсо-Сарате, Дж. (2015)

Обзор протоколов уровня приложений для Интернета вещей.

Транзакция в

Интернет вещей и облачные вычисления

,

3, 11-17.

[4] Каро Д. Н., Колитти В., Стинхаут К., Мангино Г. и Реали Г. (2013) Сравнение

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

Протоколы

IEEE SCVT

20

-й симпозиум IEEE по коммуникационным и автомобильным технологиям

в странах Бенилюкса

, Намюр, 21 ноября 2013 г., стр. 36-43.

[5] Thangavel, D., Ma, X., Valera, A., Tan, H.X. и Тан, C.K.Y. (2014) Производительность

Оценка MQTT и CoAP с помощью общего промежуточного программного обеспечения.

Труды IEEE

9

-я Международная конференция по интеллектуальным датчикам

,

Сенсорные сети и информация

Обработка данных

, Сингапур, 21-24 апреля 2014 г., 1-6.

https://doi.org/10.1109/ISSNIP.2014.6827678

[6] Акылдыз, И.Ф. и Вуран М. (2010) Беспроводные сенсорные сети. John Wiley &

Sons Inc., Нью-Йорк, Нью-Йорк, США. https://doi.org/10.1002/9780470515181

[7] Казим, О.О., Акинтаде, О. и Кехинде, Л. (2017) Сравнительное исследование интерфейсов связи

для датчиков и исполнительных механизмов в облаке Интернета

вещей.

Международный журнал Интернета вещей

, 6, 9-13.

[8] Махмуд, М.С. и Мохамад, A.A.H. (2016) Исследование эффективного энергопотребления —

sumption Методы / модули беспроводной связи для приложений Интернета вещей

(IoT).

Достижения в Интернете вещей

, 6, 19-29.

https://doi.org/10.4236/ait.2016.62002

[9] Wang, QWQ, Hempstead, M. и Yang, W. (2006) Реалистичное энергопотребление —

Модель

для беспроводных сенсорных сетевых устройств .

Proceedings of

3

rd Annual IEEE

Общество связи по датчикам

,

Mesh and Ad Hoc Communications and Net-

работает (SECON)

, Рестон, 25-28 сентября 2006 г., 286- 295.

[10] Адинья, О.Дж. И Даолян, Л. (2012) Модели энергопотребления приемопередатчиков для

при проектировании сетей беспроводных датчиков с низким энергопотреблением.

Труды

2012

IEEE

Студенческая конференция по исследованиям и разработкам (SCOReD)

, Пенанг, 5-6 декабря

декабрь 2012, 193-197. https://doi.org/10.1109/SCOReD.2012.6518637

[11] Сиккинен, М., Хииенкари, М., Нурминен, Ю.К. и Ниеминен, Дж. (2012)

Насколько мало энергии у Bluetooth — это низкое энергопотребление? Сравнительные измерения с ZigBee / 802.15.4.

Протоколы

2012

IEEE Wireless Communications and Networking Conference

Workshops

(

WCNCW

), Paris, 1 April 2012, 232-237.

https://doi.org/10.1109/WCNCW.2012.6215496

[12] Мартинес, Б., Монтон, М., Вилахосана, И. и Прадес, JD (2015) Сила модели —

els: Моделирование энергопотребления для устройств Интернета вещей.

Журнал датчиков IEEE

, 15,

5777-5789.https://doi.org/10.1109/JSEN.2015.2445094

[13] Aoudia, FA, Magno, M., Gautier, M., Berder, O. and Benini, L. (2016) A Low La-

надежность и энергоэффективная коммуникационная архитектура для гетерогенной связи

Long-Short Range.

Труды

19

-я конференция Euromicro по

Проектирование цифровых систем

(

DSD

), Лимассол, 31 августа — 2 сентября 2016 г., 200-206.

[14] Ли, Э.A. и Seshia, S.A. (2011) Введение во встроенные системы: подход Cy-

ber-Physical. Беркли, США.

Power Meter с ESP8266 — Hackster.io

Хорошо, я видел проект умного воздухоохладителя Моиза, в котором он включал / выключал кулер из своего веб-приложения, и я подумал о его небольшом расширении. Хотя управлять устройством с телефона — это круто, но это не экономит деньги, верно! Поэтому я подумал, что, если бы мы могли увидеть, как наше устройство потребляет электроэнергию, и настроить наше использование в соответствии с этим и в конечном итоге снизить наши счета за электроэнергию на несколько процентов.Итак, в этом руководстве я покажу вам, как я построил свой измеритель мощности IoT, который отслеживает ток и мощность устройств, похожих на кулер. Измеритель мощности показывает графики тока и энергопотребления в веб-приложении на моем телефоне.

Давайте поговорим о бизнесе!

Я проектирую свой измеритель мощности с той же коммерческой и производственной точки зрения, что и Моис: компания, производящая измерители мощности и продающая ее реальным пользователям. Поэтому, когда счетчики мощности появятся на рынке, их будут покупать и использовать реальные пользователи.

Сделав их легкими и дешевыми, у меня возникла идея показывать текущий расход и энергопотребление в веб-приложении (мобильном приложении) вместо того, чтобы прикреплять ЖК-дисплей к измерителю (ЖК-дисплеи, которые могут строить графики, не подходят для измерителя мощности за 4 доллара США). ).

Поскольку у меня есть реальные пользователи, здесь есть некоторые проблемы. Будет ли мое приложение содержать все измерители мощности, которые я когда-либо продал до настоящего времени? Итак, когда клиент загрузит мое веб-приложение, нужно ли ему / ей найти свой измеритель мощности из огромного списка всех этих измерителей мощности, чтобы увидеть его энергопотребление? Это не только делает его более сложным, чем нужно, но и ставит под угрозу конфиденциальность других пользователей.Ни за что. Должен быть механизм, который показывает пользователю только его / ее устройства, когда он / она открывает веб-приложение. Это зацепило меня идеей создания учетных записей пользователей . Каждый клиент должен будет зарегистрировать свою учетную запись в веб-приложении, когда он / она покупает у меня устройство в первый раз. Чтобы увидеть свои устройства и их данные, ему / ей нужно будет войти в систему так же, как вы это делаете на facebook (вы видите своих друзей, свои собственные сообщения и свои собственные группы, а не все остальные). Теперь перейдем ко второму вопросу.Когда пользователь входит в систему, как приложение узнает, какие устройства (из проданных мною) принадлежат этому конкретному пользователю? Схема сопряжения решает наши проблемы. Когда пользователь входит в приложение, он / она видит пустой список и кнопку «Добавить устройство», при нажатии на которую он может ввести идентификатор устройства (который я напечатал бы на самом устройстве), и это устройство будет добавлено в список своих устройств. Под капотом он будет связывать этот измеритель мощности с этой учетной записью пользователя, делая эту учетную запись владельцем этого устройства, и только он / она может видеть данные устройства.

Теперь, чтобы реализовать это, я просмотрел наиболее распространенные инструменты, включая Blynk. Хотя эти инструменты хороши для прототипирования аппаратного проекта, они не решают проблем коммерциализации продукта IoT. Приложение Blynk не настраивается, что означает прощание с моим брендом, его модель на основе энергии становится довольно дорогой, если вы масштабируете ее до нескольких сотен измерителей мощности, и она не решает для меня ни одной из учетных записей и проблем с сопряжением. Не только для этого измерителя мощности, если я продаю что-либо на рынке реальным пользователям, приложение Blynk выглядит очень незрелым.

Именно тогда на помощь пришла Grandeur. Он в значительной степени разработан для бизнеса Интернета вещей. Он предлагается в качестве серверной части, которая решает практически все проблемы, связанные с бизнесом, приложениями и оборудованием, связанные с разработкой продукта IoT (их слова, а не мои!). Это бессрочно. Это означает, что я могу разработать свой собственный измеритель мощности (на стороне устройства) и свое собственное приложение (на стороне пользователя) и просто соединить их вместе с Grandeur в качестве их интегратора. Так что мне больше не нужно полагаться на одно и то же приложение Blynk для каждого продукта, который я делаю — я могу создавать отдельные автономные приложения для каждого.Они предоставили эти SDK для программирования оборудования (Arduino, ESP, Raspberry Pi) и приложений (Javascript, Android и iOS). В App SDK есть этот Auth API, который позволяет выполнять аутентификацию пользователя в приложении. Это означает, что я могу создать функции регистрации / входа в систему. И есть Device API, который позволяет отправлять / извлекать данные на / с аппаратного устройства. Он также имеет функцию сопряжения, которая мне нужна. На ощупь аккуратно!

Цель

Теперь, когда мы знаем базовую платформу, на которой я буду разрабатывать свои измерители мощности, давайте официально определим наш проект:

Измеритель мощности IoT с использованием датчика тока ESP8266 и ACS712, который будет отправлять показания тока и мощности в приложение, где я Я бы перенес эти показания на график в режиме реального времени.

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

Шаг 1: Схема

Идея этого проекта заключается в использовании датчика тока ACS712 для расчета тока. Фактически, ACS712 является датчиком на эффекте Холла и работает, измеряя наведенное напряжение в проводнике с током — звучит сбивающе с толку? Позвольте мне облегчить вам задачу.

Итак, мы знаем из фундаментальной физики, что когда ток течет от проводника, возникают магнитные поля, и если вы поместите другой проводник в непосредственной близости от него, магнитное поле будет индуцировать в нем ток.Так работают трансформаторы, и именно так мы можем безопасно измерять ток (учитывая, что мы хотим измерять ток реальных приборов, который составляет до нескольких ампер).

Я делал АЦП на выходе датчика тока (который представляет собой напряжение, индуцированное током) и измерял фактический ток, умножая его на чувствительность датчика тока (изменение тока на 1 А изменяет индуцированное напряжение на 185мВ для датчика тока 30А). Вот так просто выглядит схема:

Я запитал датчик тока с помощью 3.3V (через ESP) и подключил его выход к аналоговому входу ESP. Вот код для измерения тока от датчика тока:

Делая из него печатную плату, вот краткий обзор конструкции:

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

Итак, железо заработало. Посмотрим, как я интегрировал Grandeur и создал приложение.

Шаг 2. Начало работы с Grandeur

Grandeur разработан, чтобы быть простым и легко интегрируемым в ваши продукты IoT.Вы можете найти документацию здесь. Вот учебник «hello world», чтобы дать вам контекст для самого новичка.

Вот каждый шаг, который я сделал, чтобы использовать Grandeur для создания моего приложения:

  • Я вошел на платформу и создал новый проект для своего продукта IoT:
  • Я создал модель для своего нового продукта IoT, также известного как. измеритель мощности на вкладке «Устройства». Модель предопределяет переменные, которые будет иметь продукт IoT и которые позже будут извлечены / обновлены со стороны устройства или приложения.Наш измеритель мощности может измерять ток и мощность, вот как я определил их в модели:
  • Затем я зарегистрировал свое первое устройство в модели монитора мощности и назвал его PM-1. Это самый первый прототип моего измерителя мощности. Вот как я его регистрировал:
  • Поскольку мы не можем использовать (или тестировать) наше устройство без пользователя, я создал первого пользователя моего продукта на вкладке «Учетные записи»:
  • Чтобы протестировать свое устройство, я соединил его со своим пользователем прямо на вкладке «Устройства» (мне это нравится), чтобы мы могли получить доступ к переменным нашего измерителя мощности (его току и мощности) в нашей учетной записи.Вот как я их объединил:

Сопряжение устройства с пользователем

Шаг 3: Прошивка

Чтобы создать программу для ESP8266 в среде Arduino IDE, я использовал SDK Grandeur для Arduino для отправки текущих и обновлений питания в мой проект на Grandeur. Но для Arduino SDK требуется ключ API моего проекта и идентификатор моего устройства, чтобы знать, какое устройство в каком проекте мы ссылаемся при настройке сводки. Токен аутентификации устройства помогает в проверке подлинности устройства. Мой ESP не может подключиться к Grandeur без этого токена.

Grandeur обрабатывает связь устройств с Cloud через Интернет, что означает, что нам сначала нужно подключить наш ESP к Интернету, для чего и предназначена библиотека ESP8266WiFi. Он обрабатывает соединение моего ESP с моим Wi-Fi, что дает ему необходимое подключение к Интернету.

Вот программа Arduino для ESP8266:

В каждом цикле она запускает функцию sendUpdate , которая считывает вывод OUT датчика тока (подключенный к A0 ESP) в течение одной секунды, переводит уровни АЦП в напряжение, получает верхнее и нижнее напряжение пиков из этих односекундных данных, вычисляет размах напряжения, затем среднеквадратичное напряжение, переводит его в среднеквадратичный ток и, наконец, вычисляет мощность.Затем он готовит сводный пакет, содержащий текущее RMS как текущую мощность , и время обновления, и обновляет старую сводку в облаке новой.

Если сводное обновление происходит в облаке, оно распечатывает его на последовательный порт (только для целей регистрации).

Отметка времени для каждого итогового пакета с указанием времени обновления помогает мне построить график тока и мощности на временном графике в моем веб-приложении.

Шаг 4: Веб-приложение

Для создания своего приложения я использовал SDK Grandeur JS для получения сводных обновлений из облака, а затем построил графики тока и мощности на основе этих данных с помощью диаграммы.js. С помощью службы Auth из JS SDK я реализовал в своем приложении функцию входа в систему, которая позволила мне создать профиль пользователя и показывать ему данные только тех устройств, с которыми он сопряжен.

Но для использования JS SDK в моем приложении мне потребовались ключ API моего проекта и учетные данные для доступа (ключ доступа и токен) со страницы настроек Grandeur Dashboard, которые JS SDK использует для подключения к моему проекту в облаке. Ключ API действует как идентификатор для моего проекта, в то время как учетные данные для доступа (ключ доступа и токен) являются частью схемы проверки источника запроса.Вот как я получил их из Grandeur Dashboard:

Получить ключ API и учетные данные для доступа

Вот код моего веб-приложения:

Demo

Чтобы проверить свой измеритель мощности, я использовал Grandeur CLI для локального обслуживания моего веб-приложения на localhost: 3000. Grandeur, естественно, отклоняет все запросы, поступающие из неизвестных источников в целях безопасности, поэтому нам нужно добавить localhost: 3000 в список разрешенных источников происхождения проекта. Вот как я это сделал из настроек Grandeur Dashboard:

Запуск grandeur serve на терминале открывает в моем браузере веб-приложение измерителя мощности.Вот как это выглядит во время бега:

Мы входим в приложение с адресом электронной почты и паролем, которые дали нашему тестирующему пользователю . При входе в систему я вижу свой измеритель мощности PM-1, который я зарегистрировал ранее на облачной панели управления. Когда я нажимаю на нее, я вижу, что графики тока и мощности строятся на основе данных, поступающих с моего измерителя мощности в режиме реального времени.

Предупреждение: здесь важно отметить, что эксперименты с 220 В переменного тока могут привести к летальному исходу, если с ними не обращаться осторожно. Еще одним важным соображением является тот факт, что ACS712 следует использовать только для мониторинга подсистем, и настоятельно не рекомендуется, использовать его для мониторинга электропитания всего дома.Эта схема конструкция не подходит для производственного использования и предназначена только для демонстрации концепции, поскольку этот проект больше ориентирован на сегмент программного обеспечения.

Заключение

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

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

До следующего раза.

Feather HUZZAH ESP8266 — Реалистичное энергопотребление — и, таким образом, пройдет еще один день

Adafruit Huzzah esp8266 слишком энергоемкий, чтобы использовать его отдельно от батареи (батарей).Этот блог представляет собой краткое изложение моих попыток заставить его работать как можно дольше в реальном сценарии: периодически отправлять данные датчика + напряжение батареи на мой SQL-сервер MariaDB.

Выбор платы был легким, так как мне нравятся диаграммы и автоматические уведомления … Atmel / Arduino слишком слабы для этого, Grafana добавила поддержку MySQL, поэтому я решил попробовать.

Проект не начался хорошо, так как вскоре я обнаружил, что плата очень энергоемкая.

Проблемы :

  1. На официальной странице Adafruit https: // learn нет упоминания.adafruit.com/adafruit-feather-huzzah-esp8266/power-management об энергопотреблении платы в спящем режиме.
  2. После беглого просмотра многих тем поддержки (например, этой: https://forums.adafruit.com/viewtopic.php?f=8&t=120675, где показано, что потребление энергии Adafruit Feather HUZZAH во время глубокого сна составляет около 6,5 мА) На виновников указывает adafruit_support_mike: «Есть также преобразователь USB-to-Serial CP2104, регулятор напряжения, зарядное устройство LiPo и все вспомогательные пассивные элементы, такие как подтягивающие резисторы.ESP8266 не контролирует их, и они не предназначены для работы с низким энергопотреблением ».
  3. Один блог возлагает большие надежды на «Как работать ESP8266 в течение многих лет от батареи» (https://openhomeautomation.net/esp8266-battery/ для SparkFun ESP8266 Thing). Правильным заголовком должно было быть «Как спать ваш ESP8266 в течение многих лет от батареи», поскольку утверждение основывается только на потребляемом токе глубокого сна ПОСЛЕ того, как вам нужно физически вырезать след / отпаять «включенный» светодиод. Код, приведенный в качестве примера, выполняет измерение и загружает его каждые 10 секунд, но это потребление энергии полностью игнорируется при оценке.
  4. Из-за отчаяния (или столкновения) с этими платами для разработки — некоторым людям даже пришлось вырезать / перемонтировать следы цепи, чтобы снизить энергопотребление: https://tinker.yeoman.com.au/2016/ 05/29 / running-nodemcu-on-a-battery-esp8266-низкий-энергопотребление-повторный /

Оки…

В поисках решения — самое чистое, которое я нашел, было представлено здесь: http://homecircuits.eu/blog/battery-powered-esp8266-iot-logger/. Он использует процессор AtTinyXX Atmel + N-Channel Mosfet — плата разработки ESP8266 рассчитана только на 8 секунд.8s дает достаточно времени для измерения и загрузки данных через WIFI, но поскольку я хотел проводить измерения каждые 5 минут для сравнения, мне пришлось изменить исходный код по ссылке выше, чтобы он спал ближе к 5 минутам, а не 20м.

Я также изучил плату, чтобы увидеть, изменит ли отключение питания микросхемы USB-to-Serial (белый график ниже), но решение выглядит слишком агрессивным:

Capture с https://easyeda.com/ — предварительный просмотр платы Arduino Feather Huzzah.

Я решил протестировать установку несколькими способами:

  1. Нет спящего режима, измерения и загрузка каждые 5 секунд.
  2. Глубокий сон, измерение и загрузка каждые 5 минут (300 секунд).
  3. Внешнее управление питанием, измерение и загрузка каждые 5 минут 44 секунды (344 секунды).

Результаты:

Все графики были сдвинуты, чтобы начать 1 сентября, а затем наслоены на слои:

Напряжение батареи с течением времени

Наблюдения:

  1. Поскольку у меня под рукой не было МОП-транзистора, мне пришлось использовать транзистор Дарлингтона BC517.Он имеет Vce (sat) около 1 В, поэтому напряжение, которое видит цепь, составляет прибл. На 1 В меньше, чем у батарей. BC517 имеет hFE (насыщение) 1000 и позволяет ток коллектора 400 мА, обеспечивая IB (насыщение) до 400 мкА (что может обеспечить atTiny85).
  2. Помимо Feather Huzzah, в схему входили датчик напряжения / тока INA219 и датчик барометрического давления / температуры / высоты BMP180. Хотя ESP8266 имеет вывод для аналого-цифрового преобразователя, который можно использовать для измерения напряжения батареи, мне нужен вывод для другого датчика, который я планирую подключить к плате, поэтому мне пришлось использовать INA219 для измерения напряжения батареи.Таким образом, энергопотребление платы ближе к реальности, чем измерение просто цепи, когда ничего не происходит.
  3. В качестве батарей использовались 4 батареи типа AAA Camelion емкостью 1000 мАч, соединенные последовательно. Эквивалент батареи 5,3 В емкостью 1000 мАч при полной зарядке.
  4. Существует огромная разница между тем, чтобы просто дать плате Feather Huzzah спать (4 дня) и полностью отключить питание (транзистор отделяет GND платы от реального GND), что позволяет использовать батарею в течение 27 дней.Проблем со стабильностью WI-FI из-за плавающего GND не замечал.
  5. Управляющий atTiny85 отключил АЦП для экономии энергии, когда он тоже спит. Он почти ничего не потребляет, когда заходит в глубокий сон (вероятно, 5uA).

Расход:

Схема перестала работать через 646 ч и 22 мин (646,37 ч), что составляет примерно 26,5 дней.

Средний ток нагрузки равен: заряд аккумулятора 1000 мАч, деленный на время, необходимое для его разрядки (646.37h), что составляет около 1,547 мА.

Каждый цикл включения / выключения Feather Huzzah составлял 344 секунды (из которых 8 секунд были включены, а оставшиеся 336 секунд были выключены, и только atTiny85 спал). Если ток, потребляемый atTiny, пренебрежимо мал по сравнению с током, потребляемым всей схемой во включенном состоянии, то заряд, потребляемый за 8 секунд, но распределенный по 344 с, будет давать средний ток нагрузки:

I (huzzahon) * 8s = I (avg) * 344s -> I (huzzah) = 1,5471mA * 344s / 8s ~ = 66,5mA

Заключение:

Я не мог запустить простую схему в течение многих лет от батареи, только в течение 26 с половиной дней, используя дополнительные внешние компоненты, чтобы физически отключить ток, идущий на плату Feather Huzzah.Просто глубокий сон доска Huzzah каждые 5 минут разряжает батареи за 4 дня!

Прямо сейчас есть еще две возможности продлить срок службы батарей. Один из них — использовать батареи гораздо большего размера. Другой вариант — использовать фиксированный IP-адрес для платы, поскольку кажется, что большая часть времени соединения WiFi тратится на DHCP, но это еще предстоит попробовать.

Фото:

Как включить режим глубокого сна ESP8266? Низкое энергопотребление в ESP8266

В этом руководстве мы рассмотрим операции с низким энергопотреблением ESP8266 SoC, а также узнаем, как включить режим глубокого сна ESP8266.Мы также измерим ток как для нормального режима работы, так и для режима глубокого сна.

Два встроенных светодиода на NodeMCU

Введение

Современные микроконтроллеры и системы на кристаллах (SoC) разработаны с хорошей энергоэффективностью. На самом деле это ключевая характеристика небольших процессоров (таких как MCU и SoC), которые обычно реализуются в системах с батарейным питанием.

Одним из основных факторов при выборе микроконтроллера для дизайна вашего продукта является его способность работать в режиме низкого энергопотребления, особой функции управления питанием современных микроконтроллеров.

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

Все становится интереснее, когда вы работаете с дизайном, связанным с беспроводной связью, например, с системой на базе ESP8266 Wi-Fi SoC. Помимо обычных микроконтроллеров (таких как GPIO, SPI, ADC, I2C и т. Д.), SoC ESP8266 также имеет встроенные сетевые возможности Wi-Fi.

Даже со всем интегрированным оборудованием Wi-Fi, таким как RF Balun, малошумящий усилитель приема, усилитель мощности, фильтры и антенные переключатели, ESP8266 Wi-Fi SoC обеспечивает несколько операций с низким энергопотреблением для создания энергосберегающей системы.

Рабочие режимы в ESP8266 SoC

Благодаря передовой технологии управления питанием, ESP8266EX Wi-Fi SoC поддерживает четыре различных режима работы.

  • Активный режим
  • Модем – спящий режим
  • Легкий спящий режим
  • Глубокий спящий режим
  • 083

    Активный режим по умолчанию

    9 режим работы, при котором ЦП работает нормально, а также включены Wi-Fi и радио, так что SoC может передавать, принимать или прослушивать Wi-Fi.Во время работы ЦП все периферийные устройства также активны и могут использоваться приложением.

    Энергопотребление в активном режиме зависит от того, передает ли SoC данные по Wi-Fi или принимает данные. Кроме того, энергопотребление также зависит от типа протокола IEE 802.11 (например, 802.11b, 802.11g или 802.11n) и связанной с ним модуляции (CCK, OFDM или MCS7).

    В следующей таблице приведены типичные значения энергопотребления для различных параметров в активном режиме.Напряжение питания составляет 3,0 В, а температура окружающей среды составляет 25 0 C.

    Параметр

    Типичный ток в мА

    TX

    802.11b — CCK — 11 Мбит / с — P OUT = +17 дБм 170
    802.11g — OFDM — 54 Мбит / с — P OUT = +15 дБм

    140

    802.11n — MCS7 — P OUT = +13 дБм

    120

    RX

    802.11b — Длина пакета 1024B — -80 дБм

    50

    802.11g — Длина пакета 1024B — -70 дБм

    56
    802.11n — Длина пакета 1024B — -65 дБм

    56

    ПРИМЕЧАНИЕ: Значения энергопотребления относятся только к радиочастотному модулю без каких-либо дополнительных операций ЦП (таких как GPIO, ADC и т. Д.).

    Модем — спящий режим

    Это первый и самый простой режим пониженного энергопотребления или спящий режим для ESP8266 SoC.Как следует из названия, в спящем режиме модем ЦП ESP8266 SoC работает, но Wi-Fi и радио отключены.

    Даже несмотря на то, что цепь модема Wi-Fi отключена, микросхема по-прежнему поддерживает соединение Wi-Fi. Это означает, что нет передачи данных, а есть только соединение.

    Выключение модема Wi-Fi значительно снизит энергопотребление, и, поскольку ЦП все еще работает, режим ожидания модема можно использовать в приложениях, в которых должен работать только ЦП (например, АЦП, ШИМ или I2S).

    Легко-спящий режим

    В легком-спящем режиме ЦП, его часы и все внутренние периферийные устройства также приостанавливаются в дополнение к цепи модема Wi-Fi, что способствует еще меньшему энергопотреблению.

    Простым применением режима легкого сна является коммутатор Wi-Fi, в котором ЦП может бездействовать, когда не работает, но система подключена к Wi-Fi для приема команд (передача по Wi-Fi также отключена).

    Поскольку ЦП ESP8266 приостановлен в режиме легкого сна, он не может реагировать на сигналы и прерывания от внутренних периферийных устройств.Таким образом, для выхода из режима Light-Sleep необходимо применить внешний триггер GPIO.

    ПРИМЕЧАНИЕ. GPIO16 не может использоваться для пробуждения в легком режиме сна.

    Режим глубокого сна

    Режим глубокого сна ESP8266 — это режим максимального энергосбережения, в котором все выключено, кроме блока RTC. Процессор, часы, периферийные устройства, Wi-Fi, радио отключены для минимального энергопотребления.

    В то время как модем – спящий режим и легкий – спящий режим могут быть автоматически реализованы системой, режим глубокого сна ESP8266 инициируется пользователем (через микропрограммное обеспечение).

    ПРИМЕЧАНИЕ: Чтобы включить режим глубокого сна ESP8266, контакты GPIO16 и EXT_RSTB должны быть соединены вместе. EXT_RSTB также представлен как вывод RST в модуле ESP-12E, а также в NodeMCU.

    Режим глубокого сна ESP8266 NodeMCU полезен в приложениях с низким энергопотреблением, где передача данных не очень частая, а ЦП большую часть времени простаивает.

    В таких сценариях, если в ESP8266 активирован режим глубокого сна, система выходит из режима глубокого сна через заданный интервал, измеряет данные от датчика, выгружает данные на удаленный сервер по сети Wi-Fi и возвращается к режим глубокого сна.Этот процесс повторяется снова.

    Сравнение спящих режимов в ESP8266

    В следующей таблице показано простое сравнение трех спящих режимов в ESP8266 SoC.

    Модем — Спящий режим Легкий — Спящий режим Глубокий — Спящий
    ЦП ВКЛ Пауза

    ВЫКЛ

    Системные часы

    ВКЛ ВЫКЛ ВЫКЛ
    Wi-Fi ВЫКЛ ВЫКЛ

    ВЫКЛ

    RTC

    ВКЛ ВКЛ ВКЛ
    Энергопотребление 15 мА 0.9 мА

    20 мкА

    ПРИМЕЧАНИЕ: Эти данные основаны на техническом описании, предоставленном Espressif Systems. Значения в реальном времени определенно будут отличаться от одной настройки к другой.

    Как включить режим глубокого сна ESP8266?

    Перевести SoC ESP8266 в режим глубокого сна на самом деле очень просто. Это просто вызов функции ESP.deepSleep () со временем сна в микросекундах, переданным в качестве аргумента. Интересно, как выйти из режима глубокого сна.

    Вывести ESP8266 из режима глубокого сна можно двумя способами. Это:

    • Автоматическое пробуждение
    • Внешнее пробуждение

    Автоматическое пробуждение также называется пробуждением по таймеру, при котором ESP8266 автоматически выходит из глубокого пробуждения. спящий режим по истечении времени ожидания. В случае внешнего пробуждения ESP8266 выходит из глубокого сна при нажатии кнопки RST (т.е., когда вы подаете кратковременный сигнал LOW на вывод RST).

    Давайте посмотрим, как мы можем реализовать обе эти системы пробуждения для режима глубокого сна ESP8266. Я буду использовать плату ESP8266 NodeMCU для демонстрации.

    ПРИМЕЧАНИЕ: Если у вас есть модуль ESP-01, то реализовать внешнее пробуждение очень просто, так как у вас есть доступ к выводу RST. Поскольку у вас нет прямого доступа к контакту GPIO16, реализовать активацию по таймеру несколько сложно.

    Но вы всегда можете припаять провод к контакту GPIO16 SoC ESP8266EX, чтобы использовать его.Будьте предельно осторожны, если хотите припаять провод к контакту GPIO16, так как не хотите закоротить его с другими контактами.

    Ознакомьтесь с распиновкой ESP8266 NodeMCU для получения дополнительной информации о выводах ESP8266.

    ESP8266 Deep Sleep с автоматическим (таймером) пробуждением

    Чтобы реализовать автоматическое пробуждение по таймеру из режима Deep Sleep, все, что вам нужно сделать, это подключить вывод GPIO16 к выводу RST. На плате NodeMCU GPIO16 помечен как D0.

    ВАЖНОЕ ПРИМЕЧАНИЕ: Не подключайте GPIO16 к RST до загрузки кода, так как у вас могут возникнуть трудности с загрузкой кода.Подключите GPIO16 к выводу RST только после загрузки кода.

    Объяснение

    В нормальных условиях работы вывод RST ESP8266 всегда ВЫСОКИЙ. Если вы посмотрите на схему NodeMCU, вы можете обнаружить, что на выводе RST установлено ВЫСОКОЕ значение до 3,3 В через резистор 12 кОм.

    Для сброса или перезапуска микроконтроллера ESP8266 на выводе RST должен быть установлен кратковременный сигнал LOW. Имейте это в виду.

    Теперь вы можете перевести ESP8266 min в режим глубокого сна, вызвав функцию ESP.deepSleep () со временем засыпания в микросекундах в качестве аргумента.Например, если вы вызываете ESP.deepSleep (10000000) или ESP.deepSleep (10e6), то устройство переводится в режим глубокого сна на 10000000 микросекунд или 10 секунд, и по окончании таймера MCU отправляет сигнал LOW на GPIO16 Pin.

    Поскольку мы подключаем GPIO16 к выводу RST, сигнал LOW на GPIO16 после завершения таймера глубокого сна подаст сигнал LOW на вывод RST, и микроконтроллер будет сброшен.

    Код теста

    Чтобы продемонстрировать режим глубокого сна в ESP8266 с таймером или автоматическим пробуждением, я написал простой код.При этом светодиод, подключенный к GPIO, включается на 5 секунд, затем SoC переводится в режим глубокого сна на 5 секунд.

    Когда микроконтроллер ESP8266 входит в режим глубокого сна, светодиод гаснет. По истечении 5 секунд ожидания вывод GPIO16 сбрасывает MCU через вывод RST, и процесс повторяется.

    ESP8266 Deep Sleep с внешним пробуждением

    Чтобы вывести ESP8266 из Deep Sleep с помощью внешнего сигнала, вы должны использовать кнопку, чтобы переместить вывод RST в НИЗКОЕ состояние. Но если вы заметили плату NodeMCU, кнопка RESET уже подключена к выводу RST.

    Тестовый код

    Код очень похож на предыдущий код, но поскольку нет тайм-аута или предопределенного времени сна, вы должны передать 0 в качестве аргумента функции ESP.deepSleep ().

    Это переведет ESP8266 в режим глубокого сна на неопределенный срок, пока не будет нажата внешняя кнопка пробуждения.

    Энергопотребление в нормальном режиме и режиме глубокого сна

    Я сделал простую схему для измерения потребления тока ESP8266 NodeMCU в нормальном режиме и режиме глубокого сна.Для этого я использовал внешний блок питания на 5В и мультиметр. Мультиметр установлен в режим измерения постоянного тока.

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

    Положительная шина источника питания 5 В подключена к красному щупу мультиметра. Черный зонд подключается к выводу VIN NodeMCU, а земля NodeMCU подключается к отрицательной шине источника питания 5 В.

    Я использовал автоматическую или таймерную систему пробуждения. Итак, выводы GPIO16 и RST соединены вместе (только после загрузки кода).

    В нормальном рабочем режиме ESP8266 NodeMCU потребляет около 80 мА тока. Здесь вы также можете видеть, что светодиод горит.

    После перехода в режим глубокого сна после задержки в 5 секунд потребляемый ток снижается примерно до 10 мА. Он остается в режиме глубокого сна в течение 5 секунд, после чего ESP8266 пробуждается контактом GPIO16. Светодиод не горит, когда ESP8266 переходит в режим глубокого сна.

    Заключение

    Полное руководство по ESP8266 Deep Sleep Mode реализовано здесь.Вы узнали о различных режимах работы ESP8266 SoC, различных режимах сна ESP8266, сравнении энергопотребления в разных режимах, о том, как перевести ESP8266 в режим глубокого сна, а также о различных способах выхода из режима глубокого сна.

    9. Управление питанием — документация MicroPython 1.15

    ESP8266 предоставляет возможность изменять частоту процессора на лету, и войти в состояние глубокого сна. Оба могут использоваться для управления энергопотреблением.

    9.1. Изменение частоты процессора

    Машинный модуль имеет функцию получения и установки частоты процессора.Чтобы получить текущая частота использования:

     >>> импортная машина
    >>> machine.freq ()
    80000000
     

    По умолчанию процессор работает на частоте 80 МГц. Его можно изменить на 160 МГц, если вам нужно больше мощность обработки, за счет потребления тока:

     >>> machine.freq (160000000)
    >>> machine.freq ()
    160000000
     

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

    9.2. Режим глубокого сна

    Режим глубокого сна отключит ESP8266 и все его периферийные устройства, включая Wi-Fi (но не включая часы реального времени, которые используются для пробуждения чип). Это резко снижает потребление тока и является хорошим способом делать устройства, которые могут некоторое время работать от аккумулятора.

    Чтобы использовать функцию глубокого сна, вы должны подключить GPIO16 к сбросу булавка (RST на доске Adafruit Feather HUZZAH). Тогда следующий код может быть используется для сна и пробуждения устройства:

     импортная машина
    
    # настроить RTC.ALARM0, чтобы иметь возможность разбудить устройство
    rtc = machine.RTC ()
    rtc.irq (триггер = rtc.ALARM0, wake = machine.DEEPSLEEP)
    
    # установить RTC.ALARM0 на срабатывание через 10 секунд (пробуждение устройства)
    rtc.alarm (rtc.ALARM0, 10000)
    
    # перевести устройство в спящий режим
    machine.deepsleep ()
     

    Обратите внимание, что когда чип выходит из режима глубокого сна, он полностью сбрасывается, включая всю память. Сценарии загрузки будут работать как обычно, и вы можете поместите в них код, чтобы проверить причину сброса, возможно, сделать что-то другое, если аппарат только что проснулся от глубокого сна.Например, чтобы распечатать причину сброса можно использовать:

    , если machine.reset_cause () == machine.DEEPSLEEP_RESET:
        print ('проснулся от глубокого сна')
    еще:
        print ('включение питания или полный сброс')
     
    .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *