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));
..

Nach oben scrollen