ESP32 MQTT – Публикация показаний температуры и влажности DHT11/DHT22 (Arduino IDE)

Узнайте, как публиковать показания температуры и влажности с датчика DHT11 или DHT22 через MQTT с ESP32 на любую платформу, поддерживающую MQTT, или в любой MQTT-клиент. В качестве примера мы будем публиковать показания датчика в Node-RED Dashboard, а ESP32 будет запрограммирован с помощью Arduino IDE.

ESP32 MQTT Публикация DHT22 или DHT11 показаний датчика Arduino IDE

Рекомендуемое чтение: Что такое MQTT и как он работает

Обзор проекта

На следующей диаграмме показан общий обзор проекта, который мы создадим.

DHT11/DHT22 публикация показаний Node-Red MQTT обзор проекта
  • ESP32 запрашивает показания температуры и влажности у датчика DHT11 или DHT22;

  • Показания температуры публикуются в топике esp32/dht/temperature;

  • Показания влажности публикуются в топике esp32/dht/humidity;

  • Node-RED подписан на эти топики;

  • Node-RED получает показания датчика и отображает их на индикаторах (gauges);

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

Предварительные требования

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

Arduino IDE

Мы будем программировать ESP32 с помощью Arduino IDE, поэтому убедитесь, что у вас установлен аддон ESP32.

MQTT-брокер

Установка Mosquitto MQTT брокера Raspberry Pi

Для использования MQTT вам нужен брокер. Мы будем использовать Mosquitto broker, установленный на Raspberry Pi. Прочитайте How to Install Mosquitto Broker on Raspberry Pi.

Вы можете использовать любой другой MQTT-брокер, включая облачный MQTT-брокер. Мы покажем, как это сделать в коде далее.

Если вы не знакомы с MQTT, обязательно прочитайте наш вводный урок: Что такое MQTT и как он работает.

Библиотеки MQTT

Для использования MQTT с ESP32 мы будем использовать библиотеку Async MQTT Client Library.

Установка библиотеки Async MQTT Client

  1. Нажмите здесь, чтобы скачать библиотеку Async MQTT client. В папке «Загрузки» должен появиться .zip файл

  2. Распакуйте .zip файл, и вы получите папку async-mqtt-client-master

  3. Переименуйте папку из async-mqtt-client-master в async_mqtt_client

  4. Переместите папку async_mqtt_client в папку библиотек вашей Arduino IDE

  5. Наконец, перезапустите Arduino IDE

Альтернативно, вы можете перейти в Sketch > Include Library > Add .ZIP library и выбрать только что скачанную библиотеку.

Установка библиотеки Async TCP

Для использования MQTT с ESP также нужна библиотека Async TCP.

  1. Нажмите здесь, чтобы скачать библиотеку Async TCP client. В папке «Загрузки» должен появиться .zip файл

  2. Распакуйте .zip файл, и вы получите папку AsyncTCP-master

  3. Переименуйте папку из AsyncTCP-master в AsyncTCP

  4. Переместите папку AsyncTCP в папку библиотек вашей Arduino IDE

  5. Наконец, перезапустите Arduino IDE

Альтернативно, вы можете перейти в Sketch > Include Library > Add .ZIP library и выбрать только что скачанную библиотеку.

Библиотеки датчика DHT

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

  1. Откройте Arduino IDE и перейдите в Sketch > Include Library > Manage Libraries. Должен открыться Library Manager.

  2. Найдите «DHT» в строке поиска и установите библиотеку DHT от Adafruit.

Установка библиотеки Adafruit DHT
  1. После установки библиотеки DHT от Adafruit введите «Adafruit Unified Sensor» в строке поиска. Прокрутите вниз, чтобы найти библиотеку, и установите её.

Установка библиотеки Adafruit Unified Sensor driver

После установки библиотек перезапустите Arduino IDE.

Чтобы узнать больше о датчике температуры DHT11 или DHT22, прочитайте наше руководство: ESP32 с датчиком температуры и влажности DHT11/DHT22 используя Arduino IDE

Необходимые компоненты

Для этого руководства вам понадобятся следующие компоненты:

Вы можете использовать ссылки выше или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!

Схема подключения

Подключите DHT11 или DHT22 к ESP32, как показано на следующей схеме, с выводом данных, подключённым к GPIO 4.

Схема подключения DHT11 DHT22 к ESP32

Примечание: если у вас датчик DHT на плате расширения, он имеет только три вывода и встроенный подтягивающий резистор на выводе 2, поэтому вам не нужно подключать резистор. Достаточно подключить VCC, данные и GND.

В этом примере мы подключаем вывод данных DHT к GPIO 4. Однако вы можете использовать любой другой подходящий цифровой пин.

Узнайте, как использовать GPIO ESP32, из нашего руководства: Справочник по выводам ESP32: Какие GPIO следует использовать?

Код

Скопируйте следующий код в вашу Arduino IDE. Чтобы он заработал, вам нужно вставить ваши сетевые данные, а также данные MQTT-брокера.

/*
  Rui Santos & Sara Santos - Random Nerd Tutorials
  Complete project details at https://RandomNerdTutorials.com/esp32-mqtt-publish-dht11-dht22-arduino/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include "DHT.h"
#include <WiFi.h>
extern "C" {
  #include "freertos/FreeRTOS.h"
  #include "freertos/timers.h"
}
#include <AsyncMqttClient.h>

#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"

// Raspberry Pi Mosquitto MQTT Broker
#define MQTT_HOST IPAddress(192, 168, 1, XXX)
// For a cloud MQTT broker, type the domain name
//#define MQTT_HOST "example.com"
#define MQTT_PORT 1883

// Temperature MQTT Topics
#define MQTT_PUB_TEMP "esp32/dht/temperature"
#define MQTT_PUB_HUM  "esp32/dht/humidity"

// Digital pin connected to the DHT sensor
#define DHTPIN 4

// Uncomment whatever DHT sensor type you're using
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);

// Variables to hold sensor readings
float temp;
float hum;

AsyncMqttClient mqttClient;
TimerHandle_t mqttReconnectTimer;
TimerHandle_t wifiReconnectTimer;

unsigned long previousMillis = 0;   // Stores last time temperature was published
const long interval = 10000;        // Interval at which to publish sensor readings

void connectToWifi() {
  Serial.println("Connecting to Wi-Fi...");
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
}

void connectToMqtt() {
  Serial.println("Connecting to MQTT...");
  mqttClient.connect();
}

void WiFiEvent(WiFiEvent_t event) {
  Serial.printf("[WiFi-event] event: %d\n", event);
  switch(event) {
    case ARDUINO_EVENT_WIFI_STA_GOT_IP:
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
      connectToMqtt();
      break;
    case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
      Serial.println("WiFi lost connection");
      xTimerStop(mqttReconnectTimer, 0); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi
      xTimerStart(wifiReconnectTimer, 0);
      break;
  }
}

void onMqttConnect(bool sessionPresent) {
  Serial.println("Connected to MQTT.");
  Serial.print("Session present: ");
  Serial.println(sessionPresent);
}

void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) {
  Serial.println("Disconnected from MQTT.");
  if (WiFi.isConnected()) {
    xTimerStart(mqttReconnectTimer, 0);
  }
}

/*void onMqttSubscribe(uint16_t packetId, uint8_t qos) {
  Serial.println("Subscribe acknowledged.");
  Serial.print("  packetId: ");
  Serial.println(packetId);
  Serial.print("  qos: ");
  Serial.println(qos);
}
void onMqttUnsubscribe(uint16_t packetId) {
  Serial.println("Unsubscribe acknowledged.");
  Serial.print("  packetId: ");
  Serial.println(packetId);
}*/

void onMqttPublish(uint16_t packetId) {
  Serial.print("Publish acknowledged.");
  Serial.print("  packetId: ");
  Serial.println(packetId);
}

void setup() {
  Serial.begin(115200);
  Serial.println();

  dht.begin();

  mqttReconnectTimer = xTimerCreate("mqttTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(connectToMqtt));
  wifiReconnectTimer = xTimerCreate("wifiTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(connectToWifi));

  WiFi.onEvent(WiFiEvent);

  mqttClient.onConnect(onMqttConnect);
  mqttClient.onDisconnect(onMqttDisconnect);
  //mqttClient.onSubscribe(onMqttSubscribe);
  //mqttClient.onUnsubscribe(onMqttUnsubscribe);
  mqttClient.onPublish(onMqttPublish);
  mqttClient.setServer(MQTT_HOST, MQTT_PORT);
  // If your broker requires authentication (username and password), set them below
  //mqttClient.setCredentials("REPlACE_WITH_YOUR_USER", "REPLACE_WITH_YOUR_PASSWORD");
  connectToWifi();
}

void loop() {
  unsigned long currentMillis = millis();
  // Every X number of seconds (interval = 10 seconds)
  // it publishes a new MQTT message
  if (currentMillis - previousMillis >= interval) {
    // Save the last time a new reading was published
    previousMillis = currentMillis;
    // New DHT sensor readings
    hum = dht.readHumidity();
    // Read temperature as Celsius (the default)
    temp = dht.readTemperature();
    // Read temperature as Fahrenheit (isFahrenheit = true)
    //temp = dht.readTemperature(true);

    // Check if any reads failed and exit early (to try again).
    if (isnan(temp) || isnan(hum)) {
      Serial.println(F("Failed to read from DHT sensor!"));
      return;
    }

    // Publish an MQTT message on topic esp32/dht/temperature
    uint16_t packetIdPub1 = mqttClient.publish(MQTT_PUB_TEMP, 1, true, String(temp).c_str());
    Serial.printf("Publishing on topic %s at QoS 1, packetId: %i", MQTT_PUB_TEMP, packetIdPub1);
    Serial.printf("Message: %.2f \n", temp);

    // Publish an MQTT message on topic esp32/dht/humidity
    uint16_t packetIdPub2 = mqttClient.publish(MQTT_PUB_HUM, 1, true, String(hum).c_str());
    Serial.printf("Publishing on topic %s at QoS 1, packetId %i: ", MQTT_PUB_HUM, packetIdPub2);
    Serial.printf("Message: %.2f \n", hum);
  }
}

Исходный код

Как работает код

Следующий раздел импортирует все необходимые библиотеки.

#include "DHT.h"
#include <WiFi.h>
extern "C" {
  #include "freertos/FreeRTOS.h"
  #include "freertos/timers.h"
}
#include <AsyncMqttClient.h>

Укажите ваши сетевые данные в следующих строках.

#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"

Вставьте IP-адрес Raspberry Pi, чтобы ESP32 подключился к вашему брокеру.

#define MQTT_HOST IPAddress(192, 168, 1, 106)

Если вы используете облачный MQTT-брокер, вставьте доменное имя брокера, например:

#define MQTT_HOST "example.com"

Определите порт MQTT.

#define MQTT_PORT 1883

Температура и влажность будут публиковаться в следующих топиках:

#define MQTT_PUB_TEMP "esp32/dht/temperature"
#define MQTT_PUB_HUM  "esp32/dht/humidity"

Определите GPIO, к которому подключён вывод данных датчика DHT. В нашем случае он подключён к GPIO 4.

Раскомментируйте тип используемого датчика DHT. В нашем примере мы используем DHT22.

//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22     // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

Инициализируйте датчик DHT на ранее определённом пине и типе.

DHT dht(DHTPIN, DHTTYPE);

Переменные temp и hum будут хранить значения температуры и влажности с датчика DHT22.

float temp;
float hum;

Создайте объект AsyncMqttClient с именем mqttClient для управления MQTT-клиентом и таймеры для переподключения к MQTT-брокеру и роутеру при потере соединения.

AsyncMqttClient mqttClient;
TimerHandle_t mqttReconnectTimer;
TimerHandle_t wifiReconnectTimer;

Затем создайте вспомогательные переменные таймера для публикации показаний каждые 10 секунд. Вы можете изменить время задержки в переменной interval.

unsigned long previousMillis = 0;  // Stores last time temperature was published
const long interval = 10000;       // Interval at which to publish sensor readings

Примечание: датчики DHT11 и DHT22 имеют низкую частоту считывания. Вы можете запрашивать показания DHT11 только раз в секунду, или раз в две секунды для DHT22.

Функции MQTT: подключение к Wi-Fi, подключение к MQTT и события Wi-Fi

Мы не добавляли комментарии к функциям, определённым в следующем разделе кода. Эти функции поставляются с библиотекой Async Mqtt Client. Названия функций говорят сами за себя.

Например, функция connectToWifi() подключает ваш ESP32 к роутеру:

void connectToWifi() {
  Serial.println("Connecting to Wi-Fi...");
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
}

Функция connectToMqtt() подключает ваш ESP32 к MQTT-брокеру:

void connectToMqtt() {
  Serial.println("Connecting to MQTT...");
  mqttClient.connect();
 }

Функция WiFiEvent() отвечает за обработку событий Wi-Fi. Например, после успешного подключения к роутеру и MQTT-брокеру она выводит IP-адрес ESP32. С другой стороны, если соединение потеряно, она запускает таймер и пытается переподключиться.

void WiFiEvent(WiFiEvent_t event) {
  Serial.printf("[WiFi-event] event: %d\n", event);
  switch(event) {
    case ARDUINO_EVENT_WIFI_STA_GOT_IP:
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
      connectToMqtt();
      break;
    case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
      Serial.println("WiFi lost connection");
      xTimerStop(mqttReconnectTimer, 0);
      xTimerStart(wifiReconnectTimer, 0);
      break;
  }
}

Функция onMqttConnect() выполняется после начала сессии с брокером.

void onMqttConnect(bool sessionPresent) {
  Serial.println("Connected to MQTT.");
  Serial.print("Session present: ");
  Serial.println(sessionPresent);
}

Функции MQTT: отключение и публикация

Если ESP32 теряет соединение с MQTT-брокером, вызывается функция onMqttDisconnect, которая выводит соответствующее сообщение в Serial Monitor.

void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) {
  Serial.println("Disconnected from MQTT.");
  if (WiFi.isConnected()) {
    xTimerStart(mqttReconnectTimer, 0);
  }
}

Когда вы публикуете сообщение в MQTT-топик, вызывается функция onMqttPublish(). Она выводит идентификатор пакета в Serial Monitor.

void onMqttPublish(uint16_t packetId) {
  Serial.println("Publish acknowledged.");
  Serial.print("  packetId: ");
  Serial.println(packetId);
}

По сути, все эти функции, которые мы только что упомянули, являются callback-функциями. Поэтому они выполняются асинхронно.

setup()

Теперь перейдём к setup(). Инициализируйте датчик DHT.

dht.begin();

Следующие две строки создают таймеры, которые позволят переподключиться как к MQTT-брокеру, так и к Wi-Fi, в случае потери соединения.

mqttReconnectTimer = xTimerCreate("mqttTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(connectToMqtt));
wifiReconnectTimer = xTimerCreate("wifiTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(connectToWifi));

Следующая строка назначает callback-функцию, чтобы при подключении ESP32 к Wi-Fi выполнялась функция WiFiEvent() для вывода описанных ранее деталей.

WiFi.onEvent(WiFiEvent);

Наконец, назначьте все callback-функции. Это означает, что эти функции будут выполняться автоматически при необходимости. Например, когда ESP32 подключается к брокеру, автоматически вызывается функция onMqttConnect() и так далее.

mqttClient.onConnect(onMqttConnect);
mqttClient.onDisconnect(onMqttDisconnect);
//mqttClient.onSubscribe(onMqttSubscribe);
//mqttClient.onUnsubscribe(onMqttUnsubscribe);
mqttClient.onPublish(onMqttPublish);
mqttClient.setServer(MQTT_HOST, MQTT_PORT);

Аутентификация брокера

Если ваш брокер требует аутентификации, раскомментируйте следующую строку и вставьте свои учётные данные (имя пользователя и пароль).

mqttClient.setCredentials("REPlACE_WITH_YOUR_USER", "REPLACE_WITH_YOUR_PASSWORD");

Наконец, подключитесь к Wi-Fi.

connectToWifi();

loop()

В loop() вы создаёте таймер, который позволяет получать новые показания температуры и влажности с датчика DHT и публиковать их в соответствующем топике каждые 10 секунд.

unsigned long currentMillis = millis();
// Every X number of seconds (interval = 10 seconds)
// it publishes a new MQTT message
if (currentMillis - previousMillis >= interval) {
  // Save the last time a new reading was published
  previousMillis = currentMillis;
  // New DHT sensor readings
  hum = dht.readHumidity();
  // Read temperature as Celsius (the default)
  temp = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  //temp = dht.readTemperature(true);

Узнайте больше о получении показаний с датчиков DHT11 или DHT22: ESP32 с датчиком температуры и влажности DHT11/DHT22 используя Arduino IDE.

Публикация в топики

Для публикации показаний в соответствующие MQTT-топики используйте следующие строки:

uint16_t packetIdPub1 = mqttClient.publish(MQTT_PUB_TEMP, 1, true, String(temp).c_str());
uint16_t packetIdPub2 = mqttClient.publish(MQTT_PUB_HUM, 1, true, String(hum).c_str());

По сути, используйте метод publish() объекта mqttClient для публикации данных в топик. Метод publish() принимает следующие аргументы в указанном порядке:

  • MQTT-топик (const char*)

  • QoS (uint8_t): качество обслуживания – может быть 0, 1 или 2

  • retain flag (bool): флаг сохранения

  • payload (const char*) – в данном случае полезная нагрузка соответствует показаниям датчика

QoS (качество обслуживания) – это способ гарантировать доставку сообщения. Может быть одного из следующих уровней:

  • 0: сообщение будет доставлено один раз или не доставлено вовсе. Подтверждение сообщения отсутствует. Нет возможности дублирования сообщений;

  • 1: сообщение будет доставлено как минимум один раз, но может быть доставлено более одного раза;

  • 2: сообщение всегда доставляется ровно один раз;

  • Узнайте больше о MQTT QoS.

Загрузка кода

С включённым Raspberry Pi и запущенным MQTT-брокером Mosquitto загрузите код в ваш ESP32.

Откройте Serial Monitor на скорости 115200 бод, и вы увидите, что ESP32 начинает публиковать сообщения в ранее определённых топиках.

ESP32 публикация MQTT DHT11 DHT22 температура влажность Serial Monitor

Настройка Node-RED Dashboard

ESP32 публикует показания температуры каждые 10 секунд в топики esp32/dht/temperature и esp32/dht/humidity. Теперь вы можете использовать любой дашборд, поддерживающий MQTT, или любое другое устройство, поддерживающее MQTT, для подписки на эти топики и получения показаний.

В качестве примера мы создадим простой поток (flow) с использованием Node-RED для подписки на эти топики и отображения показаний на индикаторах.

Если у вас не установлен Node-RED, следуйте этим руководствам:

Когда Node-RED запущен на вашем Raspberry Pi, перейдите по IP-адресу Raspberry Pi, добавив :1880.

http://raspberry-pi-ip-address:1880

Должен открыться интерфейс Node-RED. Перетащите два узла MQTT in и два узла gauge в поток.

ESP32 DHT11 DHT22 Arduino IDE

Нажмите на узел MQTT и отредактируйте его свойства.

Свойства узла MQTT In ESP32 публикация температуры и влажности Node-RED Flow

Поле Server относится к MQTT-брокеру. В нашем случае MQTT-брокером является Raspberry Pi, поэтому установлено значение localhost:1883. Если вы используете облачный MQTT-брокер, вам следует изменить это поле.

Укажите топик, на который хотите подписаться, и QoS. Предыдущий узел MQTT подписан на топик esp32/dht/temperature.

Нажмите на другой узел MQTT in и отредактируйте его свойства с тем же сервером, но для другого топика: esp32/dht/humidity.

Нажмите на узлы gauge и отредактируйте их свойства для каждого показания. Следующий узел настроен для показаний температуры. Отредактируйте другой узел chart для показаний влажности.

Настройка индикатора ESP32 температура влажность Node-RED Flow

Соедините ваши узлы, как показано ниже:

ESP32 MQTT публикация температуры и влажности Node-RED Flow

Наконец, разверните ваш поток (нажмите кнопку в правом верхнем углу).

Кнопка Deploy Node-RED

Альтернативно, вы можете перейти в Menu > Import и скопировать следующее в ваш Clipboard для создания потока Node-RED.

[{"id":"5a45b8da.52b0d8","type":"mqtt in","z":"b01416d3.f69f38","name":"","topic":"esp32/dht/temperature","qos":"1","datatype":"auto","broker":"8db3fac0.99dd48","x":300,"y":60,"wires":[["3042e15e.80a4ee"]]},{"id":"3042e15e.80a4ee","type":"ui_gauge","z":"b01416d3.f69f38","name":"","group":"37de8fe8.46846","order":2,"width":0,"height":0,"gtype":"gage","title":"Temperature","label":"ºC","format":"{{value}}","min":0,"max":"40","colors":["#00b500","#f7df09","#ca3838"],"seg1":"","seg2":"","x":590,"y":60,"wires":[]},{"id":"8ff168f0.0c74a8","type":"mqtt in","z":"b01416d3.f69f38","name":"","topic":"esp32/dht/humidity","qos":"1","datatype":"auto","broker":"8db3fac0.99dd48","x":290,"y":140,"wires":[["29251f29.6687c"]]},{"id":"29251f29.6687c","type":"ui_gauge","z":"b01416d3.f69f38","name":"","group":"37de8fe8.46846","order":2,"width":0,"height":0,"gtype":"gage","title":"Humidity","label":"%","format":"{{value}}","min":"30","max":"100","colors":["#53a4e6","#1d78a9","#4e38c9"],"seg1":"","seg2":"","x":580,"y":140,"wires":[]},{"id":"8db3fac0.99dd48","type":"mqtt-broker","z":"","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"37de8fe8.46846","type":"ui_group","z":"","name":"DHT","tab":"53b8c8f9.cfbe48","order":1,"disp":true,"width":"6","collapse":false},{"id":"53b8c8f9.cfbe48","type":"ui_tab","z":"","name":"Home","icon":"dashboard","order":2,"disabled":false,"hidden":false}]

Исходный код потока

Демонстрация

Перейдите по IP-адресу вашего Raspberry Pi, добавив :1880/ui.

http://raspberry-pi-ip-address:1880/ui

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

ESP32 MQTT публикация температуры и влажности Node-RED Dashboard

Вот и всё! Ваша плата ESP32 публикует показания температуры и влажности DHT в Node-RED через MQTT.

Заключение

MQTT – это отличный протокол связи для обмена небольшими объёмами данных между устройствами. В этом руководстве вы узнали, как публиковать показания температуры и влажности с датчика DHT с помощью ESP32 в различные MQTT-топики. Затем вы можете использовать любое устройство или платформу домашней автоматизации для подписки на эти топики и получения показаний.

Вместо датчика DHT11 или DHT22 вы можете использовать любой другой датчик, например датчик температуры DS18B20 или датчик BME280:

Если вы хотите узнать больше об ESP32, посмотрите наши ресурсы:

Спасибо за чтение.


Источник: Rui Santos & Sara Santos – Random Nerd Tutorials