lehrkraefte:blc:informatik:ffprg2-2020:mqtt

MQTT

MQTT ist ein Protokoll, um zwischen IoT Geräten Daten via einen Server auszutauschen.

Daten können dort publiziert werden. Wenn sich dort ein client einträgt (subscribe) wird dieser bei einer Änderung benachrichtigt. Es ist also kein Polling (ständiges Nachfragen) nötig.

Die Publikation findet über eine Art Pfadangabe statt. Damit können die Daten organisiert werden. Z.B. ffprg20/ivo/wert

  • Wir werden hier MQTTfx verwenden: https://mqttfx.jensd.de/index.php/download
    • Auf den Laptops kann das Programm via Terminal durch Eingabe von mqttfx gestartet werden.
      • Hinweis: Das .deb-Packet installiert sich in /opt/MQTTfx/MQTTfx, ein symbolischer Link /usr/local/bin/mqttfx darauf wurde platziert.

Weitere Clients finden sich z.B. hier: https://www.hivemq.com/blog/seven-best-mqtt-client-tools/

Es gibt auch Apps für Android (und sicher auch iO$). Ich verwende auf Android MQTT Dash, womit sich auch gleich passende Interfaces definieren lassen.

Für iOS funktioniert MQTT Terminal Pro.

ACHTUNG Funktioniert nicht auf KSBG-Wild. St. Galler Wireless, tech-labc, mobile Daten sind ok.

  • tech-lab.ch, Port 1883 (zur Zeit (noch) kein SSL, sorry).
  • Username, Passwort erforderlich (werden kommuniziert).

Dieser Code übermittelt den Wert des intern verbauten Hall-Sensors (Magnetfeldmessung) auf das Topic ffprg20/ivo/hall.

Die “onboard led” wird je nach ffprg20/ivo/led ein- oder ausgeschaltet.

mqtt-first.zip ERRATA Es muss chipid & 0xffffffff heissen (und nicht &&, was ein boolean ergibt).

  • Entpacken Sie die Datei (inklusive Ordner) und öffenen Sie den Sketch mit der Arduino-IDE
  • Passen Sie die Datei secrets.h an (username und passwort für den MQTT-Server)
  • Laden Sie das Programm auf den ESP32.
  • Kontrollieren Sie die Ausgabe im Serial Monitor.
  • Starten Sie mqttfx (im Terminal) und verbinden Sie sich mit dem MQTT-Server
  • Publizieren Sie 1 oder 0 (ohne Zeilenumbruch!) im topic ffprg20/ivo/led mit mqttfx. Ihre LED sollte sich entsprechend ändern. (D.h. von allen ESP, die schon verbunden sind).
  • Studieren sie den Code
  • Stellen Sie die Zahl dar, die z.B. im topic ffprg20/hansli/zahl publiziert ist. Anstatt hansli verwenden Sie Ihren Vornamen.

Auf einem ESP soll ein Knopf gedrückt werden (Boot auf GPIO-0, Touch oder “normaler” Button), und damit auf einem anderen ESP eine Aktion ausgelöst werden (z.B. LED ein- oder ausschalten).

if (!digitalRead(0)) { // Boot-Knopf (oder anderer Druckknopf auf anderem Pin ist unten
  // tu was
}

Achtung: Das Auslesen der Knöpfe sollte nicht blockierend sein. Zudem muss eventuell Debouncing betrieben werden. Grundidee: status-Variablen mit Zustand und Zeitpunkt letzter Änderung.

// Touch-Fähige pins: 2,4,12,13,14,27,32,33
if (touchRead(2)<60) {
   // Tu was
}

Achtung: Das zuverlässige Auslesen der Touch-Pins ist nicht ganz einfach. Es empfiehlt sich, mehrere (z.B. 10) Messungen zu machen, bevor man eine Berührung wertet. Weiter gelten die gleichen Dinge wie für Druckknöpfe.

  • lehrkraefte/blc/informatik/ffprg2-2020/mqtt.txt
  • Last modified: 2020/09/11 16:41
  • by Ivo Blöchliger