Умный дом Своими руками. Энергомонитор на PZEM-004T. Часть 3

В прошлой статье мы определились что программное обеспечение будем писать в программе FLProg. Данные получаемые с энергомонитора будем передавать на сервер MQTT, доступ к этим данным будем иметь на различных мобильных устройствах (смартфоне, планшете) а также сможем получать на другие устройства умного дома. Для дальнейшей комфортной работы должны предусмотреть следующее: - возможность быстро подключиться к другому серверу MQTT также без снятия контролера с платы.
- получение постоянного и легкого контроля за соединением к сети и серверу в WEB интерфейсе

Выглядить это будет примерно так

главная страница
главная страница
страница настроек MQTT
страница настроек MQTT
Страница настройки WiFi
Страница настройки WiFi

Стрелками указаны кнопки сохранить и перегрузить. Как это работает. На главной страницы мы видим статус подключения к WiFi сети и серверу. С главной страницы мы можем перейти на страницы настроек сети и соединения с сервером. Если например в настройках сервера изменить в текстовых полях параметры сервера, а после нажать на кнопки "сохранить" и перегрузить" то в дальнейшем наш энергомонитор будет работать с новым сервером. При новой загрузке он будет брать именно эти данные для соединения. Точно также и с локальной сетью. Что это нам дает? По какой либо причине вы хотите работать с новым сервером (старый не работает, нашли более выгодный ресурс, подняли свой локальный) в течение 30 секунд вы перенастроите свое устройство. Нет необходимости снимать его и перепрограммировать. Идею Вы поняли а теперь перейдем непосредственно к программе.

Думаю с момента публикации второй части Вы успели ознакомиться с программой FLProg. Открываем ее и нажав на вкладку "файл", Новый, на контролере - создаем новый проект. Выбираем контроллер -ESP8266 и сохраняемся. Теперь нам надо установить базовый пользовательский блок для соединения с сервером MQTT. С правой стороны экрана заходим в пользовательские блоки и выбираем "MQTT ESP Main v6.8". Многие могут сказать что у них такого блока нет. Пользовательские блоки можно получить несколькими способами:
- скачать на сайте программы или моем сайте
- при помощи FLProg загружаем скетч (скачать можно также у меня на сайте по ссылке в конце статьи. После загрузки выделяем нужный блок, щелкая по нему правой кнопкой мыши и в выпашем меню выбираем пункт - добавить в библиотеку. Данный блок в программе может быть только один. Кроме всего -он будет работать с блоками только той версии, что и сам, в нашем случае 6.8.

Выбор контроллера
Выбор контроллера
Основной пользовательский блок
Основной пользовательский блок

Переходим в левую часть экрана и начинаем настраивать соединение по WiFi. Щелкаем по настройке модуля и включаем "Клиент". Прописываем в настройках данные нашей локальной сети. В получении IP адреса по DHCP я прописываю конкретный адрес например 192.168.1.20. Почему? Чтобы не делать лишнюю работу и не искать модуль в настройках роутера или при помощи утилиты сканирования. Ну тут каждый поступает как ему удобнее.

настройка WiFi
настройка WiFi

После настройки переходим к вкладке пользовательские параметры и начинаем их прописывать

настройка системных параметров3
настройка системных параметров3
Параметр дает возможность проверить подключение к серверу. Статус соединения с сервером. Имя - можно на русском "Статус соединения с MQTT", тип "Booalean", галочку сохранения в EEPROM убираем.
Параметр дает возможность проверить подключение к серверу. Статус соединения с сервером. Имя - можно на русском "Статус соединения с MQTT", тип "Booalean", галочку сохранения в EEPROM убираем.
Следующий параметр - адрес сервера в интернете. Название -Адрес, тип String, значение по умолчанию, у меня M4.WQTT.RU. У вас может быть другое
Следующий параметр - адрес сервера в интернете. Название -Адрес, тип String, значение по умолчанию, у меня M4.WQTT.RU. У вас может быть другое
Далее -прописываем порт соединения. Название -порт, тип - Integer, значение по умолчанию 2710, обычно 1883
Далее -прописываем порт соединения. Название -порт, тип - Integer, значение по умолчанию 2710, обычно 1883
Следующий - логин для входа. Наименование Логин, тип - String, значение по умолчанию -прописываем логин который предоставлен вам на MQTT сервере
Следующий - логин для входа. Наименование Логин, тип - String, значение по умолчанию -прописываем логин который предоставлен вам на MQTT сервере

Аналогично создаем пользовательские параметры Пароль и наименование устройства (можно задать любое например PZEM). Тип - String. В этих параметрах а также в параметрах адреса, порта и логина ставим галочку сохранять в EEPROM, чтобы при включении происходило автоматическое считывание и подключение.

Переходим в основное поле и начинаем настраивать наше соединение. Для этого в правой колонке выбираем блок "Чтение системного параметра". Нам их надо пять штук добавляем их

Добавляем блоки
Добавляем блоки

Открываем блок и при помощи кнопки выбираем нужный нам параметр, в данном случае "Сервер MQTT", где у нас прописан его адрес в интернете. Сохраняемся

кнопка для выбора параметра
кнопка для выбора параметра
выбор параметра
выбор параметра

Соединяем этот блок с входом основного блока "MQTTServer", аналогично настраиваем и подключаем остальные блоки (порт к mqttPort и т.д.). В конце окультуриваем наши соединения преобразовывая их в текст. Добавляем блок аналогового выключателя, блок сравнения строк и блок записи системного параметра. На выходе основного блока "mqttConnectod" при установке соединения с сервером появляется логическая единица. Используем это для получения статуса соединения. В аналоговом выключателе прописываем две константы типа String -"ON" и "Off", в блоке сравнения строк прописываем константу String "ON" и ставим в настройках S1=S2. В блоке записи системного параметра кнопкой выбираем "Подключение к MQTT (Boolean)". На этом настройка блока MQTT ESP Main v6.8 завершена и нам остается создать web интерфейс.

Окультуриваем
Окультуриваем
запись статуса соединения
запись статуса соединения

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

Включаем WEB интерфейс
Включаем WEB интерфейс

Переходим на главную страницу и добавляем в нее нужное содержание. Щелкаем по пункту добавить параметр и выбираем нужный нам в открывшемся окне - состояние Wifi соединения, тип параметра -чек бокс, делаем надпись я написал "Статус соединения", Вы можете написать что то свое. Сохраняемся. Точно также прописываем статус соединения с сервером MQTT. Я больше на главную страницу ничего не добавлял, но при желании Вы можете добавить нужную вам информацию

Умный дом Своими руками. Энергомонитор на PZEM-004T. Часть 3

Добавляем две страницы настроек щелкая по позиции меню "Добавить страницу", одну обзовем "Настройки MQTT", на другую будем выводить параметры WIFI. В тех параметрах, которые Вы будете изменять в значении тип прописываем - поле ввода. Например IP адрес у Вас был 192.168.1.20 а вы его изменили на 192.168.1.25 сохранились и перегрузили страницу. То по первому адресу веб интерфейса не будет. Вам придется зайти на страницу по новому адресу. Точно также как выше добавляете в них нужные вам данные. По шаблону интерфейса на канале Яндекс Дзен есть видео

Добавляем новую плату в нашем проекте. Заходим в правую колонку программы и в вкладке другие находим блок PZEM, который добавляем в основное поле. Открываем блок и ставим галочки напротив тех пунктов, с которых хотим получать данные. Также ставим галочку на вход сброса счетчика киловатт-часов. Выбираем UART порт. Можно выбрать серийный, но в таком случае про обновления по "воздуху" (WiFi) можно забыть. Поэтому выбираем SoftwareSerial и прописываем на каких pin Я прописал 8 и 7.

Блок PZEM настройка.
Блок PZEM настройка.

Добавляем вход для кнопки сброса, тип цифровой, ставим галочки включить подтягивающий резистор и защита от дребезга. В принципе блок нами настроен. Осталось настроить передачу с него информации. Создаем переменные для вывода информации по количеству выходов на блоке PZEM. У меня их 6, тип всех переменных Float, название прописываете как вам удобно, например Напряжение, Ток. Подсоединяем переменные к соответствующим выходам блока.

Кнопка сброса
Кнопка сброса
добавление переменных
добавление переменных
плата PZEM
плата PZEM

Создаем еще одну плату, на нее помещаем 6 пользовательских блоков MQTT ESP Pub версии 6.8 а также блок генератора. В блоке генератора в окне тип ставим симметричный мультивибратор, а в константе выставляем передавать данные раз в две секунды. На вход разрешения мультивибратора устанавливаем константу Boolean и ставим галочку напротив True. Выход генератора подсоединяем к входу Send всех пользовательских блоков. На плате PZEM копируем все переменные и переносим их на новую плату. Через блоки конвертации строк подсоединяем их к соответствующим входам Message пользовательских блоков. Должна получиться вот такая картина

Плата передачи данных
Плата передачи данных

Прописываем константы на входах Topic, например "/tok", "/power". На сервере MQTT создаем точно такие топики для приема и передачи информации. На этом настройка энергомонитора закончена.

Топики на сервере MQTT
Топики на сервере MQTT

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

Прием данных
Прием данных
вид сверху
вид сверху
вид на разъемы, Задняя панель была обработана наждачкой, такой же обработке подвеглись и ваковские разьемы. После чего при помощи термопистолеты были установлены на корпус
вид на разъемы, Задняя панель была обработана наждачкой, такой же обработке подвеглись и ваковские разьемы. После чего при помощи термопистолеты были установлены на корпус
Вид спереди
Вид спереди
Умный дом Своими руками. Энергомонитор на PZEM-004T. Часть 3

При желании можно подключить экран для вывода на него информации. На снимках выше собранное на заказ устройство. Для подключения трансформатора тока и питания использовал вот такие разъемы. Их можно использовать только в случае небольшой токовой нагрузки. На передню панель выведен разъем для кнопки сброса показаний. Само устройство будет располагаться в шкафу, а кнопка сброса будет выведена наружу для удобства эксплуатации. Светодиод показывает есть ли соединение с сервером MQTT. Корпус пластиковый ВК-11 размерами 110 х 89 х 34 мм Успехов Вам в освоении и изготовлении подобных устройств.