====== 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'' ===== Client ===== * 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. ===== Unser Server ===== * tech-lab.ch, Port 1883 (zur Zeit (noch) kein SSL, sorry). * Username, Passwort erforderlich (werden kommuniziert). ===== Erster Code und erste Aufgabe ===== 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. {{ :lehrkraefte:blc:informatik:ffprg2-2020: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 ===== Weitere Aufgaben und Ideen ===== ==== 7-Segment-Anzeige ==== * Stellen Sie die Zahl dar, die z.B. im topic ''ffprg20/hansli/zahl'' publiziert ist. Anstatt hansli verwenden Sie Ihren Vornamen. ==== Anderen ESP per Knopfdruck steuern ==== 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. ==== Temperatur, Helligkeit oder sonstigen Messwert publizieren ====