Все изображения кликабельны
Захотелось мне тут выводить данные температуры и влажности на какой-нибудь дисплей, чтобы выходя из дома сразу видеть какая температура на улице, не доставая телефон. Самый просто способ похоже использовать 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Часть опций платная, но стоимость Pro версии всего 100р, меньше стоимости того же модуля Wemos, и на мой взгляд это разумное "вложение" денег
Перечислю их еще раз текстом с кратким пояснением:
* 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После прошивки берем телефон или компьютер с WiFi и ищем сеть
WiFi-IoT, подключаемся, браузером переходим на адрес http://192.168.4.1, там переходим на вкладку
main веб интерфейса и подключаем ESP модуль к своей сети:
Настройка сети WiFi на прошивке WiFi-IoTЗдесь мы указываем имя ESP, GMT зону, режим работы WiFi (=клиент), имя WiFi сети и пароль.
После перезапуска ESP модуля, он подключается к нашей WiFi сети, смотрим на роутере какой ip-адрес он получил (если мы не указали статичный ip) и заходим браузером на него.
Теперь в разделе
Конструктор строк (
Designer lines) задаем текст для
line1 - это будет разделитель локальных данных ESP (датчиков подключенных напрямую к Wemos d1) и тех которые Domoticz будет выводить на дисплей:
Дизайнер линий WiFi-IoTТеперь идем в раздел
Display, включаем его и настраиваем что будем выводить на OLED дисплей:
Включение 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 дисплее: