ESP32: http://alii.pub/67hfo2
BME280: http://alii.pub/5yjrsz
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
MQTT (англ. message queuing telemetry transport) — упрощённый сетевой протокол, работающий поверх TCP/IP, ориентированный на обмен сообщениями между устройствами по принципу издатель-подписчик.
Для чего мне все это нужно наверное спросите? Ведь есть ESPHome и я уже описывал как легко добавить датчик температуры, влажности и давления BME280 в ESPHome и Home Assistant в этой статье:
Подключение датчика температуры, влажности и давления bme280 в ESPHome и Home Assistant.
И будете правы, это реально очень простой способ. Но у меня есть 5-6 датчиков, которых нет в ESPHome. А в систему умного дома Home Assistant мне бы их хотелось добавить.
И к моему стыду, я скажу, что с MQTT не работал вообще никогда. За исключением короткого времени, когда готовил видео про оцифровку показаний с счетчиков с помощью ESP32-cam.
Так-вот, хотелось мне побольше разобраться с MQTT и на основе уже этого скетча ( отправки показаний с датчика BME280). Делать уже свои скетчи про другие датчики.
Итак, как датчик BME280 подключать к ESP32 думаю говорить не нужно. Подключается он по шине i2c. И у разных плат ESP32 эта шина находится в разных местах. Но все-же если нужно, то вот для примера одна из них:
Скетч и библиотеки можно скачать отсюда:
https://disk.yandex.ru/d/-wsPcp8R5eA6mQ
Но не все библиотека там имеются. Две еще нужно доставить.
А именно библиотеки самой BME280.
Заходим в Скетч->Подключить библиотеку->Менеджер библиотек и устанавливаем ее:
А вторая – это Adafruit Unified Sensor
Тут так-же заходим в Скетч->Подключить библиотеку->Менеджер библиотек и устанавливаем ее:
После этого нужно отредактировать скетч под себя. Я здесь опишу моменты которые нужно под себя отредактировать.
#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"
Здесь прописываются SSID и Пароль от ВАшей WI-fi сети.
#define MQTT_HOST IPAddress(192, 168, 1, XXX)
// For a cloud MQTT broker, type the domain name
//#define MQTT_HOST "example.com"
В первой строчке указываете ip адрес MQTT сервера. В моем случае это сервер Home Assistant. Если же у Вас какой-то сторонний MQTT сервер ( которых очень много). То раскомментируйте строчку //#define MQTT_HOST "example.com"
Ив ковычках впешите его адрес. Ну а первую строчку с ip адресом нужно закомментировать.
Ну и строчка:
mqttClient.setCredentials(“mqtt”, “mqtt”);
Здесь указываем логин и пароль от mqtt сервера. У меня он mqtt – логин и такой-же пароль.
Все, после этого загружаем код в ESP32 и после подключения к wi-fi сети и к серверу MQTT начнут публиковаться данные в топики:
“esp32/bme280/temperature” – Температура
“esp32/bme280/humidity” – Влажность
“esp32/bme280/pressure” – Давление
Естественно в скетче с 21 по 23 строчку они указаны и их можно поменять на свой лад. Главное их запомнить, так как на них мы будем подписываться, чтоб получать данные.
Если все прописали правильно и контроллер ESP32 связался с mqtt сервером, то в мониторе порта можем видеть как передаются данные. Выглядит это примерно так:
Теперь что касается Home Assistant. Там должен быть установлен Mosquitto брокер. Как его устанавливать описано у меня в статье тут:
Ну так вот, если мы зайдем в Интеграции и нажмем кнопку “Настроить” на интеграции core-mosquitto, то увидим следующее окно:
Где в графе Подписаться на топик, впишем топик показаний температуры esp32/bme280/temperature, нажмем кнопку “подписаться” и будем получать данные температуры.
Теперь можем создать специальные сенсоры, в которые будут записываться данные значения с MQTT.
Для этого зайдем в Configuration.yaml и в графе Sensor, добавим следующее:
- platform: "mqtt"
name: "bme280_temp"
state_topic: "esp32/bme280/temperature"
value_template: "{{ value }}"
unit_of_measurement: "C"
- platform: "mqtt"
name: "bme280_hum"
state_topic: "esp32/bme280/humidity"
value_template: "{{ value }}"
unit_of_measurement: "%"
- platform: "mqtt"
name: "bme280_pres"
state_topic: "esp32/bme280/pressure"
value_template: "{{ value }}"
unit_of_measurement: "mm"
Ну собственно тут описаны 3 сенсора соответствующие температуре, влажности и давлению с датчика BME280.
И сенсеры теперь в Home Assistant будут называться
sensor.bme280_pres
sensor.bme280_hum
sensor.bme280_temp
И при добавлении на карточку этих сенсеров, будем получать такие-же показания как и с любых других сенсеров.
На этом можно было бы и закончить. Но хочется немного рассказать еще про NODe-red:
Нам нужно добавить 3 блока mqtt in и guage. Выглядеть это все будет так:
Далее отредактируем блок MQTT следующим образом:
Ну а блок guag следующим образом:
Ну естественно в блоках Mqtt меняем топики под темературу, влажность и давление.
А в блоке guage меняем range от минимального значения, до максимального. И цветовую схему.
После этого соединяем блоки между собой, как показано тут:
И нажимаем кнопку “Развенуть”
После этого переходим по адресу:
http://серверHomeAssistant:1880/ui
И получаем следующее: