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 wirdssid=MQTTLab: Der Name des WLANshw_mode=gundchannel=6: Setzt den WLAN-Modus (2.4GHz) und den Kanalwpa=2,wpa_passphrase=...: Aktiviert WPA2-Verschlüsselungap_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önnendhcp-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.
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).
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.
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:
Menüpunkt: Configuration
Configure Module
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:
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¶
Um dieses Gerät zu schalten, sendet man:
Publish cmnd/test3/POWER ON
→ 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.