lehrkraefte:blc:informatik:ffprg2-2020:mqtt

This is an old revision of the document!


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.

  • 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

  • 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 ist unten
  // tu was
}
if (touchRead(27)<60) {
   // Tu was
}
  • lehrkraefte/blc/informatik/ffprg2-2020/mqtt.1599394989.txt.gz
  • Last modified: 2020/09/06 14:23
  • by Ivo Blöchliger