Четверг, 25.04.2024, 20:03
| RSS
Поиск
Главная |
Защита, контроль, управление
Форма входа
Логин:
Пароль:

Меню

Авторские проекты

Статьи

Raspberry Pi

Полезная информация

Обратная связь

Ссылки

Форум

Чат

Канал YouTube

Группа в Facebook


Календарь
«  Декабрь 2018  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
31

Наш опрос

Ссылки


Яндекс.Метрика





.
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Универсальная прошивка ESP_Easy для ESP8266. Часть первая

Универсальная прошивка ESP_Easy для ESP8266. Часть первая

Наш канал в YouTube


Накануне нового 2019 года Александр Вайдуров (AlexAW) сделал очень полезный и приятный подарок всем пользователям нашего сайта, написав довольно обширную и интересную статью о том, как самостоятельно разрабатывать  прошивки и программировать различные девайсы на базе широко известного чипа ESP8266 даже не имея познаний в программировании. Но, конечно, базовые познания иметь все же желательно - хотя бы для понимая того, что вы делаете. Тем не менее, надеюсь, что после прочтения этой статьи, у многих, кто сомневался в своих возможностях в программировании, появится желание самостоятельно собрать и запрограммировать какое-нибудь полезное устройство на ESP8266. Итак, далее слово предоставляется Александру:

В этой статье я постараюсь  рассказать и показать, как без программирования создавать периферийное устройство на ESP8266 c прошивкой ESP_Easy. Эту универсальную прошивку создает команда разработчиков любителей, проект динамично развивается увеличивается его функциональность и объем поддерживаемого оборудования, датчиков и протоколов связи. Что особенно радует, проект не является коммерческим. Более подробно обо всем этом можно почитать на сайте разработчиков. Что касается поддерживаемого оборудования, я так понял, что прошивка будет работать практически, на всем железе, на котором установлена ESP8266.

Я познакомился  с этой прошивкой, развернув ее  на китайском клоне отладочной платы WeMos D1 mini. Мне понравились возможности этой прошивки. Для пробы, я собрал на ней макет терморегулятора, с цифровым датчиком температуры DS18B20, дисплеем LCD1602 подключенным через интерфейс  I2C и исполнительным реле. Мой проект подключался к центральному модулю через WiFi сеть по протоколу MQTT. В качестве центрального модуля, для экспериментов я использовал MQTT клиента на Android планшете. Проект позволяет, удаленно и местно контролировать текущую температуру, состояние реле и значение уставки. Так же есть возможность, местно и удаленно изменять значение уставки.

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

 

esp8266

Рис. 1

 

Поскольку планировалось создать еще несколько MQTT периферийных устройств, при разработке печатной платы в нее были заложены некоторые универсальные решения. На плате установлено три двунаправленных преобразователя уровня для формирования сигналов шины I2C и 1-Wire  в двух вариантах уровней. Вход и Выход USART сделаны толерантными к уровням пять вольт, Для защиты аналогового входа  ESP8266, в семе предусмотрена возможность установки ограничительных диодов. Все Свободные GPIO ESP8266 Выведены на двухрядный разъем, обеспечивая подключение различной периферии. Также на плате предусмотрена возможность установки исполнительного реле, звукового извещателя и трех кнопок. Порты использованные для подключения кнопок, выведены и на клеммы для альтернативного использования. Также на плате разведен DC-DC преобразователь, работающий в диапазоне входных напряжений от 7 до 28 Вольт. Для обеспечения возможности питания устройства от сети 220В, предусмотрены клеммы для установки на плату, например вот такого  или вот такого сетевого блока питания на место DC-DC преобразователя.

Платки изготовлены и благополучно доставлены. Собираем и пробуем. Небольшая рекомендация! Перед впаиванием в плату ESP8266 рекомендуется  поверить работу блоков питания, все питающие напряжения и работу всей обвязки. Далее требуется залить прошивку, и будем создавать WiFi устройство.

 Теперь по шагам – делаем  измеритель  температуры, а потом на его базе и терморегулятор. С контролем по сети, протоколом MQTT.

Шаг первый – прошивка. Закачиваем архив со “свежей” прошивкой из репозитория. В архиве содержатся исходные файлы, скомпилированные прошивки для различных вариантов ESP и загрузчик, позволяющий загрузить эти прошивки через последовательный порт в ESP. Предлагаю установить на плату ESP12 c 4 Мб. флэш памяти на борту. Тогда нас будет интересовать вариант скомпилированной прошивки для размещения во флэш объемом 4 Мб и та, которая наиболее проверена и оттестирована. Такая прошивка в имени содержит слово normal. Я скачал и выбрал вот такую прошивку ESP_Easy_mega-20181220_normal_ESP8266_4096.bin. Подключаем USB – UART (ttl) преобразователь интерфейсов, к портам USART ESP. Вход Rx преобразователя соединяем с выходом Tx ESP,  и выход Тх преобразователя соединяем с входом Rx ESP. Запускаем загрузчик и выбираем файл прошивки для загрузки. Подключаем вывод GPIO 0 к общему проводу.

 

esp8266

Рис. 2

 

Запускаем  загрузку нажатием кнопки Flash, и прижимаем кратковременно вход reset ESP к общему проводу. Начинается процесс загрузки, о чем в окне монитора загрузчика сообщают увеличивающиеся значения процента загрузки. По окончании загрузки, отключаем от ESP преобразователь интерфейсов и вывод GPIO 0 от общего провода. Больше нам подобную процедуру проделывать не потребуется, т.к последующие обновления мы можем делать по “воздуху”.

Шаг второй  прописываем устройство в своей сети. Для этого после сброса ESP с помощью, смартфона, планшета или компьютера с WiFi интерфейсом, отыскиваем в сети точку доступа  “ESP_Easy_0”, и подключаемся к ней. Пароль для подключения ”configesp”. Это точка доступа нашего устройства, которое генерирует веб страничку по адресу 192.168.4.1. Обычно после подключения к точке доступа, происходит автоматический запуск браузера и открывается страничка настройки подключения. На этой страничке, необходимо указать (выбрать) WiFi сеть к которой должно будет подключаться наше устройство и указать пароль для входа.

 

esp8266

Рис. 3

 

Жмем Connect. Если все было указано верно. То вы получите сообщение о присоединении вашего устройства к сети с его IP адрес.

 

esp8266

Рис. 4

 

Также адрес вы можете посмотреть на DHCP сервере своего роутера. Там же потом можете присвоить устройству фиксированный адрес по мак адресу (если нужно).

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

Шаг третий – Конфигурирование. Набираем IP адрес устройства в адресной строке браузера. Видим вот такую информационную страничку. Думаю, комментарии тут не требуются.

 

esp8266

Рис. 5

 

Откроем вкладку Config

Вводим имя устройства в поле  Unit Name, например ESP_Easy_Test, оно в дальнейшем будет идентифицировать устройство в в протоколах связи. Напротив пункта Append Unit Number to hostname, активируем крыж. В поле Unit Number вводим уникальный номер устройства. Также можем определить пароль доступа к интерфейсу конфигурирования устройства.

На этой же страничке можно указать, альтернативную точку доступа к сети, Сменить пароль доступа к устройству, в режиме точки доступа. Ввести сетевые настройки устройства. Установить режимы состояния «сна» После установки настроек необходимо их сохранить нажатием на кнопку Submit.

 

esp8266

Рис. 6

 

 На следующей закладке Controllers настроим протоколы связи устройства с внешним миром (центральным устройством). Как видите, протокол может быть не один. Нам нужен МQTT. Для его выбора нажимаем первую кнопочку Edit и в поле protocol  выбираем один из предложенных MQTT протоколов. Они все обеспечиваются работой одного и того же плагина, отличаются только предустановленными настройками формирования сообщений в топиках. Поэтому я выбрал «OpenHAB MQTT» В нем топики формируются, привычным для меня синтаксисом, «/Имя устройства/Имя датчика/Значение (Состояние)».

Далее настраиваем параметры соединения с брокером MQTT. Указываем имя или IP адрес брокера. Если необходимо указываем Имя пользователя и пароль для подключения к брокеру. Пока делаем тестовое устройство, делаем минимум всяких защит, но при создании реального устройства стоит позаботиться о безопасности и установить пароли и на доступ к конфигурированию устройства и на подключение протоколов. Остальные предустановленные настройки оставляем по умолчанию, они нас вполне устраивают. Сохраняем нажатием на кнопку Submit.

 

esp8266

Рис. 7

Настроенные протоколы связи мы можем включать и выключать Установкой (снятием) крыжа Enabled. Не забываем его поставить и сохранить нажатием на кнопку Submit.

 

esp8266

Рис. 8

 

Открываем следующую закладку Hardware.

 

esp8266

Рис. 9

 

Здесь практически все настройки можно оставить по умолчанию. Главное выберем GPIO для организации I2С интерфейса.  На плате имеются несколько портов с преобразователями уровня, выберем GPIO4 и GPIO5. Так же установим GPIO2 для индикации статуса соединения WiFi и GPIO10 в состояние низкого выхода при рестарте, для того что бы пищалка наконец замолчала ))). Снова сохраняем нажатием на кнопку Submit.

Идем к следующей закладке Devices. Здесь мы пропишем и настроим все подключаемые нами к ESP8266 устройства. Начнем с подключения дисплея. Жмем первую кнопочку Edit.

 

esp8266

Рис. 10

 

В меню выбора устройств находим и выбираем строчку «Display - LCD2004».

 

esp8266

Рис. 11

 

 

esp8266

Рис. 12

 

В строке Name вводим имя подключаемого устройства. Включим плагин поддержки LCD дисплеев, установив крыж в строке Enabled. Далее важно указать правильный адрес устройства в интерфейсе I2C. Так же выберем правильный размер дисплея - две строки по 16 символов. Что бы проверить работоспособность, для начала, давайте в первую строку выведем значение системной переменной содержащей дату и время. Подробнее о системных переменных читайте в Wiki. Для активации подсветки дисплея выберем GPIO16. Забегая вперед скажу, что это кнопка на плате, которую я планирую использовать для местной установки значения уставки. Время работы подсветки выберем 60 секунд.  Режим отображения дисплея установим «отбрасывать все, что не входит в строку» Для того что бы видеть, например время, с точностью до секунд поставим периодичность вывода на экран -ежесекундно. Жмем Submit для сохранения настроек.

Если все подключено правильно и адрес интерфейса дисплея указан, верно, вы увидите системные установки даты и времени устройства. Пока время и дата, скорее всего не верные, позже я покажу, где они устанавливаются. Попробуйте подставить другие системные переменные в строки Line 1, Line 2. Вы увидите, какие еще сведения можно получить от системы ESP_Easy.

 

esp8266

Рис. 13

 

Продолжим подключать устройства. Следующим подключим цифровой датчик температуры DS18B20. Этот датчик работает в диапазоне питающих напряжений от 3 до 5 вольт. На плате еще один порт снабжен преобразователем уровней GPIO13, к нему и подключим термодатчик, и запитаем его от 5вольтового питания. Для этого в закладке Devices нажимаем кнопку Edit в следующей, свободной строчке. В меню выбора устройств находим и выбираем строчку «Environment – DS18b20».

 

esp8266

Рис. 14

 

Даем уникальное имя датчику, например «ТМ». Это имя будет обозначать устройство в протоколах связи вместо переменной %tskname%. Включаем плагин, выбираем порт. Включаем отправку данных с периодичностью 60 сек. Можно и чаще конечно, особенно пока экспериментируем. Будем быстрее видеть реакцию устройства.

 

esp8266

Рис. 15

 

Обратите внимание на раздел Values. В нем одна строка, с именем переменной «Temperature» хранящей температуру, в протоколе связи она будет подставляться вместо %valname%. Так же в этом разделе можно указать количество знаков после запятой. Не пренебрегайте правильной настройкой разрядности, т.к. это влияет на отображение значений переменных и объем памяти необходимый для их хранения. Жмем Submit, и в окне появятся еще несколько новых строк. После начала работы плагина, произойдет опрос шины 1-Wire и если к шине подключено несколько датчиков, в меню выбора Devise Address можно будет выбрать адрес требуемого датчика, а в меню Device Resolution установить количество считываемых бит (этот параметр влияет на выдаваемую точность и время измерения).      Понятно, что если на шину навесить несколько датчиков, аналогичным образом их все можно зарегистрировать и использовать. Получим многоканальный термометр. Напомню, имена датчикам следует давать уникальные. Для сохранения, как всегда, жмем submit.

 

esp8266

Рис. 16

 

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

 

esp8266

Рис. 17

 

Отобразим результат измерения во второй строке дисплея. Для этого отредактируем его настройки. Жмем первую кнопку Edit. В открывшемся диалоге в поле Line 2 Вписываем  заголовочный текст Temp: и далее в квадратных скобочках [название устройства #название параметра] т.е. [TM#Temperature]. И жмем submit для сохранения.

 

esp8266

Рис. 18

 

В итоге наше устройство превратилось в измеритель температуры.

Забегая вперед скажу, устройство уже периодически сообщает значение температуры MQTT брокеру в топике /ESP_Easy_Test/TM/Temperature

 

esp8266

Рис. 19

 

Но наша цель терморегулятор, а для этого нам нужно управлять реле  исходя из сравнения измеренной температуры с требуемой. На заре разработки прошивки ESP_Easy, для решения подобных задач был разработан «механизм» написания правил. К нему мы еще вернемся, а текущую задачу решим проще. В современной прошивке в перечне поддерживаемых датчиков, есть плагин такого виртуального устройства, как регулятор -контроль уровня – «Regulator - Level Control Вот его мы и выберем после нажатия кнопки Edit в третьей строке списка подключенных устройств.

 

esp8266

Рис. 20

 

Настройка регулятора не сложная.  Как и а предыдущих случаях, даем уникальное имя и включаем плагин. В строке выбора GPIO – Level low: Выбираем номер порта, который будет включать реле при низком уровне измеренного параметра. На плате транзистор управления реле подключен к GPIO12, его и выбираем. В полях Check Task: Check Value: Выбираем плагин который контролирует нужный нам параметр и имя параметра. В поле Set Level запишем уровень требуемой уставки, в поле Hysteresis уровень гистерезиса переключения. Замечу, что если вы выбрали значение 1 то правильно было бы сказать, что гистерезис установлен -+ 0.5. То есть переключение на включение в нашем случае, произойдет при температуре 28.5 градусов, выключение при 29.5 градусов. Ставим крыж в квадрате Send to Controller. Это приведет к тому, что устройство будет передавать значение состояния реле при каждой его смене в переменной Output. Все настройка регулятора закончена, жмем submit, для сохранения. Состояние реле теперь зависит от значения температуры. Но что бы видеть к какому значению температуры стремиться наш терморегулятор, давайте выведем значение уставки на дисплей. Для этого опять отредактируем его настройки. Жмем первую кнопку Edit, и в открывшемся диалоге, в поле Line 2 запишем Temp:[TM#Temperature] Set:[LC#getLevel] И жмем submit для сохранения.

 

esp8266

Рис. 21

 

Регулятор готов.  На дисплее мы видим текущую температуру и установленную температуру уставки.

 

esp8266

Рис. 22

 

Статья получилась довольно обширная. Но видимо это по тому, что она изобилует  картинками. Тем не менее, будем закругляться.

Кратко напишу еще про протокол MQTT, точнее про топики, которые публикует наше устройство. Как вы помните, мы ставили крыжи напротив надписи Send to Controller  у двух плагинов, датчика температуры с именем «TM» и параметром «Temperature», и регулятора с именем «LC» и параметром «Output». Напомню имя устройства у нас ESP_Easy_Test.

Итак наше устройство публикует два топика:

Топик со значением температуры /ESP_Easy_Test/TM/Temperature в виде числа с плавающей точкой;

Топик с значением состояния реле /ESP_Easy_Test/LC/ Output,  0 - реле выключено, 1 – включено.

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

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

 




Категория: | Просмотров: 10739 | Добавил: Admin | Теги: | Рейтинг: 4.8/25 |
Всего комментариев: 0






T2M © 2024
Сайт управляется системой uCoz