Die Steuerung von LEDs über HTTP-Anfragen auf dem Arduino Nano 33 IoT basiert auf der Einrichtung eines einfachen Webservers, der auf eingehende Verbindungen wartet, HTTP-Anfragen ausliest, diese interpretiert und daraufhin entsprechende Aktionen ausführt. Der Server wird durch den Aufruf von server.begin() gestartet und die lokale IP-Adresse des Boards wird ermittelt und ausgegeben, um die Verbindung sichtbar zu machen.

Im Hauptprogramm, das in der Loop-Funktion läuft, wird zunächst überprüft, ob ein neuer Client eine Verbindung zum Server aufgebaut hat. Wenn keine Verbindung besteht, wird die Funktion sofort verlassen. Andernfalls wartet das Programm darauf, dass der Client eine HTTP-Anfrage sendet. Diese Anfrage wird zeichenweise bis zum Zeilenende gelesen und in einer String-Variable gespeichert.

Die eigentliche Steuerlogik beruht auf der Analyse dieser Anfrage-Strings. Mit String-Funktionen wie indexOf() wird geprüft, ob die Anfrage einen bestimmten Pfad enthält, der einer Steueranweisung entspricht, zum Beispiel „/gpio1/1“, was bedeuten würde, dass LED 1 eingeschaltet werden soll. Dabei steht „gpioX/Y“ für das Steuerungskommando: X bezeichnet die Nummer der LED, Y den Zustand (0 = aus, 1 = an). Anhand dieser Auswertung werden dann die Werte für die einzelnen LEDs gesetzt.

Die anschließende Steuerung der Hardware erfolgt durch den Aufruf von digitalWrite(), womit die jeweiligen Pins für die LEDs entsprechend geschaltet werden. Danach wird eine HTTP-Antwort aufgebaut, die dem Client den aktuellen Status der LEDs mitteilt. Diese Antwort wird im HTTP-Format versendet, was die Kommunikation mit Webbrowsern oder anderen HTTP-Clients ermöglicht.

Wichtig ist, dass nach dem Senden der Antwort die Client-Verbindung sauber geschlossen wird, um Ressourcen freizugeben. Im seriellen Monitor kann man zudem sämtliche Verbindungs- und Steuerinformationen nachvollziehen, was die Fehlersuche erleichtert.

Dieses Beispiel zeigt, wie sich mit minimalem Codeaufwand ein IoT-Gerät als Webserver einsetzen lässt, der über das lokale Netzwerk per HTTP gesteuert werden kann. Es demonstriert die grundlegende Handhabung von Client-Verbindungen, das Parsen von Anfragen und die Umsetzung in Hardwareaktionen.

Neben dem praktischen Verständnis des HTTP-Protokolls und der String-Verarbeitung ist es für den Leser wichtig, die Bedeutung von stabiler Netzwerkverbindung und Fehlerbehandlung zu erfassen. So können z.B. ungültige Anfragen abgefangen und unerwartete Verbindungsabbrüche berücksichtigt werden. Auch die Sicherheit sollte nicht außer Acht gelassen werden: Ohne Authentifizierung ist der Webserver für jeden im Netzwerk zugänglich, was Risiken birgt. Erweiterungen wie Zugangsbeschränkungen oder Verschlüsselung könnten daher essentiell sein.

Des Weiteren ist die Kenntnis über die Funktionsweise der asynchronen Kommunikation und die effiziente Nutzung von Ressourcen auf Mikrocontroller-Ebene unerlässlich. Das Verständnis, wie die Loop-Funktion die ständige Bereitschaft für eingehende Anfragen sicherstellt und dabei systematisch Ressourcen freigibt, ist ein Grundpfeiler für robuste IoT-Anwendungen.

Der Code bildet eine Basis, auf der komplexere Applikationen aufgebaut werden können, etwa das Steuern weiterer Aktoren oder das Auslesen von Sensoren, immer verbunden mit der Fähigkeit, über das Netzwerk zu kommunizieren und zu reagieren.

Wie erstellt man eine Sensorüberwachung mit Arduino IoT Cloud und integriert ein Gyroskopmodul?

Die Arduino IoT Cloud ermöglicht eine einfache und strukturierte Entwicklung von IoT-Anwendungen durch die Verbindung von Arduino-Hardware mit cloudbasierten Dashboards und Datendiensten. Am Beispiel eines Gyroskopsensors auf einem Arduino Nano 33 IoT wird ein vollständiger Ablauf demonstriert – von der Erstellung eines sogenannten Things über das Hinzufügen von Sensoreigenschaften, die Programmierung des Sketches bis zur Visualisierung der Sensordaten auf einem interaktiven Dashboard.

Zunächst wird ein neues Thing auf der Arduino IoT Cloud erstellt. Für Benutzer mit einem kostenlosen Zugang ist dabei zu beachten, dass nur ein Thing gleichzeitig erstellt werden kann. Daher muss ein eventuell vorhandenes Thing gelöscht werden, bevor ein neues – etwa mit dem Namen GyroscopeThing – angelegt werden kann. Anschließend werden diesem Thing Eigenschaften hinzugefügt, die direkt mit den Ausgaben des Gyroskopsensors verknüpft sind. In unserem Fall handelt es sich um drei Gleitkomma-Eigenschaften: xDegree, yDegree und zDegree, die die Drehbewegung um die jeweiligen Achsen erfassen. Diese Eigenschaften werden als „read-only“ konfiguriert, mit einem Delta von 0,05 aktualisiert und ihre Werte sollen visualisiert werden.

Nach dem Anlegen dieser Eigenschaften erfolgt die Programmierung des zugehörigen Sketches direkt über den Webeditor von Arduino IoT Cloud. Hierfür wird die notwendige Bibliothek LSM6DS3 eingebunden, um auf den im Arduino Nano 33 IoT integrierten Bewegungssensor zuzugreifen. Zusätzlich wird das Header-File thingProperties.h eingebunden, das automatisch durch die Cloud generiert wird und die Thing-Eigenschaften als globale Variablen bereitstellt. Die Initialisierung des Sensors erfolgt im Setup-Abschnitt des Programms mittels IMU.begin(), wobei im Fehlerfall das Programm anhält.

Im Loop-Abschnitt wird zyklisch geprüft, ob neue Gyroskopdaten verfügbar sind. Wenn dies der Fall ist, werden die aktuellen Sensordaten über IMU.readGyroscope(xDegree, yDegree, zDegree) in die Thing-Eigenschaften übertragen. Die Methode ArduinoCloud.update() sorgt dabei für die Synchronisation der Variablen mit der Cloud. Ein kurzer Delay von 1000 ms stabilisiert den Ablauf.

Nach dem Hochladen des Sketches auf die Hardware kann ein Dashboard erstellt werden. Dabei wird ein neues Dashboard erzeugt und für jede Eigenschaft ein entsprechendes Widget hinzugefügt – typischerweise ein Value Widget, das den aktuellen Wert anzeigt. Jedes Widget wird mit der passenden Eigenschaft verbunden. Die Zuordnung ist einfach über das UI möglich und muss für xDegree, yDegree und zDegree wiederholt werden. Am Ende wird dem Dashboard ein Name gegeben und es kann in den RUN-Modus versetzt werden.

Sobald die Verbindung steht, wird bei Bewegung des Arduino-Boards die Veränderung der Sensordaten in Echtzeit auf dem Dashboard angezeigt. Die Reaktion auf das Schütteln oder Drehen des Geräts lässt sich direkt in den Widgets beobachten. Damit ist ein grundlegender Aufbau einer IoT-Visualisierung abgeschlossen.

Wichtig ist, dass die Struktur des Thing-Entwurfs durchdacht bleibt. Jede Eigenschaft sollte sinnvoll benannt und mit den richtigen Parametern versehen sein, da sie langfristig Teil des Datenmodells wird. Auch die Trennung zwischen Datenerfassung (Sensorik), Datenverarbeitung (Sketch) und Datenvisualisierung (Dashboard) bildet eine gute Grundlage für skalierbare Anwendungen. Ein weiteres wesentliches Element ist die Trennung von sensitiven Daten wie WiFi-Zugangsdaten, die über arduino_secrets.h eingebunden, aber nicht direkt im Code gepflegt werden sollten – ein Sicherheitsaspekt, der in produktionsreifen Systemen unverzichtbar ist.

Neben dem gezeigten Anwendungsfall kann dieses Modell auf weitere Sensoren oder Aktoren erweitert werden. Entscheidend bleibt dabei die saubere Definition der Eigenschaften im Thing und deren konsistente Anbindung an Code und Visualisierung. So lassen sich auf einfache Weise robuste und flexibel erweiterbare IoT-Systeme entwickeln, die sowohl zu Lernzwecken als auch im Prototypenbau eine bedeutende Rolle spielen.

Wie man BLE-Dienste auf dem Arduino Nano 33 IoT mit einem Smartphone testet und nutzt

Um das Programm zu testen, benötigen wir ein Smartphone mit der Android- oder iOS-Plattform. In diesem Demo-Beispiel verwenden wir ein Android-Smartphone. Zuerst öffnet man den Serial Monitor, um die Programmausgabe des LED-Programms zu beobachten. Anschließend öffnet man die nRF Connect for Mobile-Anwendung auf dem Smartphone. In dieser Anwendung sollte der BLE-Dienst sichtbar sein, wie in der Abbildung 6-7 gezeigt. Tippen Sie auf die Schaltfläche "CONNECT", um eine Verbindung mit dem Arduino Nano 33 IoT herzustellen.

Nach der Verbindung wird ein Formular angezeigt, das die BLE-Dienstmerkmale zeigt (siehe Abbildung 6-8). Diese Merkmale können erweitert werden, und es gibt zwei Eigenschaften: "READ" und "WRITE". Tippen Sie auf das Symbol der "WRITE"-Eigenschaft. Nun können Sie den Wert 15 eingeben, um die LED zu aktivieren, wie in Abbildung 6-9 dargestellt. Tippen Sie auf "SEND", um diesen Wert zu senden. Sie sollten sehen, wie die LED auf dem Arduino Nano 33 IoT leuchtet. Wenn Sie den Wert 00 senden, wird die LED ausgeschaltet, was in Abbildung 6-10 gezeigt wird.

Wenn der Serial Monitor bereits geöffnet ist, können Sie die Programmausgabeereignisse beobachten. In der Abbildung 6-11 sehen Sie die Ausgabe des Programms, das die LED steuert.

Sensor-Datenüberwachung in Echtzeit über BLE

Im nächsten Schritt erstellen wir eine Echtzeitüberwachung von Sensordaten über das BLE-Radio. Hierzu bauen wir einen BLE-Dienst, der die Daten eines Gyroskopsensors an BLE-Leser überträgt. Der BLE-Leser erhält Benachrichtigungen, wenn sich die Sensordaten ändern.

Um das Programm zu schreiben, erstellen wir ein neues Arduino-Programm, das einen BLE-Dienst erstellt und die Gyroskopsensordaten an BLE-Leser sendet. Der BLE-Dienst wird drei Merkmale enthalten, die jeweils die Werte für die X-, Y- und Z-Achse des Gyroskopsensors ausgeben. Zunächst müssen die erforderlichen Bibliotheken eingebunden werden:

cpp
#include <ArduinoBLE.h>
#include <Wire.h> #include <SparkFun_MPU9250-DMP.h>

Dann definieren wir den BLE-Dienst und die drei BLE-Merkmale mit den entsprechenden UUIDs. Zusätzlich definieren wir drei Variablen, um die Sensordaten zu speichern:

cpp
BLEService sensorService("16150f38-e7a9-4fe1-ae08-48464baf25b2"); BLEStringCharacteristic xSensorLevel("ff99948c-18ff-