Главная > Умный дом > Вывод данных с Domoticz на ESP с OLED дисплеем

Вывод данных с Domoticz на ESP с OLED дисплеем


16 сентября 2019. Разместил: dimon
Все изображения кликабельны


Захотелось мне тут выводить данные температуры и влажности на какой-нибудь дисплей, чтобы выходя из дома сразу видеть какая температура на улице, не доставая телефон. Самый просто способ похоже использовать ESP8266 плюс дисплей - можно взять LCD 1602/1604/2004, но на мой взгляд более интересен вариант OLED SSD1306 128x64. Данный дисплей на али сейчас можно купить в разных размера - от 0,96" до 2,42". В наличии оказался только маленький, его мы и попробуем, а если все взлетит, то закажем побольше.

Чтобы не возиться с пустой ESP, не искать программатор, то построим эту систему на WEMOS D1 mini, которая уже имеет все необходимое, плюс на ней сразу распаян USB-UART преобразователь и ее можно довольно просто шить через обычный USB.

Так же в запасе дома оказались два датчика DHT22 и DS18B20 их мы тоже сразу добавим, еще едет BME280 - Bosch-евский датчик атмосферного давления, влажности и температуры, который мы добавим чуть позже.

В качестве прошивки ESP модуля мы будем использовать прошивку на конструкторе WiFi-IoT, что позволит не писать ее самим, а просто натыкать галок необходимых функций и быстро ее зашить в модуль, а все настройки будут осуществляться через Web-интерфейс.

Посмотрим какие галки (опции) нам нужны:

Опции WiFi-iot для работы с OLED дисплеем на ESP8266Опции WiFi-iot для работы с OLED дисплеем на ESP8266


Часть опций платная, но стоимость Pro версии всего 100р, меньше стоимости того же модуля Wemos, и на мой взгляд это разумное "вложение" денег winked

Перечислю их еще раз текстом с кратким пояснением:

* 1-wire DS18B20 - температурный датчик Dallas Semiconductor
* DHT 11/21/22 - датчик температуры и влажности DHT22
* BME280 - Bosch-евский датчик атмосферного давления, влажности и температуры

* narodmon.ru - возможность отправлять данные на проект народного мониторинга narodmon.ru
* MQTT клиент и MQTT JSON клиент - для связи модуля с Domoticz

* Время и NTP - синхронизация времени и даты на модуле с интернетом
* I2C сканер - обнаружение I2C устройств (DS18B20)
* Обновление OTA - возможность обновлять прошивку модуля через интернет, добавлять опции и функции
* Auto OTA - эта очень необходимая опция! Если у вас будет несколько устройств на WiFi-IoT, то при обновлении заливается последняя скомпилированная на сайте прошивка, и если вы последней компилировали прошивку для другого модуля, то зальется она. Функция Auto OTA позволяет "принудительно" запустить компиляцию прошивки привязанной в профиле именно для этого модуля ESP перед тем как ее обновить на модуле.
* Настройки по умолчанию - необходимо для подключения модуля у своей Wi-Fi сети.
* Interpreter - простой скриптовый язык для создания своей логики и математики

* OLED 128x64 - дисплей
* Конструктор строк - формирование своих строк
* Русский шрифт - русские символы

Далее компилируем прошивку и заливаем ее в модуль через usb - как скомпилировать, как привязать лицензию подробно написано в WIKI, там же смотрим как подключать все наши датчики и дисплей. После обобщения схема подключения получилась такая:

Схема подключения Wemos d1 mini + OLED SSD1306 + DS18B20 + DHT22Схема подключения Wemos d1 mini + OLED SSD1306 + DS18B20 + DHT22


После прошивки берем телефон или компьютер с WiFi и ищем сеть WiFi-IoT, подключаемся, браузером переходим на адрес http://192.168.4.1, там переходим на вкладку main веб интерфейса и подключаем ESP модуль к своей сети:

Настройка сети WiFi на прошивке WiFi-IoTНастройка сети WiFi на прошивке WiFi-IoT


Здесь мы указываем имя ESP, GMT зону, режим работы WiFi (=клиент), имя WiFi сети и пароль.
После перезапуска ESP модуля, он подключается к нашей WiFi сети, смотрим на роутере какой ip-адрес он получил (если мы не указали статичный ip) и заходим браузером на него.

Теперь в разделе Конструктор строк (Designer lines) задаем текст для line1 - это будет разделитель локальных данных ESP (датчиков подключенных напрямую к Wemos d1) и тех которые Domoticz будет выводить на дисплей:

Дизайнер линий WiFi-IoTДизайнер линий WiFi-IoT


Теперь идем в раздел Display, включаем его и настраиваем что будем выводить на OLED дисплей:

Включение OLED дисплея и настройка строк на WiFi-IoTВключение OLED дисплея и настройка строк на WiFi-IoT


в моем случае:
0 строка = текущее время
1 строка = время работы модуля
2 строка = данные DHT22
3 строка = данные DS18B20
4 строка = пустая
5 строка = разделитель (Line 1)
6 строка = пустая
7 строка = пустая
в строки 6-7 Домотикз будет выводить свои данные.

Теперь нужно написать скрипт в домотикз, который будет записывать в 6 и 7 строку данные.

Как это реализовать с помощью GET запросов описано в WIKI WiFi-IoT.

Идем в раздел Настройки - Дополнительно - События, создаем скрипт, тип dzVents, код скрипта ниже:


-- вывод показаний в ESP OLED

return {
   --active = true,   -- скрипт активен
	on = {
		-- timer = {'every 5 minutes'},       -- вызывает скрипт каждые 5 минут
		timer = {'every minute'},       -- вызывает скрипт каждую минуту
		},
	
	
	logging = {
	    level = domoticz.LOG_ERROR    -- пишем в log только ошибки
	},
	
	-- когда таймер выстрелил, выполним секцию execute:
	execute = function(domoticz)
	    
	        -- ip адрес ESP c OLED
	        local ip_esp = '192.168.1.111'
	        -- символ пробела для url
	        local probel = '%20'
	        -- символ пробела необходимо использовать потому что функция openURL 
	        -- домотикза не преобразует пробелы в нужный вид, и получается что
	        -- все что после пробела в урле просто отбрасывается
	        
	        
	    
	        -- датчики которые будем выводить 
	        local th_room = domoticz.devices(123)          --123    idx T&H Комната	Temp + Humidity
	        local th_street = domoticz.devices(125)          --125    idx T&H Улица Temp + Humidity
  
            -- вычленим данные из датчиков
            local th_room_value = domoticz.utils.round(th_room.temperature,1)..'°'..probel..th_room.humidity..'%'
            local th_street_value = domoticz.utils.round(th_street.temperature,1)..'°'..probel..th_street.humidity..'%'
            
            
            -- формируем url для обновления 6 строки текста OLED
            local url_6 = 'http://'..ip_esp..'/lcdmsg?st=6&font=0&txt=Комната'..probel..th_room_value
            
            -- формируем url для обновления 7 строки текста OLED
            local url_7 = 'http://'..ip_esp..'/lcdmsg?st=7&font=0&txt=Улица'..probel..probel..probel..th_street_value
            
            -- вывод в лог строки для проверки
            -- domoticz.log(url_6, domoticz.LOG_ERROR)
            
            -- выполняем url-ы = выводим на OLED дисплей данные
	        domoticz.openURL(url_6)
	        domoticz.openURL(url_7)
	    
       

    end
}


Вот так это выглядит на нашем OLED дисплее:

Вывод данных с Domoticz на ESP с OLED дисплеем

Вернуться назад