<- Bild 1: Der ESP32 ist kompatibel mit der Arduino IoT Cloud.
Überwachen – messen - automatisieren mit der Arduino IoT Cloud
Das Internet der Dinge ist einer der bestimmenden Trend der letzten Jahre. Sensoren kommunizieren mit entfernten Datensammlern, die Messdaten aufbereiten und visualisieren. Dank der Arduino IoT Cloud funktioniert das auch mit einigen Arduino-Platinen und Fremdfabrikaten. Hier eine kleine Spielerei mit Bits und Bytes und einer Datenwolke – mit nur ein paar Zeilen selbst geschriebenen Codes.
Mit den Arduinos kann man eine Menge Ideen realisieren, ohne tief in die Programmierung einzusteigen. Das ist der Zweck: Kreative – und sind das nicht auch Funkamateure – sollen sich auf ihre Kreativität konzentrieren. Die Programmierung geschieht eher nebenbei und soll für jeden Fachfremden machbar sein. Um den Anwendungsbereich der Arduinos breiter aufzustellen und letztlich auch industrielle Kunden anzusprechen, wird ein Online-Editor und eine Cloud aus dem Boden gestampft. Nun ist es möglich, einen Sketch mit dem Online-Editor zu verfassen und in der Cloud zu speichern. Das Installieren der Arduino-IDE entfällt damit. Mir persönlich gefällt das nicht gut – ich programmiere lieber auf dem eigenen PC und speichere die Sketche lokal. <- Bild 2: Einloggen bei Arduino ermöglicht den Zugriff auf die IoT Cloud und den Arduino Webeditor.
Interessanter als den Webeditor empfinde ich die Arduino IoT Cloud zur Visualisierung von Daten. Ausgehend von einer kleinen Hardware funktioniert das so: Ein Arduino wird mit einigen Sensoren bestückt und sendet die Daten beispielsweise per WLAN zum lokalen DSL-Router und dieser weiter über das Internet zu einem Server – zur Arduino IoT Cloud. Anhand verschiedener übermittelter Kennungen (Codes) erfolgt eine Zuordnung zwischen der vom Anwender angelegten Anzeigenfläche (engl.: dashboard) und der vom Arduino übertragenen Variablen. Anhand einer Zuordnung zwischen den Variablen aus dem Sketch und den auf dem Dashboard platzierten Anzeigeelementen (widges) „weiß“ der Server welches Anzeigeelement wie zu animieren ist. Anzeigeelemente sind Schalter, LED, analoge Anzeige (gauge) und weitere (Bild 8) Wird ein Schalter auf dem Dashboard betätigt, bewirkt dies – sofern programmiert – auf der Arduino-Platine eine Aktion: eine LED leuchtet oder ein Relais zieht an. Zur Betrachtung des Dashboard reicht ein PC mit einem Webbrowser aus. Für unterwegs auf dem Mobiltelefon gibt es eine App mit der Bezeichnung Arduino IoT Cloud Remote. Die Steuerung des Arduinos und die Betrachtung der Messwerte sind somit auf dem Smartphone unterwegs überall in der Welt, wo es den Zugang zum Internet gibt, ungehindert möglich.
Die Auswahl der Hardware
Der Kommunikationsweg zwischen Sensoren – angeschlossen an der Arduino-Platine und der Cloud kann auf mehreren Wegen erfolgen: Es stehen WLAN, LoRaWAN und das Mobilfunknetz zur Auswahl. Dem entsprechend sind die Arduinos zu wählen:
Diese Arduino-Platinen sind für WLAN geeignet: MKR 1000 WiFi MKR WiFi 1010 Nano RP2040 Connect Nano 33 IoT Portenta H7
Steht am Ort der Sensoren kein WLAN zur Verfügung, kann das LoRaWAN-Netzwerk eine mögliche Lösung sein. Es handelt sich um ein Netzwerk, dessen Gateways über das Land verteilt sind und in das sich Sensoren per Funk mittels The Things Stack [1] einklinken können. Über einen Server gelangen die Daten schließlich zur Arduino IoT Cloud. Diese beiden Arduino-Platinen unterstützen diesen Weg.
MKR WAN 1300 MKR WAN 1310
Die Verbindung über LoRaWAN wird für Low-Power-Projekte sowohl in abgelegenen als auch in städtischen Gebieten empfohlen, wo Wi-Fi/WLAN oder andere gängige Kommunikationswege nicht verfügbar sind. Die Arduinos MKR WAN 1300/1310 sind mit einem LoRa-Funkmodul ausgestattet und verfügen über einen Anschluss für eine Antenne. Mit der richtigen stromsparenden Konfiguration kann die Arduino-Platine monatelang mit einer einzigen Batterie Daten an die Cloud senden.
GSM-Boards: Diese Arduinos verfügen über die Fähigkeit zur Kommunikation über ein Mobilfunknetz und benötigen eine SIM-Karte eines Mobilfunkanbieters.
MKR GSM 1400 MKR NB 1500
Eine Verbindung über Mobilfunknetze kann in abgelegenen Gebieten, in denen es kein Wi-Fi/WLAN gibt oder bei ortveränderlichen Projekten in Betracht gezogen werden. Darüber hinaus unterstützt die Arduino IoT Cloud auch Nicht-Arduino-Platinen wie Mikrocontroller-Platinen auf der Basis des ESP8266 und des ESP32. Für letzteren habe ich mich entschieden, weil er in der Mikcontroller-Grabbelkiste vorhanden war. Da der ESP32 über ein WLAN-Modul verfügt, wurde dieser Weg präferiert. Im Gegensatz zu den Arduinos erfolgt die Übertragung zur Cloud unverschlüsselt.
Bild 3: Ein Thing wurde angelegt.
Bild 4: Ein Device wurde angelegt und mit dem übergeordneten Thing verbunden.
Fangen wir an!
Die Arduino- oder ESP-Platine ist vorhanden, als erster Schritt wird bei [2] ein Arduino-Konto eingerichtet. Dazu werden Geburtsdatum, E-Mail-Adresse, Benutzername und Passwort abgefragt. Im eigenen Postfach landet eine E-Mail mit der Aufforderung zur Bestätigung der Anmeldung. Danach ist es möglich, sich bei Arduino [2] einzuloggen. Über das Neun-Punkte-Menü gelangt man zu IoT Cloud. Dort angekommen, legt man zuerst ein Thing fest. Man könnte Thing als Geräte- oder Projektname beschreiben, denn innerhalb eines Thing legt man die Art der Kommunikation, die verwendete Hardware und die auszutauschenden Variablen sowie das Aussehen des Dashnoards fest. Alle in einem Thing getätigten Angaben werden im Hintergrund zu einem Arduino-Sketch verarbeitet. Geben Sie Ihrem ersten Thing eine Bezeichnung. Legen Sie darin ein Device an und wählen die verwendete Mikrocontroller-Hardware aus. Handelt es sich um eine Platine mit WLAN-Unterstützung, fragt man Sie unter anderem nach den Zugangsdaten zum eigenen WLAN. (Diese Daten wollte ich Arduino nicht mitteilen – sie sind privat und geheim - und habe die Eingabefelder mit falschen Informationen ausgefüllt. Später besteht die Möglichkeit, den Arduino Sketch auf den eigenen PC zu laden und mit der lokalen Arduino-IDE zu bearbeiten. Erst dann trug ich reale Zugriffsdaten in den Sketch ein.)
Bild 5: Editieren einer Variable, Teil 1: Vergabe von Bezeichnung und Datentyp.
Bild 6: Editieren einer Variable, Teil 2: Eigenschaften der Variable.
Ist das Device definiert und mit dem Thing verbunden (assoziiert), legt man die Variablen fest, die im Dashboard grafisch präsentiert werden sollen. Dazu definiert man Bezeichnung und Datentyp jeder Variable. Weiterhin bestimmt man, on die Variable im Sketch nur gelesen oder zusätzlich verändert werden darf und ob die Datenübertragung der Variable nur bei einer Veränderung des Wertes oder in definierten Zeitintervallen erfolgt. (Bilder 5, 6). Anhand dieser Informationen werden im Hintergrund die Variablen im Sketch eingetragen.
Nachdem wir die Variablen, Geräte und Netzwerkeinstellungen konfiguriert haben, können wir mit der Programmierung unseres Gerätes beginnen! Den generierten Sketch finden Sie auf der Registerkarte Sketch. Diese Datei besitzt die gleiche Struktur wie eine typische .ino-Datei, aber mit zusätzlichem Code, um die Verbindung zu Ihrem Netzwerk und zur Cloud herzustellen. Jedes Mal, wenn Sie eine Variable erstellen, für die die Lese- und Schreibberechtigung aktiviert ist, wird eine Funktion am Ende des Sketches generiert. Jedes Mal, wenn sich diese Variable ändert, wird der Code innerhalb dieser Funktion ausgeführt! Das bedeutet, dass wir den größten Teil des Codes aus der Loop()-Schleife herauslassen können – der Code wird nur bei Bedarf ausgeführt. Die Aufgabe des Anwenders ist es lediglich, den Variablen Werte zuzuweisen. Der Code befindet sich noch im IOT-Cloud-Editor, um ihn in den „großen“ Webeditor zu kopieren, wählen wie den Button Upload. Dort steht er dann wie jeder andere Sketch zur Verfügung. (Ich arbeite nicht mit dem Webeditor, daher habe ich ihn auf meinen PC herunter geladen, die Bibliothek ArduinoIoTCloud installiert und weitere Änderungen lokal getätigt. Das betrifft in meinem Fall insbesondere die WLAN-Zugangsdaten.)
<- Bild 7: Ein Beispiel für ein Dashboard: Mit dem Schalter knipst man die LED an bzw. aus. Anzeigeinstrument und Chart sind an die Variable random_value gebunden.
Dashboard erzeugen
Was noch fehlt, ist die Visualisierung. Dashboards sind visuelle Benutzeroberflächen für die Interaktion mit Ihren Boards über die Arduino IoT Cloud, und Sie können verschiedene Setups einrichten, je nachdem, was Ihr IoT-Projekt benötigt. Sie greifen auf Dashboards zu, indem Sie auf die Registerkarte Dashboards oben in der Arduino IoT Cloud klicken. Mit einem Klick auf Create new dashboard öffnen wir den Dashboard-Editor. Darin erzeugen wir die Benutzeroberfläche für unser Projekt, bestehend aus einigen Bedien- und Anzeigeelementen, widgets genannt. Es sind die grafische Repräsentation unserer zuvor erzeugten Variablen. Es stehen zahlreiche Elemente zur Verfügung, wie die Bild 8 zeigt.
Bild 8: Auf einem Dashboard sind allerlei Anzeigeelemente möglich, hier eine Auswahl. Quelle: Arduino.cc
<- Bild 9: Eigenschaften eines Anzeigeelementes, hier der LED-Status.
Für jedes auf dem Dashboard platzierte Bedien- oder Anzeigeelement wird eine der zuvor festgelegten Variablen zugewiesen. Damit ist dieses Widget mit dieser Variable verbunden und visualisiert deren Werte. Ändert sich der Wert der Variable im Sketch, ändert sich die Visualisierung dieses Bedien- bzw. Anzeigeelements. Andererseits ist es möglich, über einen Mausklick auf einen Schalter, Taster etc. eine LED oder ein Relais auf der Platine ein- bzw. auszuschalten und vom Dashboard ausgehend Aktionen auszulösen.
Mit Smartphone und App
Das Dashboard ist nach einem Login bei Arduino über das Internet mit jedem Browser aufrufbar. Für mobile Geräte wie ein Tablet-PC lässt sich die Ansicht der Anzeigeelemente auf eine mobile Ansicht umschalten. Dann werden die Anzeigen untereinander positioniert. Für Smartphones gibt es darüber hinaus eine App, für Androit-Phones lädt man im Play-Store die App Arduino IoT Cloud Remote.
Es geht noch viel mehr
In meiner kleinen Bastelei mit der IoT-Cloud habe ich mich darauf beschränkt, einen mit dem Arduino erzeugten Zufallswert an das Dashboard zu senden und dort in einem virtuellen Zeigerinstrument und parallel dazu als Graphen darzustellen. Vom Dashboard aus lässt sich z. B. eine LED auf der Platine schalten. Neben der LED schaltet auch ein Relais. Das funktioniert gut und mit nur geringer Verzögerung von wenigen hundert Millisekunden zwischen Mausklick und Reaktion der Hardware.
Mit der IoT-Cloud ist mehr möglich: Mit Webhooks senden Sie automatisierte Nachrichten an andere Dienste oder empfangen von ihnen. Beispielsweise können Sie ein Webhook dazu nutzen, um eine Benachrichtigung zu erhalten, wenn sich eine Eigenschaft Ihres Gerätes verändert. Zu diesem Zweck gibt es Plattformen von Drittanbietern, die die Eigenschaften Ihrer Arduino Cloud-Projekte mit der gewünschten Auslöseaktion verknüpfen. Unter [5] zeigt Arduino in einem Tutorial am Beispiel des Dienstes IFTTT (Kurzform für: If This Then That), wie man einen Webhook einrichtet und testet. Dazu wird auf dem Dashboard ein Messenger-Widget platziert. Weitere mögliche Dienste sind Zapier und die Google Services.
Bild 10: Wenn man den generierten Sketch auf den eigenen PC herunterlädt und lokal bearbeitet, ist die Bibliothek ArduinoIoTCloud zu installieren.
Bild 11: Der auf den eigenen PC geladene Sketch kann komplettiert und anschließend kompiliert werden.
<- Bild 12: Wählt man den ESP32 als Hardware, gelten diese Hardware-Einstellungen. Der COM-Port variiert.
Interessant für Besitzer einer Amazon-Alexa ist es, die Arduino-Platine über Sprachbefehle zu steuern. Dazu wird bei Alexa ein sog. Skill installiert, der Alexa also neue Fähigkeiten verliehen. Alexa verbindet sich mit der Arduino IoT Cloud, um mit Ihr zu interagieren und den Status z.B. von Sensoren mitzuteilen. Mögliche Sprachbefehle für den Funkamateur wären beispielsweise „Alexa, wie ist die Temperatur der PA?“. Eine Anleitung zum Alexa-Skill dazu findet man bei [6]. Haben Sie mehrere Geräte im Garten o.ä. verteilt – oder diese sind nicht leicht zugänglich – weckt vielleicht ein Feature mit der Bezeichnung OTA-Update das Interesse. Es ermöglicht das Update der Firmware eines Gerätes über den Funkweg (WLAN, GSM oder LoRaWAN). Die Thing-to-Thing-Kommunikation schließlich ermöglicht es – mehrere in der IoT-Cloud installierte Geräte vorausgesetzt – dass diese miteinander Informationen austauschen. Dabei werden eine oder mehrere Variablen zwischen Thing1 und Thing2 synchronisiert, auf denselben Wert gehalten. So kann ein Thing vom anderen profitieren. Ein möglicher Anwendungsfall wäre beispielsweise, dass ein Gerät Daten an ein zweites weiterleitet, von dem das zweite funktional abhängig ist.
Insgesamt eröffnen sich durch die Arduino IoT Cloud für den Funkamateur eine Menge interessanter Anwendungen: Steuerung des Funkgerätes oder eines Empfängers über ein Dashboard, Abfrage von Temperatur durch Sprachbefehle, Überwachung vielerlei Sensoren über das Smartphone während eines Spaziergangs oder die Abfrage der aktuellen Leistung eines Photovoltaikmoduls über das Dashboard. Ich möchte betonen, dass es sich bei der vom Anwender zu leistenden Programmierarbeit nicht um Teufelswerk handelt. Ihr Job ist es, wie zuvor kurz erwähnt, die zur IoT Cloud zu übermittelnden Variablen mit sinnvollen Werten zu füllen. Mehr nicht!
Die Services der Arduino IoT Cloud sind von free bis zu ca. 20 $ je Monat gestaffelt. Die hier genutzte kostenfreie Mitgliedschaft beinhaltet immerhin 2 Things, eine unbegrenzte Zahl von Dashboards, 100 MB Platz für Sketches und ein Datenerhalt für einen Tag. Das bedeutet, dass Sensordaten bis zu einem Tag aufbewahrt werden. Zur freien Mitgliedschaft gehören zudem 200 Sekunden Kompilierzeit, sofern man den Online-Webeditor nutzt und in der Cloud kompiliert. Ein OTA-Update ist darin nicht enthalten. Mehr Info dazu gibt es auf [7].