Praxis

 

Praxis 20: ESP32 - Zugriff auf MQTT-Broker

 

Benötigtes Material:

  • ESP32 Dev Modul mit USB-Kabel
  • Breadboard
  • vier Kabelstück (männlich↔männlich)
  • fünf Kabelstücke (weiblich↔männlich)
  • vier Widerstände mit je 220 Ohm
  • je eine LED in rot, gelb, grün und blau

 

 

 

 

 

Damit ein MQTT-Broker angesteuert werden kann, kann die Bibliothek „MQTT“ verwendet werden. Derzeit ist die Version 2.5.2 die aktuelle. Diese Bibliothek sollte dem Projekt hinzugefügt werden oder in der IDE installiert werden.

In der nebenstehenden Schaltung sieht man die Verdrahtung der vier LEDs jeweils über die Widerstände mit den Pins des ESP verbunden (GPIO04-rot, GPIO00-gelb, GPIO02-grün und GPIO15-blau).

Die Farbe der Kabel muss nicht der der LEDs entsprechen. Dies wurde nur der Übersicht wegen so gewählt.

#include <Arduino.h>
/* -------------------------------------
    Praxis 20
    Nutzung des MQTT-Brokers 
    zum Schalten von vier LEDs
  -----------------------------------*/

#include <WiFi.h>
#include <MQTT.h>

const char* ssid = "Labornetz";
const char* password = "ITLabor2024!";
const char* mqtt_server = "172.24.100.10";
const int mqtt_port = 1883;
const char* mqtt_user = "";
const char* mqtt_password = "";

void callback(String &topic, String &payload);
void connect();

// LED Pin
const int ledPin1 = 4;
const int ledPin2 = 0;
const int ledPin3 = 2;
const int ledPin4 = 15;

void setup() {
  Serial.begin(115200);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  connect();
}

WiFiClient net;
MQTTClient client;

void loop() {
  if (!client.connected()) {
    connect();
  }
  client.loop();
}

void callback(String &topic, String &payload) { 
  Serial.print("Neue Nachricht im Topic: ");
  Serial.print(topic);
  Serial.print(". Nachricht: ");
  Serial.println(payload);
  if (topic == "esp32nxxxx/rot") {
    if(payload == "on"){
      digitalWrite(ledPin1, HIGH);
    } else if(payload == "off"){
      digitalWrite(ledPin1, LOW);
    }
  }
  if (topic == "esp32nxxxx/gelb") {
    if(payload == "on"){
      digitalWrite(ledPin2, HIGH);
    } else if(payload == "off"){
      digitalWrite(ledPin2, LOW);
    }
  }
  if (topic == "esp32nxxxx/gruen") {
    if(payload == "on"){
      digitalWrite(ledPin3, HIGH);
    } else if(payload == "off"){
      digitalWrite(ledPin3, LOW);
    }
  }
  if (topic == "esp32nxxxx/blau") {
    if(payload == "on"){
      digitalWrite(ledPin4, HIGH);
    } else if(payload == "off"){
      digitalWrite(ledPin4, LOW);
    }
  }
}
void connect() {
  WiFi.begin(ssid, password);
  Serial.print("checking wifi");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }
  Serial.print("\nconnecting...");
  client.begin(mqtt_server, mqtt_port, net);
  client.onMessage(callback);
  while (!client.connect("ESP32Clientxxxx")) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("\nconnected!");
  client.subscribe("esp32nxxxx/#", 0);
}

 

Aufgaben

  1. Bauen Sie die die Schaltung mit den LEDs auf einem Breadboard auf.
    Beachten Sie dabei die Polung der LEDs.
  2. Geben Sie den Sketch in die IDE ein.
  3. Fügen Sie die benötigte „MQTT“-Bibliothek zum Projekt hinzu, oder laden Sie sie in die IDE.
  4. Ersetzen Sie die Sequenz xxxx (Zeilen 51, 58, 65, 72, 90 und 95) durch eine eindeutige Zeichenfolge. Sprechen Sie sich dazu ggf. mit Ihren Klassenkammeraden ab. Dies ist nötig, da zum einen die Verbindung mit dem Broker eine eindeutige ClientID voraussetzt. Zum anderen sollten die Topics eindeutig sein, damit man jeweils seinen ESP über den Broker erreicht.
  5. Kompilieren und Übertragen Sie die Daten auf den ESP32. Achten Sie darauf, dass man beim ESP32 das Programmieren des Speichers durch Drücken des BOOT-Knopfes bestätigen muss.
  6. Prüfen Sie mit dem Seriellen Monitor bzw. Terminal die Verbindungsaufnahme Ihres ESP32 mit WLAN und MQTT-Broker. Achten Sie auf die richtige Baudrate.
  7. Starten Sie den MQTT-Explorer und stelle Verbindung zu dem Labor-MQTT-Broker her. (IP 172.16.100.13 keine Benutzer-Authentifikation)
  8. Erstellen Sie in einem für Ihren ESP32-Client passenden Topic den Wert „on“. Prüfen Sie, ob Ihr Mikrocontroller die LEDs entsprechend schaltet.