Hochladen der ESP32-DHT11-Temperatur- und Luftfeuchtigkeitsdaten auf den MQTT-Server

Einführung

ESP32


Fügen Sie hier eine Bildbeschreibung ein

Klicken Sie zum Kauf auf das Bild

Die Module der ESP32-Serie integrieren Wi-Fi-, traditionelle Bluetooth- und Low-Power-Bluetooth-Funktionen und haben ein breites Einsatzspektrum: Wi-Fi unterstützt eine Vielzahl von Kommunikationsverbindungen und unterstützt auch die direkte Verbindung mit dem Internet über Router, während Bluetooth Benutzern dies ermöglicht Zur Verbindung mit Mobiltelefonen oder Rundfunkübertragungen erleichtert Bluetooth LE Beacon die Signalerkennung und kann schnell IoT-Projekte erstellen.
Bei diesem Experiment wurde das ESP32-WROOM-32-Entwicklungsboard verwendet, das Sensordaten über WLAN-Netzwerke auf den MQTT-Server hochlud.

DHT11


Fügen Sie hier eine Bildbeschreibung ein

Klicken Sie zum Kauf auf das Bild

Der digitale Temperatur- und Feuchtigkeitssensor DHT11 ist ein zusammengesetzter Temperatur- und Feuchtigkeitssensor mit kalibriertem digitalen Signalausgang. Der Sensor verwendet ein Widerstandsfeuchtigkeitssensorelement und ein NTC-Temperaturmesselement und ist über eine eindrahtige serielle Schnittstelle mit dem Mikrocontroller verbunden und entwickelt Stabilität erreichen. Zuverlässige Temperatur- und Feuchtigkeitsmessung.

Experiment

MQTT ist ein leichtes und flexibles Nachrichtenaustausch- und Datenübertragungsprotokoll für das Internet der Dinge. Der Zweck dieses Experiments besteht darin, DHT11 über ESP32 zu steuern und die Temperatur- und Feuchtigkeitsdaten von DHT11 auf den MQTT-Server hochzuladen, um eine Fernüberwachung zu erreichen.

Versuchsanleitung

Das Experiment erfordert den Einsatz eines MQTT-Servers. Es wäre eine Verschwendung, ihn selbst zu bauen oder ihn nur für Experimente zu kaufen. Im Internet finden Sie kostenlose und offene MQTT-Server, die für Experimente völlig ausreichen. Bei diesem Experiment wird der kostenlose MQTT-Server in der EMQ X Cloud verwendet. Daher müssen Sie die MQTT X-Software auf Ihrem Computer installieren und die DHT11- und ESP32-Entwicklungsplatinen vorbereiten.

Verdrahtung

ESP32 DHT11
5V V
GND G
GPIO5 D

MQTT-Server

Verbindung herstellen

Verbinden Sie zunächst den MQTT-Server mit dem Computer. Laden Sie zunächst das
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
MQTT

  1. Sie können einen beliebigen englischen Namen eingeben
  2. Die Client-ID wird standardmäßig ignoriert
  3. Serveradresse: Broker.emqx.io
  4. Hafen: 1883
  5. Benutzername: emqx
  6. Passwort: öffentlich
  7. Konfigurieren Sie einfach andere Parameter wie im Bild gezeigt.
    Klicken Sie nach dem Ausfüllen der Konfiguration auf „Verbinden“.

Abonnement hinzufügen

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie ein Abonnement mit dem Thema TEST/DHT11 hinzu, füllen Sie es aus und klicken Sie auf OK.
Fügen Sie hier eine Bildbeschreibung ein

Nachdem die Benutzeroberfläche wie oben gezeigt aussieht, wurde das Abonnement hinzugefügt und das obige Abonnementthema kann von Ihnen selbst geändert werden.
Zu diesem Zeitpunkt ist MQTT X konfiguriert und „für die spätere Verwendung reserviert“.

ESP32 steuert DHT11

Da der Hauptzweck dieses Artikels darin besteht, DHT11-Daten auf den MQTT-Server hochzuladen, wird der DHT11-Treiber nicht im Detail erläutert. Stattdessen rufen wir direkt die Bibliothek „DHT Sensor Library For ESPx“ auf und erstellen einen einzelnen Auftrag, um mehr darüber zu erfahren diese Bibliothek. Implementieren Sie zunächst ESP32, um DHT11 anzusteuern und die Temperatur und Luftfeuchtigkeit über die serielle Schnittstelle auszudrucken.
Im Folgenden finden Sie den Treibercode, der durch Aufrufen der Bibliothek „DHT Sensor Library For ESPx“ geschrieben wurde

#include <Arduino.h>
#include "DHTesp.h" 

/** Initialize DHT sensor 1 */
DHTesp dht;

int dhtPin = 5;

/** Data from sensor 1 */
TempAndHumidity dhtData;

void setup() {
    
    
	Serial.begin(115200);
  
	// Initialize temperature sensor 1
	dht.setup(dhtPin, DHTesp::DHT11);

}

void loop() {
    
    
  dhtData = dht.getTempAndHumidity();  // Read values from sensor 1
	Serial.println("Temp: " + String(dhtData.temperature,2) + "'C Humidity: " + String(dhtData.humidity,1) + "%");
  delay(1000);

} 

Ergebnisse ausgeben
Fügen Sie hier eine Bildbeschreibung ein

ESP32 sendet Daten an den MQTT-Server

In diesem Experiment werden die beiden Bibliotheken „PubSubClient“ und „WiFi“ zur Kommunikation zwischen ESP32 und dem MQTT-Server verwendet.
Für die im Code definierten WLAN- und MQTT-Parameter erfordert die Codetransplantation die Änderung Ihrer eigenen WLAN- und MQTT-Parameter.

const char *ssid="xxxxxxxx";	//WIFI名称
const char *password="xxxxxxxx";	//WIFI密码

const char *mqtt_broker = "xxxxxxxx";     //MQTT地址
const char *topic = "xxxxxxxx";               //MQTT主题
const char *mqtt_username = "xxxxxxxx";             //MQTT用户名
const char *mqtt_password = "xxxxxxxx";           //MQTT用户密码
const int mqtt_port = xxxxxxxx;                     //MQTT端口

Verwenden Sie mit dem oben definierten WLAN-Namen und Passwort die folgende WIFI-Initialisierungsanweisung, um ESP32 mit WIFI zu verbinden.

 WiFi.begin(ssid,password);

Die Funktionen setServer und connect in der Bibliothek „PubSubClient“ stellen durch Eingabe der MQTT-Serveradresse, der Portnummer und des Benutzerkontos eine Verbindung zum MQTT-Server her

client.setServer(mqtt_broker,mqtt_port);  //MQTT地址,端口号
client.connect(client_id.c_str(),mqtt_username,mqtt_password);

Thema abonnieren

client.subscribe(topic);  //订阅topic这个主题

Senden Sie dann Daten über die Veröffentlichungsfunktion an das Thema, auf das der MQTT-Server geantwortet hat.

client.publish(topic,"I AM ESP32"); 

Zum Thema „TEST/DHT11“ des MQTT-Servers

Die Verbindung ist erfolgreich und „I AM ESP32“ wird in das Topic „TEST/DHT11“ des MQTT-Servers hochgeladen.

#include <WiFi.h>
#include <PubSubClient.h>

//WIFI 参数配置
const char *ssid="JS-TEST";
const char *password="YXDZ@2022";

//MQTT 参数配置
const char *mqtt_broker = "broker.emqx.io";     //MQTT地址
const char *topic = "TEST/DHT11";               //MQTT主题
const char *mqtt_username = "emqx";             //MQTT用户名
const char *mqtt_password = "public";           //MQTT用户密码
const int mqtt_port = 1883;                     //MQTT端口

WiFiClient espClient; //创建WIFI对象
PubSubClient client(espClient);


void setup() {
    
    
  // put your setup code here, to run once:
  //初始化串口
  Serial.begin(115200);
  //初始化wifi,连接wifi
  WiFi.begin(ssid,password);
  //检测是否连上wifi,如果没连上一直循环,连上了往下运行
  while(WiFi.status()!=WL_CONNECTED)
  {
    
    
    delay(500);
    Serial.println("Connecting to WIFI ...");
    }
    Serial.println("Connecting to WIFI network");
    //连接到MQTT服务器
    client.setServer(mqtt_broker,mqtt_port);  //MQTT地址,端口号
    //进入循环开始连接MQTT服务器,连上了就退出循环,没连上就一直循环连接
    while(!client.connected())//判断是否连上MQTT服务器
    {
    
    
      //client_id赋值加上设备mac
      String client_id = "esp32-client-";
      client_id +=String(WiFi.macAddress());
      Serial.printf("the client %s connects to public mqtt broker\n",client_id.c_str());
      if(client.connect(client_id.c_str(),mqtt_username,mqtt_password))  //连接MQTT服务器
      {
    
    
        Serial.println("Public emqx mqtt broker connected");    //连接成功,打印信息
        }
        else
        {
    
    
          Serial.print("failed with state");//连接失败
          Serial.print(client.state()); //重新连接
          delay(2000);
          }
      }

  client.publish(topic,"I AM ESP32"); //发送信息到MQTT服务器
  client.subscribe(topic);  //订阅topic这个主题
}


void loop() {
    
    
  // put your main code here, to run repeatedly:
  client.loop();
}

MQTT-Empfangssituation Fügen Sie hier eine Bildbeschreibung ein
Das Thema „TEST/DHT11“ empfing „I AM ESP32“ und der serielle Port gab „Public emqx mqtt-Broker verbunden“ zurück, was darauf hinweist, dass die Verbindung zum MQTT-Server erfolgreich war.
Laden Sie als Nächstes die Temperatur- und Feuchtigkeitsdaten von DHT11 in das Thema „TEST/DHT11“ hoch.

Laden Sie Temperatur- und Luftfeuchtigkeitsdaten hoch

Das Obige hat das Programm für EPS32 zum Ansteuern von DHT11 und auch das Programm für ESP32 zum Senden von Daten an den MQTT-Server fertiggestellt. Das Hochladen von DHT11-Daten auf den MQTT-Server entspricht der Integration der beiden Programme.
Da es sich um einen kostenlos entwickelten MQTT-Server handelt, müssen Sie auf die Häufigkeit des Hochladens von Daten achten. Wenn Sie häufig Daten auf den Server hochladen, ist er möglicherweise deaktiviert. Die Daten werden hier also alle 10 Sekunden hochgeladen.
Integrierter Code

#include <Arduino.h>
#include "DHTesp.h"
#include <WiFi.h>
#include <PubSubClient.h>

DHTesp dht11;
int dhtPin = 5;
TempAndHumidity sensorData;

//WIFI 参数配置
const char *ssid="JS-TEST";
const char *password="YXDZ@2022";

//MQTT 参数配置
const char *mqtt_broker = "broker.emqx.io";     //MQTT地址
const char *topic = "TEST/DHT11";               //MQTT主题
const char *mqtt_username = "emqx";             //MQTT用户名
const char *mqtt_password = "public";           //MQTT用户密码
const int mqtt_port = 1883;                     //MQTT端口


WiFiClient espClient; //创建WIFI对象
PubSubClient client(espClient);



void setup() {
    
    
  // put your setup code here, to run once:
  //初始化串口
  Serial.begin(115200);
  //初始化DHT11
  dht11.setup(dhtPin, DHTesp::DHT11);
  //初始化wifi,连接wifi
  WiFi.begin(ssid,password);
  //检测是否连上wifi,如果没连上一直循环,连上了往下运行
  while(WiFi.status()!=WL_CONNECTED)
  {
    
    
    delay(500);
    Serial.println("Connecting to WIFI ...");
    }
    Serial.println("Connecting to WIFI network");
    //连接到MQTT服务器
    client.setServer(mqtt_broker,mqtt_port);  //MQTT地址,端口号
    client.setCallback(callback);   //连接回传信息
    //进入循环开始连接MQTT服务器,连上了就退出循环,没连上就一直循环连接
    while(!client.connected())//判断是否连上MQTT服务器
    {
    
    
      //client_id赋值加上设备mac
      String client_id = "esp32-client-";
      client_id +=String(WiFi.macAddress());
      Serial.printf("the client %s connects to public mqtt broker\n",client_id.c_str());
      if(client.connect(client_id.c_str(),mqtt_username,mqtt_password))  //连接MQTT服务器
      {
    
    
        Serial.println("Public emqx mqtt broker connected");    //连接成功,打印信息
        }
        else
        {
    
    
          Serial.print("failed with state");//连接失败
          Serial.print(client.state()); //重新连接
          delay(2000);
          }
      }

  client.publish(topic,"ESP32_HDT11"); //发送信息到MQTT服务器
  client.subscribe(topic);  //订阅topic这个主题
}


void callback(char *topic, byte *payload, unsigned int length)
{
    
    
  Serial.print("Message arrived in topic:");
  Serial.println(topic);  //打印主题名称
  Serial.print("message:");zhuyi
  //打印MQTT返回的信息
  for(int i=0;i<length;i++)
  {
    
    
    Serial.print((char)payload[i]);
    }
  Serial.println();
  Serial.println("--------------------");
  
  
  }


void loop() {
    
    
  // put your main code here, to run repeatedly:
 // client.loop();
 
  sensorData = dht11.getTempAndHumidity();
  Serial.println("Temp: " + String(sensorData.temperature,2) + "'C Humidity: " + String(sensorData.humidity,1) + "%");
  client.publish(topic,(("Temp: " + String(sensorData.temperature,2) + "'C Humidity: " + String(sensorData.humidity,1) + "%").c_str())); //发送信息到MQTT服务器
  delay(10000);

}

Experimentelle Ergebnisse

Fügen Sie hier eine Bildbeschreibung ein
Aus dem Bild oben können Sie erkennen, dass nach dem Öffnen der seriellen Schnittstelle der Arduino IDE die Daten synchron an das Thema „TEST/DHT11“ gesendet werden. Experiment abgeschlossen.

Supongo que te gusta

Origin blog.csdn.net/qq_42250136/article/details/134381293
Recomendado
Clasificación