Получение и вывод данных о температуре и влажности

В этой статье мы рассмотрим как получать значения температуры и влажности с датчика DHT11 и передавать их в систему Node Red через MQTT брокер. Этот проект очень прост, и сделать его сможет любой, нужно только немного времени и материалов. Мне было интересно получать данные о температуре и влажности, которые будут выводиться на экран телефона или компьютера, подключенного к локальной сети, и поэтому я использовал контроллер ESP32 и датчик DHT11.

Для начала нужно было написать код для датчика. Я писал код в программе Visual Studio Code на языке C++. Для того, чтобы контроллер работал, нужно подключить 2 библиотеки: для подключения к MQTT (EspMQTTClient) и библиотеку датчика (DHT). В целом код получился небольшой и довольно простой:

#include <Arduino.h>
#include <EspMQTTClient.h>//Подключение библиотеки для подключения к MQTT
#include <DHT.h> //Подключение библиотеки для датчика
#include <Adafruit_sensor.h>
#include "Timer.h" // Подключаем таймер

#define DHTPIN 2 
#define DHTTYPE DHT11

const int dT{10000};  //частота опроса датчиков

DHT dht(DHTPIN, DHTTYPE);
Timer timer(dT);
String message = "";

EspMQTTClient client1(
  "Имя Wi-fi",
  "Пароль Wi-fi",
  "Адрес MQTT",
  "Имя пользователя",
  "Пароль пользователя",
  "Имя устройства"
);

void onConnectionEstablished() //При подключении к MQTT вызывается эта функция(её можно найти в описании библиотеки, когда вы будете её устанавливать
{
  client1.publish("outside/start", "This is a message from ESP32");
}

void setup(){
  dht.begin();
}

void loop(){
  client1.loop();
  if(timer.getTimer()){
    timer.setTimer();

    float t = dht.readTemperature();
    float h = dht.readHumidity();

    message = String(t);
    client1.publish("outside/temp", message.c_str());
    message = String(h);
    client1.publish("outside/hum", message.c_str());
  }
}

Эта программа опрашивает датчик с интервалом в 10 сек. и вызывает функцию передачи данных в MQTT.

Когда код для датчика был написан и данные с датчика отправлялись в MQTT, нужно было сделать так, чтобы все данные о температуре и влажности выводились на экран. Для этого я использовал локальный Node-RED на своем устройстве (в моем случае компьютере), и сделал простую схему для вывода данных с MQTT.

В узле fuction я объявил 2 переменные temp и hum, для сохранения в хранилище flow , которым в дальнейшем я буду присваивать данные получаемые через MQTT. После этого я подключаюсь к MQTT с помощью узла MQTT In, и получаю данные о температуре и влажности. Затем я присваиваю эти значения переменным temp и hum соответственно, и вывожу эти данные в Node-RED Dashboard с помощью узлов Gauge и Chart. Результат:

В итоге я получил систему, которая с помощью датчика получает данные о температуре и о влажности, и выводит эти данные в Node-RED Dashboard. Сохраненные данные можно использовать для ответов на запросы от других устройств или для вычисления первой производной, резкое изменение которой сигнализирует о нештатной ситуации.