2. Projekt 2 – Untersuchung einer Kommuniktation zwischen ESP32 via MQTT

2.1. Notwendige Schritte

  • Konfiguration von: hostapd, DHCP-Server, MQTT_Broker

  • Einrichtung von Tasmota auf ESP32 und folgend MQTT auf Tasmota

2.2. Einrichtung des eigenen WLANs mit MQTT-Broker

Ziel dieses Versuchs ist es, ein separates WLAN bereitzustellen, in dem ESP32-Geräte (z. B. mit Tasmota geflasht) miteinander über das MQTT-Protokoll reden können. Ein eigenes WLAN lässt sich gezielt überwachen, ohne dass anderer Netzwerkverkehr stört. Die Kommunikation erfolgt über einen gehosteten Mosquitto-Broker auf Kali-Linux. Dies ermöglicht einen gezielten Mitschnitt von MQTT-Kommunikation.

2.2.1. Benötigte Softwarepakete

Für die Realisierung des Versuchs werden drei zentrale Softwarekomponenten benötigt, die direkt über die Paketverwaltung von Kali Linux installiert werden können. Diese Komponenten ermöglichen den Aufbau eines lokalen Netzwerks, die automatische Zuweisung von IP-Adressen an Geräte sowie die Kommunikation über das MQTT-Protokoll.

Erklärung der eingesetzten Tools:

  • hostapd: Das Tool „hostapd“ (Host Access Point Daemon) ermöglicht es, aus einem WLAN-Adapter einen vollwertigen Access Point (AP) zu machen. Damit können sich andere Geräte, wie ESP32-Boards, direkt mit dem System verbinden. [Quelle](https://linux.die.net/man/8/hostapd)

  • dnsmasq: „dnsmasq“ ist ein kompakter DHCP- und DNS-Server. In diesem Setup wird er ausschließlich für DHCP verwendet, also für die Vergabe von IP-Adressen an die verbundenen Geräte. [Quelle](https://linux.die.net/man/8/dnsmasq)

  • mosquitto: Der Mosquitto-Broker stellt die MQTT-Kommunikation bereit. MQTT ist ein leichtgewichtiges Publish/Subscribe-Protokoll, das ideal für IoT-Geräte geeignet ist. Mosquitto ist Open Source und bietet umfangreiche Konfigurationsmöglichkeiten für Sicherheit, Topic-Management und Logging. [Quelle](https://mosquitto.org/)

Installation der Pakete:

sudo apt update
sudo apt install hostapd dnsmasq mosquitto

2.2.2. Konfiguration von hostapd

Erstelle eine Konfigurationsdatei unter ~/hostapd.conf. Diese steuert, wie der Access Point funktioniert:

interface=wlan0
ssid=MQTTLab
channel=6
hw_mode=g
driver=nl80211
wpa=2
wpa_passphrase=12345678
auth_algs=1
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
ap_isolate=0

Erklärung wichtiger Parameter:

  • interface=wlan0: Der WLAN-Adapter, der als Access Point genutzt wird

  • ssid=MQTTLab: Der Name des WLANs

  • hw_mode=g und channel=6: Setzt den WLAN-Modus (2.4GHz) und den Kanal

  • wpa=2, wpa_passphrase=...: Aktiviert WPA2-Verschlüsselung

  • ap_isolate=0: Erlaubt Kommunikation zwischen verbundenen Clients (z. B. ESPs)

Um das WLAN zu konfigurieren werden folgende Befehle benötigt:

sudo ip link set wlan0 down
sudo ip addr flush dev wlan0
sudo iw dev wlan0 set type __ap
sudo ip link set wlan0 up
sudo ip addr add 192.168.10.1/24 dev wlan0

Starte Access Point:

sudo hostapd ~/hostapd.conf

2.2.3. DHCP-Server einrichten

Erstelle eine Datei ~/dnsmasq.conf mit:

interface=wlan0
dhcp-range=192.168.10.100,192.168.10.200,12h
dhcp-option=3,192.168.10.1
dhcp-option=6,8.8.8.8
port=0
log-dhcp

Erklärung:

  • dhcp-range: IP-Adressbereich, den Clients bekommen können

  • dhcp-option=3: Gateway (unser Kali-PC mit 192.168.10.1)

  • dhcp-option=6: DNS (hier Google DNS, 8.8.8.8)

  • log-dhcp: Aktiviert Logging, um DHCP-Vorgänge live zu sehen

Starte DHCP-Server (im neuen Terminal):

sudo dnsmasq -d -C ~/dnsmasq.conf

2.2.4. MQTT-Broker konfigurieren

Mosquitto muss manuell angepasst werden. Öffne /etc/mosquitto/mosquitto.conf und stelle sicher:

listener 1883
allow_anonymous true

Danach starten:

sudo systemctl start mosquitto

Überprüfen mit:

sudo systemctl status mosquitto

Der Broker lauscht nun auf Port 1883. Die ESP32-Geräte können sich verbinden.

2.3. Tasmota auf ESP32 einrichten

Tasmota ist eine Open-Source-Firmware für ESP-Geräte, die sich besonders gut für MQTT-Anwendungen eignet. Sie kann über einen Webinstaller oder über Kommandozeilen-Tools wie esptool.py installiert werden. In diesem Beispiel wurde der einfachere Weg über [tasmota.github.io](https://tasmota.github.io/docs/) genutzt.

Während des Flashens muss der ESP32 in den Bootloader-Modus versetzt werden. Dies geschieht durch gleichzeitiges Drücken von Reset- und Boot-Taster beim Anschließen über USB.

Tasmota Oberfläche auf ESP32

Nach dem Flash startet der ESP32 im Access-Point-Modus. Man verbindet sich über WLAN mit dem temporären Netzwerk (z. B. tasmota-XXXX) und ruft im Browser die Konfigurationsseite unter http://192.168.4.1 auf. Dort gibt man die Zugangsdaten zum WLAN „MQTTLab“ ein (SSID und Passwort).

AP-Log des Servers

2.3.1. Modulkonfiguration: LED verbinden und testen

Nach dem Reboot und erfolgreicher Verbindung zum Access Point bekommt der ESP32 vom DHCP-Server eine IP-Adresse.

DHCP-Log des Servers

Diese IP kann man sich z. B. im Terminal über dnsmasq anschauen oder per Ping scannen. Im Browser öffnet man dann die Weboberfläche des Geräts (z. B. http://192.168.10.114).

Dann folgt:

  1. Menüpunkt: Configuration

  2. Configure Module

  3. GPIO14 (oder ein anderer benutzter Pin) auf Relay1 setzen

Die LED wird folgendermaßen angeschlossen:

  • Lange Seite der LED → Vorwiderstand (z. B. 220 Ohm) → GPIO14

  • Kurze Seite → GND

Erscheint nun auf der Mainpage ein Toggle Button und leuchtet beim Drücken die LED, ist der ESP richtig eingerichtet. Nun kann mit der MQTT-Einrichtung weitergemacht werden.

2.4. MQTT-Konfiguration in Tasmota

In diesem Abschnitt wird erklärt, wie MQTT auf einem Tasmota-Gerät konfiguriert wird. Hier wird exemplarisch gezeigt, wie das bei einem einzelnen ESP32 erfolgt. Bei mehreren Geräten muss man entsprechend mehrere Topics und Clientnamen definieren.

2.4.1. Grundeinstellungen

In Configuration > Configure MQTT werden folgende Parameter gesetzt:

Feld | Beispiel |
——— | —————– |
Host | 192.168.10.1 |
Port | 1883 |
Client | tasmota1 |
Topic | tasmota1 |
FullTopic | %prefix%/%topic%/ |

Jedes Gerät muss einen eindeutigen Client- und Topic-Namen haben, damit Nachrichten richtig zugeordnet werden können.

2.4.2. Nachrichten senden und empfangen

Zum Testen der MQTT-Kommunikation auf dem Kali-System kann das Tool mosquitto_pub verwendet werden. Dieses gehört zum Mosquitto-Paket und erlaubt es, manuell MQTT-Nachrichten an einen bestimmten Topic auf dem Broker zu senden. Damit lassen sich Nachrichten simulieren, als kämen sie von einem Gerät. Es erlaubt auch den Live-Mitschnitt der einzelnen Nachrichten der anderen Clients.

LED ein- und ausschalten:

mosquitto_pub -h 192.168.10.1 -t cmnd/tasmota1/POWER -m ON
mosquitto_pub -h 192.168.10.1 -t cmnd/tasmota1/POWER -m OFF

Nachrichtenüberwachung:

mosquitto_sub -h 192.168.10.1 -t "#" -v

[Quelle](https://mosquitto.org/)

2.5. Erweiterte MQTT-Nutzung mit Tasmota

2.5.1. Kommunikation zwischen zwei ESP32

ESP A (Topic: tasmota1) kann ESP B (Topic: tasmota2) direkt schalten, über die Konsole die man unter Tools findet:

Publish cmnd/tasmota2/POWER ON

2.5.2. Beispiel: Gerät test3 über MQTT schalten

MQTT-Konfiguration eines Clients

Um dieses Gerät zu schalten, sendet man:

Publish cmnd/test3/POWER ON
MQTT Befehl zum schalten

→ Die LED an diesem Gerät sollte sich einschalten.

2.6. Abbau und Zurücksetzen

Wenn der Versuch fertig ist oder man den Rechner neu starten will, ist es sinnvoll, das System wieder in den Ursprungszustand zu bringen. Dazu gehören das Beenden aller Dienste sowie das Zurücksetzen des WLAN-Interfaces. So wird verhindert, dass der Access Point beim nächsten Systemstart automatisch weiterläuft oder dass der Rechner keine normale WLAN-Verbindung mehr herstellen kann.

2.6.1. Dienste beenden

sudo pkill hostapd
sudo pkill dnsmasq
sudo systemctl stop mosquitto

2.6.2. WLAN-Interface zurücksetzen

sudo ip link set wlan0 down
sudo ip addr flush dev wlan0
sudo iw dev wlan0 set type managed
sudo ip link set wlan0 up

2.6.3. NetworkManager reaktivieren

sudo systemctl enable NetworkManager
sudo systemctl start NetworkManager

2.7. Fazit

In diesem Projekt konnten mit Hilfe von dnsmasq und hostapd ein eigenes Netzwerk erstellen werden. Dieses Netzwerk wurde benutzt um mithilfe von einem MQTT-Broker, von Mosquitto, in einer isolierten Wlan-Umgebung eine Verbindung und Kommunikation zwischen zwei ESP32-Geräten aufzubauen. Die LED-Schaltung diente als ein praktischer Beweis für die Verbindung. Dabei haben wir Tasmota als Firmware benutzt um die Einrichtung und Konfiguration zu vereinfachen, da diese eine Weboberfläche bietet. Durch den Broker konnte die ganze Kommunikation mitgeschnitten und analysiert werden.