Arduino IoT Cloud – Teil 1: Einführung

Über den Beitrag

Mithilfe der Arduino IoT Cloud (IoT = Internet of Things) lassen sich einige Arduino Boards sehr bequem mit dem Internet verbinden. Das Steuern von Projekten und Auslesen von Daten auf die Ferne ist auf diesem Wege auch für Anfänger problemlos beherrschbar.

Anfang 2019 wurde die Arduino IoT Cloud der Öffentlichkeit vorgestellt. Ich habe dieses Angebot erst kürzlich das erste Mal ausprobiert und möchte meine Erfahrungen mit euch in diesem und einem später folgenden Beitrag teilen. Anhand einer praktischen Aufgabenstellung zeige ich Schritt für Schritt, wie ihr ein Projekt in der Arduino IoT Cloud umsetzt. Aber nie vergessen 😉 :

There is no Cloud – it’s just someone else’s computer!

Eine nicht ganz so alte Internet Weisheit

Einschränkungen und Voraussetzungen zum Nutzen der Arduino IoT Cloud

Zu den Einschränkungen und Voraussetzungen komme ich lieber zu Beginn, damit – falls sie euch nicht passen – ihr Zeit sparen könnt, indem ihr den Beitrag nicht lest!

Boardauswahl

Zunächst einmal funktioniert die Arduino IoT Cloud nur mit bestimmten Arduino Boards:

  • MKR 1000
  • MKR WiFi 1010
  • MKR GSM 1400
  • Nano 33 IoT
  • MKR WAN 1300 / 1310
  • MKR NB 1500

In Zukunft sollen auch die Boards MKR Vidor 4000 und Arduino Uno WiFi Rev2 unterstützt werden. Schaut also lieber direkt auf den Arduino Seiten, welche Modelle aktuell in der Arduino IoT Cloud unterstützt werden.

Die Original Arduino Boards sind naturgemäß deutlich teurer als günstige China-Klone. Ich benutze für diesen Beitrag einen Nano 33 IoT. Der kostet im Arduino Store 16 Euro (Stand Mai 2020), allerdings kommen noch Steuern und Versand obendrauf, sodass ihr bei gut 25 Euro landet. Ist schon happig, aber ohne die Originale keine Klone – also warum nicht auch mal Arduino unterstützen.

Free Plan vs. Maker Plan

Ihr könnt die Arduino IoT Cloud kostenlos nutzen, das nennt sich Free Plan. Alternativ gibt es den sogenannten Maker Plan für aktuell 6,99 $ im Monat (jederzeit kündbar) oder 5,99 $ pro Monat für ein Jahr. Unten seht ihr die Unterschiede, Stand Mai 2020. Die einzige Einschränkung für den Free Plan, die mich wirklich behindert hat, ist die begrenzte Kompilierungszeit von 200 s/Tag. Wenn ihr viel ausprobiert, dann könnt ihr diesen Wert schnell erreichen. Also ist gute Vorbereitung gefragt, wenn ihr kein Geld ausgeben wollt. Ich war jedenfalls irgendwann so weit, dass ich 6,99 $ investiert haben.  

Free Plan vs. Maker Plan für die Nutzung der Arduino IoT Cloud
Free Plan vs. Maker Plan

Software und Benutzerkonto

Ihr müsst ein Benutzerkonto anlegen und den Arduino Create Agent auf eurem Rechner installieren. Dazu kommen wir dann in der Schritt für Schritt Anleitung.

Das Arduino Nano 33 IoT Board

Das Arduino Nano 33 IoT Board für die Arduino IoT Cloud
Das Arduino Nano 33 IoT Board

Mit dem ursprünglichen Arduino Nano hat der Arduino Nano 33 IoT nicht mehr viel zu tun. Er basiert auf dem Low Power, 32 Bit SAMD21 Cortex®-M0+ Microcontroller. Sein Flash Speicher ist 256 kB groß und er läuft auf 48 MHz. (Um-)Gewöhnungsbedürftig ist unter Umständen auch, dass die Ausgangsspannung 3.3 Volt beträgt.

Für die kabellose Kommunikation über Bluetooth oder W-LAN besitzt der Nano 33 IoT ein Funkmodul. Als nettes Feature verfügt der Nano 33 IoT auch noch über einen 3-Achsen Beschleunigungssensor und Gyroskop. Und schließlich ist das Board – wie alle Arduino IoT Cloud fähigen Boards – mit einem Krypto Chip ausgestattet. Noch mehr technische Informationen findet ihr hier.

Damit der Nano 33 IoT von der Arduino IDE erkannt wird, müsst ihr die Arduino SAMD Boards im Boardverwalter installiert haben. Wenn ihr dazu eine Anleitung benötigt, findet ihr sie auf den Getting Started Seiten.

Arduino SAMD Boards im Boardverwalter - Voraussetzung für die Arduino IoT Cloud
Arduino SAMD Boards im Boardverwalter

Die Aufgabenstellung

Um das Prinzip der Arduino IoT Cloud zu erklären, habe ich eine sehr einfache Aufgabe ausgewählt: über das Internet schalten wir eine LED und lesen einen DHT22 Temperatur- und Luftfeuchtesensor aus. Ihr könnt natürlich auch irgendetwas anderes nehmen. Aber am besten eine Sache, die ihr steuern und eine andere, die ihr auslesen wollt.

Da Online Kompilierungszeit kostbar ist, solltet ihr eure Schaltung offline prüfen. Hier mein recht unspektakulärer Offline-Sketch: 

#include "DHT.h"

#define LED_PIN 8
#define DHTPIN 7 
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);
 
void setup(){
  Serial.begin(9600);
  dht.begin();
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  static unsigned long lastMeasurement = millis();
  float myTemp = 0.0;
  if((millis() - lastMeasurement) > 3000){
    myTemp = dht.readTemperature(); 
    Serial.print("Temperatur: "); 
    Serial.print(myTemp);
    Serial.println(" C");
    lastMeasurement = millis();
    toggleLED();
  }
}

void toggleLED(){
    static bool ledStatus = true;
    digitalWrite(LED_PIN, ledStatus);
    Serial.print("The light is ");
    if(ledStatus){
      Serial.println("ON");
    } 
    else{
      Serial.println("OFF");
    }
    ledStatus = !ledStatus;
}

 

Zur Ansteuerung des DHT22 Sensors habe ich die DHT-sensor-library von Adafruit verwendet. Ihr bekommt sie hier auf Github oder direkt über die Bibliotheksverwaltung. 

Und hier nun die Schaltung dazu:

Schaltung für unser Arduino IoT Cloud Projekt
Schaltung für das kleine Arduino IoT Cloud Projekt

Schritt für Schritt Anleitung

Der Arduino Web Editor

Als Erstes geht ihr auf die Arduino Create Seite. Dort seht ihr sechs Kacheln. Wählt den Arduino Web Editor. 

Arduino Create Auswahl - Schaltzentrale der Arduino  IoT Cloud
Arduino Create Auswahl

Falls ihr noch keinen Account habt, werdet ihr jetzt darauf hingewiesen und könnt das nachholen. Wenn ihr mit der Arduino IDE vertraut seid, sollte euch der Umgang mit der Online Version keine Probleme bereiten. Spielt am besten ein wenig damit herum. 

Arduino Web Editor
Arduino Web Editor

Ein Board für die Arduino IoT Cloud vorbereiten

Geht wieder zurück auf die Arduino Create Seite und wählt die Kachel „Getting started“. Ihr seht die Auswahl an Boards, die für die Arduino IoT Cloud geeignet sind (ESP 8266 solltet ihr nur sehen, wenn ihr den Maker Plan abonniert habt):

Boardauswahl für die Arduino IoT Cloud
Boardauswahl für die Arduino IoT Cloud

Dann wählt ihr das Board aus und folgt den weiteren Anweisungen: 

Als erstes installiert ihr das Arduino Create Plugin. Wart ihr damit erfolgreich, findet ihr das Icon dazu in der Taskleiste. Über dieses Icon kommt ihr immer wieder schnell auf die Arduino Create Seite. 

Arduino Create Agent Icon
Arduino Create Agent Icon

Dann wird der Krypto Chip konfiguriert:

Board Konfiguration

Im nächsten Schritt gebt ihr eurem Board einen Namen:

Klickt auf NEXT und dann auf CONFIGURE:

Die nächsten Schritte dienen dazu, das W-LAN einzurichten und das Board zu testen.

Gebt eure W-LAN Daten ein. SECRET_WIFI_NAME ist der Name eures W_LANs, SECRET_PASSWORD ist euer W-LAN Passwort. 

Nach dem Upload seht ihr den folgenden Bildschirm:

Sendet „ON“ bzw. „OFF“ über das Textfeld oder klickt auf das LED Symbol. So könnt ihr die On-Board LED auf dem Nano 33 IoT an- und ausschalten. 

Geschafft!
Geschafft!

Geht ihr jetzt in den Device Manager (eine der sechs Kacheln vom Anfang), dann sollte euer Board dort auftauchen. 

Von Dingen und Eigenschaften

Um beim Internet of Things mitmachen zu können, brauchen wir zunächst ein „Thing“, also ein Ding. Im Prinzip kann man sagen, dass unser Ding das Board mit dem Sensor und der LED ist. Und für dieses Ding müssen wir Eigenschaften (Properties) definieren. Aber eins nach dem anderen.

Geht wieder zurück auf die sechs Kacheln (z.B. über den Create Agent), wählt „Arduino IoT Cloud“ und dann „Add new thing“. Im nächsten Fenster gebt ihr eurem Ding einen Namen. Ich habe „TestThing“ dafür genommen. Dann wählt ihr das zuvor konfigurierte Board aus:

Boardauswahl für die Arduino IoT Cloud

Die LED als Eigenschaft hinzufügen

Dann wählt ihr „Add Property“ und vergebt einen Namen für die erste Eigenschaft. Ich habe „My_LED“ gewählt, muss aber im Nachhinein sagen, dass „Light“ oder ähnliches passender gewesen wäre, weil eine LED an sich keine Eigenschaft ist. Aber egal. Dann vergebt ihr einen Variablennamen und wählt einen Typ aus. Hier passt ON / OFF, also Boolean. 

Je nachdem, ob ihr etwas steuern oder auslesen wollt, vergebt ihr die Erlaubnis (Permission), die Variable zu lesen und zu verändern, oder sie nur auszulesen. Für die LED brauchen wir „Read and Write“. „Update“ legt die Bedingungen für die Aktualisierung der Variablen, also der Eigenschaft fest. Entweder passiert die Aktualisierung bei Änderung des Wertes oder in einem festgelegten Intervall. Ein Haken bei „History Visualization“ bewirkt, dass ihr die letzten Änderungen des Wertes nachverfolgen könnt. 

Einstellung der LED Properties
Einstellung der Property My_LED

Dann wählt „ADD PROPERTY“. In der Übersicht eures Dings seht ihr jetzt die Eigenschaft:

Das TestThing nimmt Form an
Das TestThing nimmt Form an

Die Temperatur als Eigenschaft hinzufügen

Jetzt wiederholen wir das Ganze für die Temperatur. Als Typ habe ich „Float“ gewählt. Erst später fiel mir auf, dass ich auch „Temperatur“ hätte wählen können. Da hatte ich aber offen gestanden keine Lust mehr alles nochmal durchzugehen, mit allen Screenshots usw….

Min und Max Value dienen der grafischen Darstellung wo sich der aktuelle Wert innerhalb der Grenzen befindet. Später seht ihr wie das ausschaut. Die Temperatur soll nur gelesen werden, sie ist also „Read only“. Änderungen der Temperatur sollen nur gezeigt werden, wenn das Delta größer oder gleich 0.1 Grad beträgt. 

Einstellung der Eigenschaft My_Temperatur
Einstellung der Eigenschaft My_Temperatur

Wählt wieder „ADD PROPERTY“.

Vielleicht ist euch die Option „New Dashboards“ am unteren Rand des Bildschirms aufgefallen. Ich komme noch dazu, was es damit auf sich hat. 

Den Sketch anpassen

Jetzt klickt auf „EDIT SKETCH“. Ihr landet im Arduino Web Editor und findet einen schon vorbereiteten Sketch, den ihr nur noch anpassen müsst. In der Funktion onLedStatusChange legt ihr fest was passieren soll, wenn die Variable ledStatus ändert. Da ihr die Temperatur nur auslest, gibt es für sie keine solche Funktion.  

Automatisch generierter Sketch Rumpf für die Arduino IoT Cloud
Automatisch generierter Sketch Rumpf

Schaut nun mal in den Reiter thingProperties.h. Ihr seht, dass dort weitere, notwendige Header Dateien eingebunden werden. Die THING_ID ist eine einzigartige Zeichenfolge zur Identifikation eures Dings. Sie dient auch dazu, um auf euer Ding mit anderen Internetdiensten von außen zuzugreifen.

SSID und PASS sind der W-LAN Name und das W-LAN Passwort. Ihr müsst diese nochmal unter dem Reiter „Secret“ eintragen. 

Dann seht ihr, dass die Variablen eurer Eigenschaften schon automatisch deklariert wurden. Auch seht ihr, wie die Eigenschaften eures Dings mit den von euch gewählten Parametern im Code hinzugefügt werden (ArduinoCloud.addProperty(....)). 

Automatisch generierter File "thingProperties.h"
Automatisch generierter File „thingProperties.h“

Jetzt vervollständigt ihr den vorgefertigten Sketch. Ihr definiert, wie der Wert der Variablen myTemp ermittelt werden soll und wie häufig das passiert. Dann tragt ihr nach, was bei Änderung der Variablen ledStatus passieren soll. 

So sieht der Sketch dann bei mir aus:

#include "thingProperties.h"
#include "DHT.h"

#define LED_PIN 8
#define DHTPIN 7 
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);
 

void setup() {
  Serial.begin(9600);
  delay(1500); 
  dht.begin();
  pinMode(LED_PIN, OUTPUT);

  initProperties();

  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
}

void loop() {
  static unsigned long lastMeasurement = millis();
  
  ArduinoCloud.update();
  
  if((millis() - lastMeasurement) > 3000){
    myTemp = dht.readTemperature(); 
    Serial.print("Temperatur: "); 
    Serial.print(myTemp);
    Serial.println(" C");
    lastMeasurement = millis();
  }
}


void onLedStatusChange() {
    digitalWrite(LED_PIN, ledStatus);
    Serial.print("The light is ");
    if (ledStatus) {
        Serial.println("ON");
    } else {
        Serial.println("OFF");
    }
}

 

Nun könnt ihr den Sketch kompilieren und hochladen. Auf dem seriellen Monitor könnt ihr prüfen, ob die Temperaturen richtig ausgelesen werden. Klickt dann auf GO TO IOT CLOUD, danach auf den Reiter „Dashboard“. Dort seht ihr eine Kachel für die aktuelle Temperatur und eine weitere zum Schalten der LED. Das war es auch schon – nun könnt ihr von überall in der Welt aus darauf zugreifen. 

TestThing Dashboard
TestThing Dashboard

Schöner machen mit den „New Dashboards“

Jetzt gehen wir nochmal auf die oben erwähnten „New Dashboards“. Dort wählt ihr CREATE DASHBOARD, dann ADD. Für LEDs gibt es dort ein Widget:

Widget Auswahl
Widget Auswahl

Wählt das Widget aus und zieht es dorthin, wo ihr es haben wollt. Dann müsst ihr es mit einer Property verlinken, also My_LED:

Properties verlinken
Properties verlinken

Das Widget zeigt nur den Zustand der LED an. Um die LED schalten zu können, fügt noch einen Switch hinzu. Dann spendiert ihr dem Dashboard noch ein Widget für die Temperatur. Und so sieht das Ergebnis aus:

Arduino IoT Cloud in Action: New Dashboard, ledStatus ON und ledStatus OFF
New Dashboard, links: ledStatus ON, rechts: ledStatus OFF

Zugriff mit dem Smartphone

Anscheinend ist der Zugriff auf die „New Dashboards“ vom Smartphone aus (noch) nicht vorgesehen, wobei das ja wirklich eine Funktionalität ist, die sich die meisten sicherlich wünschen. Wie auch immer, ich habe keine Schaltfläche „New Dashboard“ in der Smartphone-Ansicht gefunden. Sollte das bei euch auch der Fall sein, dann gebt die URL aus dem PC einfach händisch in eurem Browser auf dem Smartphone ein. Ihr müsst die Widgets dann noch ein bisschen hin- und herschieben, damit alles auf dem Smartphone Bildschirm abgebildet wird.

So sieht das Ergebnis bei mir aus:  

New Dashboard auf dem Smartphone
New Dashboard auf dem Smartphone

Dann könnt ihr euch einen Link zu dem Dashboard auf eurem Startbildschirm erzeugen und habt so schnellen und bequemen Zugriff.

Alternative zur Arduino IoT Cloud

Wie ihr per Browser eine LED schaltet und eine Temperatur auslest, hatte ich auch schon einmal in meinem Beitrag über den ESP8266 ESP-01 beschrieben. Wenn ihr das Modul in eurem Heimnetz verwendet und darauf per VPN zugreifen könnt, habt ihr – in Bezug auf die bisher vorgestellten Funktionalitäten – im Prinzip eine gleichwertige, sichere Lösung, aber ohne teures Board und Beschränkungen der Kompilierungszeit.

Ein Nachteil der Lösung per ESP8266 ist, dass ihr euch auch ein wenig mit HTML und CSS auskennen müsst, um das ganze optisch ansprechend gestalten zu können. Hinzu kommt, dass bestimmte Arduino Boards auch über eine 3G Verbindung mit der Arduino IoT Cloud verbunden werden können. Damit seid ihr unabhängig vom Vorhandensein eines W-LANs.

Außerdem bietet die Arduino IoT Cloud einige bequeme Möglichkeiten der Anbindung an andere Internetdienste, auf die ich bisher noch nicht zu sprechen gekommen bin.

Ausblick

Unter anderem bin ich noch überhaupt nicht auf das schöne Thema „Webhooks“ eingegangen, da es den Rahmen dieses Beitrages sprengen würde. Vielleicht ist euch der entsprechende Reiter in der TestThing Übersicht ja schon aufgefallen. Mit Webhooks könnt ihr Dinge machen, wie z.B. euch eine E-Mail schicken lassen, falls Sensorwerte kritische Werte annehmen. Ich plane in einem meiner nächsten Beiträge darauf einzugehen, ebenso auf die erwähnte 3G Anbindung von Arduino Boards an die Arduino IoT. 

4 thoughts on “Arduino IoT Cloud – Teil 1: Einführung

  1. Habe nicht wirklich verstanden wie der Zugriff aus dem Internet oder Hndy erfolgt

    1. Die Temperatur und der LED Zustand werden auf der Dashboardseite ausgegeben. Das passiert ja schon über das Internet. Das Arduino Board sendet die Daten über das W-LAN an den Router und der dann in die Arduino IoT Cloud. Von dort bekommt sie dann dein Rechner. Beziehungsweise andersrum für den LED Schaltbefehl. Dein Rechner muss nach dem Hochladen des Programms nicht mehr mit dem Board verbunden sein. Die Dashboardseite kannst du von überall in der Welt erreichen. Auf einem anderen Rechner oder Handy musst du dich nur mit dem eingangs erwähnten Benutzerkonto auf den Arduino Seiten einloggen.

  2. Hallo lieber Wolfgang Ewald,
    zunächst mal herzlichen Dank für deine Seiten! Ohne die hätte ich mich an das Thema IoT mit Arduino nicht herangetraut… und es funktioniert!
    Ich möchte nun ein paar Gedanken und Erfahrungen loswerden, die mir beim Herumspielen mit dem Nano33IoT und der Arduino Cloud so gekommen gekommen sind. Korrigier mich ruhig, wenn ich irgendwas falsch verstanden habe.
    Ich habe vor ca. zweieinhalb Jahren mit dem Arduino begonnen und ein paar kleinere Projekte damit gemacht.
    Damals musste man für das Online-Kompilieren noch nichts bezahlen, auch wenn es mehr als 200 s/Tag waren. Aber auch jetzt kann man aus dem Offline-Arduino Editor heraus unbegrenzt arbeiten, Voraussetzung ist, man hat das richtige Board installiert und die passenden Bibliotheken. Die thingProperties.h muss man allerdings immer anpassen (so wie im Web-Editor), wenn man an den Thing-Properties irgendwas geändert hat. Aber es scheint zu funktionieren.
    Soweit ich das verstanden habe, muss man dann keinen weiteren kostenpflichtigen „Plan“ aktivieren.
    Diesen „New Dashboard“-Link hab ich nicht gefunden, aber die Konstruktion des Dashboards sah ganz so aus, wie du das beschrieben hast.
    Dann die Sache mit der Read-Write-Eigenschaft der „Properties“…. Also bei mir klappt das nur Entweder-Oder (vielleicht habe ich auch nur noch nicht lange genug getüftelt). Ich meine damit, wenn ich Read-Only eingebe, funktioniert das Auslesen prima. Wenn ich Read-Write eingebe, kann ich zwar über eine Variable Befehle weitergeben, aber die vom Board geänderte Variable nicht lesen. Die hat immer den Wert, wie vom Dashboard aus im „Thing“ gespeichert. Also entweder Lesen oder Schreiben, aber vielleicht mach ich noch irgendwas verkehrt.
    Dann zu den begrenzten Properties eines „Things“: Ich habe mir mal diese Messenger-Funktion angesehen und dachte, wenn man da einen String hin- und herschicken kann, kann man da doch Dutzende Messwerte übermitteln. Die Ausgabe auf dem Dashboard-Messenger ist bei mir zwar etwas langweilig („Die Spannung am Batterie-Pluspol betraegt: 3.8 V….), dafür kann man da viele Werte übertragen. In der Gegenrichtung müsste das auch gehen, man muss hinterher nur den String entsprechend analysieren. Die Erzeugung dieses Strings macht mir noch Kopfzerbrechen, man will ja nicht immer einen Text eingeben müssen, bei dem jeder Character über das Ein-Oder Ausschalten einer Bewässerungspumpe entscheidet….
    Zu „Dingen und Eigenschaften“: Ich möchte jetzt nicht als Haarspalter auftreten, aber ich glaube, dass das „Thing“ in der Cloud nicht identisch ist mit dem Board. Soweit ich das verstanden habe, kann man mehrere Boards mit einem „Thing“ (ein virtueller Raum in der Cloud = someone else’s computer) verknüpfen. Der gemeinsame Nenner sind dann die Variablennamen in den Sketches auf den Boards und in dem „Thing“.
    Jedenfalls macht mir das Herumprobieren mit dem IoT wahnsinnig viel Spaß und du hast dazu die Tür weit aufgemacht. Vielen Dank

    1. Hallo Albert, erstmal danke für den umfangreichen Kommentar. Hier ein paar Anmerkungen:
      Das ist schon richtig, man braucht den kostenpflichtigen Plan nicht unbedingt, wenn man nicht zu viel herumprobiert und nicht viele Boards oder Properties nutzen möchte.
      Warum das mit dem Read/Write nicht so funktioniert wie es soll, ist mir nicht klar. Fehlersuche ist so schon oft schwierig – und aus der Ferne noch viel mehr.
      Der New Dashboard Link ist nicht so gut zu sehen, er ist unten am Bildschirmrand.
      Viel Spaß noch!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.