KEEN SIDE успешно заменяет аналогичные продукты таких известных брендов, как Phoenix Contact, Weidmueller, Degson, Winstar, Hsuan Mao, KLS, G-NOR, Mean Well и др.

Контроллер управления подсветкой на кухне. Вариант на NodeMCU - обновление прошивки по Wi-Fi

ESP8266 PCA9685 DS18B20

Журнал РАДИОЛОЦМАН, октябрь 2017

Вадим Колесник, г. Тирасполь

Ранее на страницах портала Радиолоцман публиковались описания двух устройств для автоматического управления подсветкой рабочей зоны на кухне: вариант на Arduino [2] и вариант на NodeMCU [3]. Последний, несмотря на некоторые недостатки, о которых я сообщу в конце статьи, подключен к серверу Cayenne и работает надежно (Рисунок 1).

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Контроллер управления подсветкой на кухне. Вариант на NodeMCU - обновление прошивки по Wi-Fi
Рисунок 1. Контроллер на NodeMCU для управления подсветкой на кухне и
контроля параметров хорошо зарекомендовал себя в работе.

В статье [3] я говорил, что планирую расширение функционала контроллера, подключение дополнительных сенсоров и управление вытяжкой на кухне. В этом случае нужно отметить, что «Контроллер подсветки» для устройства на NodeMCU – это было лишь рабочее название проекта по аналогии с Arduino-версией.

Одной из первых задач которую необходимо решить при расширении функционала контроллера, является обновление прошивки. Ввиду того, что контроллер расположен в труднодоступном месте (на верхних шкафах кухни, в моем случае), и подключение его к ПК или ноутбуку по USB для прошивки (без полного демонтажа) – задача достаточно трудоемкая, я решил реализовать процесс обновления прошивки по Wi-Fi (Over-The-Air Update, OTA Update). Подключение дополнительных сенсоров и реле затруднений не вызовет, ввиду того, что они просто подключаются к нужным штыревым разъемам на плате контроллера.

Для понимания процесса обновления прошивки ESP8266 по Wi-Fi я рекомендую ознакомиться с материалами и пользовательскими примерами реализации OTA [4], которые можно найти в сети Интернет. Основные условия:

  • Объем Flash-памяти модуля NodeMCU должен быть в 2 раза больше размера скетча Arduino;
  • Устройство и ПК с которого выполняется обновление должны находится в одной локальной сети;
  • Удостовериться, что процесс обновления прошивки не приведет к сбоям в работе периферии и исполнительных устройств.
  • Для универсализации я выбрал способ обновления прошивки через Web браузер.

В общем случае все реализации OTA работоспособны, но в нашем случае есть один нюанс: основное приложение при запуске подключается и работает с сервером Cayenne, и при простом добавлении ОТА функций в приложение (как описано в примерах) наблюдается нестабильная работа устройства. Поэтому пришлось пойти на хитрость.

На приборной панели Cayenne была добавлена кнопка Switch to Update Mode (переключить в режим обновления прошивки), при нажатии на которую в EEPROM контроллера записывается флаг, указывающий на необходимость запуска ОТА после перезагрузки контроллера. Далее выполняется программная перезагрузка контроллера и, если установлен флаг запуска ОТА, инициализируется сервер с определенным IP-адресом (и именем) в локальной сети. В браузере переходим по указанному адресу и видим страницу, на которой выбираем бинарный файл прошивки и отправляем его на сервер. Если прошивка выполнена удачно, то в EEPROM контроллера удаляется флаг запуска OTA и выполняется перезагрузка контроллера. После рестарта (флаг OTA отсутствует) инициализируется сервис Cayenne и выполняется основное приложение.

Рассмотрим подробнее основные моменты.

Кнопка "Switch to Update Mode" на приборной панели Cayenne (Рисунок 2) подключена к виртуальному каналу 4 (Virtual Channel 4). При нажатии на кнопку (иконка кнопки становится активной) с сервера Cayenne передается в контроллер значение, равное 1. Обработка нажатия кнопки и установка флага OTA в EEPROM выполняются в функции CAYENNE_IN(V4) (Листинг 1).

Контроллер управления подсветкой на кухне. Вариант на NodeMCU - обновление прошивки по Wi-Fi
Рисунок 2. Свойства кнопки переключения контроллера в режим OTA
на приборной панели Cayenne.

Листинг 1. Обработчик нажатия кнопки на приборной панели и запись флага OTA в EEPROM контроллера.

CAYENNE_IN(V4) {
  Cayenne_OTA_Button = getValue.asInt();
  if (Cayenne_OTA_Button == 1) {
    EEPROM.begin(4);
    EEPROM.write(0, 83);
    EEPROM.commit();
    delay(2000);
  }
}

Обратите внимание на функции работы с EEPROM. У СнК ESP8266 отсутствует энергонезависимая память, область EEPROM (4 байта) выделяется во внешней Flash-памяти программ. Запись флага (значение 83 соответствует ASCII символу S) производится по адресу 0.

В основном цикле программы отслеживается состояние переменной Cayenne_OTA_Button, и если она равна 1, то деактивируем кнопку Switch to Update Mode на приборной панели, выполняем задержку на 4 секунды и перезагружаем контроллер (Листинг 2).

Листинг 2. Деактивируем кнопку на приборной панели и выполняем перезагрузку контроллера.

if (Cayenne_OTA_Button == 1) {
  Cayenne_OTA_Button = 0;
  Cayenne.virtualWrite(V4, Cayenne_OTA_Button);
  delay(4000);
  ESP.restart();
}

После перезагрузки модуля выполняется функция инициализации setup(), в которой проверяется флаг OTA_Start_Flag. Если флаг установлен, то выполняется инициализация сервера и содержимого веб-страницы. В основном цикле (при установленном флаге) запускается сервер, и при обращении клиента генерируется веб-страница (Рисунок 3). Также запускается таймер на 3 минуты – по истечении этого времени сбрасывается флаг OTA, выполняется перезагрузка модуля и переход к выполнению основного приложения (Листинг 3). Состояние готовности сервера и его IP-адрес можно узнать в мониторе последовательного порта в среде Arduino IDE (если устройство подключено по USB к ПК) или в ARP таблице маршрутизатора. В настройках маршрутизатора лучше сразу прописать постоянный IP-адрес для контроллера (по МАС-адресу).

Контроллер управления подсветкой на кухне. Вариант на NodeMCU - обновление прошивки по Wi-Fi
Рисунок 3. Веб-страница, генерируемая контроллером в режиме
обновления прошивки по Wi-Fi.

Листинг 3. Запуск сервера OTA, обработка подключенного клиента и запуск таймера времени для обновления прошивки контроллера.

if (OTA_Start_Flag == 83) {
  server.handleClient();
  if (millis() - timeout_1 > interval_2) {
    EEPROM.begin(4);
    EEPROM.write(0, 70);
    EEPROM.commit();
    delay(1000);
    ESP.restart();
  }
}

Выбираем файл прошивки (как найти бинарный файл прошивки, скомпилированный в Arduino IDE, думаю, объяснений не требует) и нажимаем кнопку Update. Прошивка займет несколько секунд, после чего в браузере появится сообщение о статусе процесса обновления, сбросится флаг OTA (запись в EEPROM по адресу 0 десятичного значения 70, ASCII символ F), спустя несколько секунд контроллер автоматически перезагрузится и перейдет к выполнению основного приложения.

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

const char* host = "ESP-Kitchen";

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

Первоначально прошивка с поддержкой OTA функций программируется в контроллер стандартным способом (по USB). После этого можно пользоваться функцией обновления по Wi-Fi; главное не забыть, чтобы в обновленной прошивке (скетче) присутствовали функции OTA. В ходе этого процесса вы столкнетесь с одним неудобством. Дело в том, что после первого OTA обновления потребуется однократно выполнить аппаратный сброс Wi-Fi модуля (кнопка сброса на NodeMCU). В последующих OTA обновлениях все будет происходить автоматически. Связано это с какими-то внутренними регистрами и архитектурой СнК ESP8266.

Контроллер управления подсветкой на кухне. Вариант на NodeMCU - обновление прошивки по Wi-Fi
Рисунок 4. Плата ШИМ контроллера на микросхеме PCA9685.

Еще один недостаток, выявленный в работе контроллера подсветки, связан с программной реализацией ШИМ в среде Arduino. При малых значениях ШИМ наблюдается нестабильность скважности ШИМ сигнала в моменты обращения к датчику температуры DS18B20, которая проявляется кратковременным и слабозаметным миганием светодиодной ленты. Поэтому, думаю, что потребуется отказаться от использования программного ШИМ в ESP8266 в пользу распространенной микросхемы 16-канального ШИМ PCA9685 или платы расширения на ее основе с управлением по интерфейсу I2C (Рисунок 4).

Ссылки

Материалы по теме

Загрузки

На английском языке: Controller for automatic lighting of the working area in the kitchen. NodeMCU Version - OTA update

48 предложений от 23 поставщиков
Предназначен для связи устройства с беспроводными сетями.Для прошивки модуля нужно использовать переходник UART-USB.Модуль Wi-Fi ESP8266 (ESP-01) - самый популярный модуль серии....
AliExpress
Весь мир
Обновленная версия ESP-01, ESP-01S, серийный Wi-Fi-модуль ESP8266, модель Интернета подлинность гарантирована, плата Wi-Fi для Arduino
15 ₽
ЗУМ-СМД
Россия
ESP8266EX (ESP-01)
Ai-Thinker
25 ₽
T-electron
Россия и страны СНГ
MOD-WIFI-ESP8266
Olimex
496 ₽
Flash-Turtle
Весь мир
Olimex LTD MOD-WIFI-ESP8266
Olimex
по запросу
Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя