MQTT-Grundlagen
Beschreibung
Ich möchte hier die MQTT Grundlagen kurz und knapp darstellen.
MQTT „Message Queuing Telemetry Transport“ ist ein Nachrichtenprotokoll das die Kommunikation von Sensoren/Geräten untereinander ermöglicht. Im Mittelpunkt steht ein Nachrichtenbroker, der eingehende Nachrichten von Sensoren/Geräten annimmt, speichert und abfragenden Sensoren/Geräten diese Informationen zugänglich macht.
Der nachfolgende Code ist eine Beispiel-Implementation für ESP32.
MQTT Library
#include <PubSubClient.h>
MQTT Var Definition
//
// MQTT Broker
//
const char* mqtt_server = "MQTT Broker ip-Adresse";
//
// MQTT port
//
#define MQTTPort 1883
//
// MQTT User
//
const char* mqtt_user = "MQTT-User";
const char* mqtt_password = "MQTT-User-Passwort";
//
// MQTT Path
//
const char* mqtt_path = "MQTT-Path";
char mqtt_path_str[100];
MQTT Initialisierung
//
// MQTT Setup, Port, Callback
//
client.setServer(mqtt_server, MQTTPort);
client.setCallback(callback);
setup_reconnect_mqtt();
MQTT Callback
//
// MQTT Callback
//
void callback(char* topic, byte* message, unsigned int length)
{
//
// Message angekommen
//
Serial.printf("\n\nCallback Break ---> Message : %s = '",topic);
for (int i = 0; i < length; i++)
{
Serial.print((char)message[i]);
}
Serial.printf("'\n");
}
MQTT Setup
//
// MQTT Setup
//
void setup_reconnect_mqtt()
{
//
// Falls nicht verbunden, weiter versuchen
//
while (!client.connected())
{
Serial.print("Verbinden zu MQTT");
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str(), mqtt_user, mqtt_password))
{
Serial.println(" . MQTT verbunden");
}
else
{
Serial.print("Error, result=");
Serial.print(client.state());
Serial.println(" wiederholen in (5 sec)");
delay(5000);
}
}
client.loop();
}
MQTT in ESP32 Loop
//
//Loop
//
//
// Aktive Zeit in sec
//
int uptime=0;
void loop() {
..
setup_reconnect_mqtt();
..
//
// Beispiel Daten an MQTT Broker senden
//
uptime++;
Serial.printf("\nUptime = %d min\n\n",uptime);
char buffer[10];
client.publish(genmqtt_path("uptime"), itoa(uptime,buffer,10));
..