Die Nutzung von Netzwerkmodulen wie dem Arduino Nano 33 IoT ermöglicht die einfache Erstellung von IoT-Anwendungen. In diesem Kapitel geht es darum, wie man mit einem einfachen Zeitserver über das NTP-Protokoll synchronisieren kann und wie man eine grundlegende IoT-Anwendung aufbaut, bei der LEDs über eine Webseite gesteuert werden.

Der erste Schritt ist die Verbindung des Arduino Nano 33 IoT mit einem Wi-Fi-Netzwerk. Sobald dies geschehen ist, können wir UDP für die Kommunikation mit einem Zeitserver verwenden. Der NTP-Server, auf den wir zugreifen wollen, liefert uns die genaue Zeit, die wir in unser Projekt integrieren können. Dies ermöglicht eine Zeitstempelung von Ereignissen, die in IoT-Anwendungen von großer Bedeutung sein kann.

Im Setup-Bereich des Programms wird zunächst die serielle Kommunikation initialisiert und die Verbindung zum Wi-Fi-Netzwerk hergestellt. Wenn die Verbindung erfolgreich ist, können wir den UDP-Protokollstack starten. Dies geschieht durch den Aufruf von Udp.begin(localPort);, wobei localPort den Port angibt, auf dem das Gerät auf eingehende NTP-Daten wartet. Das folgende Beispiel zeigt, wie die Verbindung zum Wi-Fi-Netzwerk überprüft wird:

cpp
Serial.begin(9600); while (!Serial) { ; } // warten, bis die serielle Verbindung hergestellt ist if (WiFi.status() == WL_NO_MODULE) { Serial.println("Kommunikation mit dem Wi-Fi-Modul fehlgeschlagen!"); while (true); // Halt bei Fehler }

Wenn die Verbindung erfolgreich ist, wird der UDP-Dienst aufgerufen, der dann in der Lage ist, mit dem NTP-Server zu kommunizieren. Im Loop-Bereich wird die Funktion sendNTPpacket() verwendet, um Daten vom NTP-Server anzufordern. Sobald die Antwort empfangen wurde, wird die Zeit aus den empfangenen NTP-Daten extrahiert.

cpp
if (Udp.parsePacket()) { Serial.println("Paket empfangen"); Udp.read(packetBuffer, NTP_PACKET_SIZE);
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]); unsigned long secsSince1900 = highWord << 16 | lowWord; Serial.print("Sekunden seit dem 1. Januar 1900 = "); Serial.println(secsSince1900); }

Die Zeit wird dann in Unix-Zeit umgerechnet, die als Grundlage für die Berechnung der aktuellen UTC-Zeit dient. Diese Umrechnung ist notwendig, da NTP die Zeit seit dem 1. Januar 1900 liefert, während Unix-Zeit die Sekunden seit dem 1. Januar 1970 zählt. Eine Konstante, die diesen Unterschied ausgleicht, ist 2208988800UL.

cpp
const unsigned long seventyYears = 2208988800UL; unsigned long epoch = secsSince1900 - seventyYears; Serial.println(epoch);

Anschließend wird die Zeit in Stunden, Minuten und Sekunden in einem für den Benutzer verständlichen Format auf der seriellen Schnittstelle ausgegeben. Dies ermöglicht die einfache Visualisierung der synchronisierten Zeit des Arduino-Boards.

cpp
Serial.print("Die UTC-Zeit ist ");
Serial.print((epoch % 86400L) / 3600); Serial.print(':'); if (((epoch % 3600) / 60) < 10) { Serial.print('0'); } Serial.print((epoch % 3600) / 60); Serial.print(':');
if ((epoch % 60) < 10) { Serial.print('0'); }
Serial.
println(epoch % 60);

Mit dieser Synchronisierung des Arduino-Boards mit einem NTP-Server haben wir die Grundlage für weitere Anwendungen geschaffen. Beispielsweise kann dieses System in IoT-Projekten verwendet werden, bei denen Zeitstempel für Daten erfasst oder regelmäßige Aktionen zu einem bestimmten Zeitpunkt durchgeführt werden sollen.

Darüber hinaus ist es mit dem Arduino Nano 33 IoT auch möglich, eine einfache Webserver-Anwendung zu erstellen, die über HTTP GET-Anfragen gesteuert wird. In einem solchen Beispielprojekt könnten Benutzer eine Webseite besuchen und über diese eine LED ein- oder ausschalten. Dies stellt ein grundlegendes Webinterface dar, das in vielen IoT-Anwendungen genutzt wird, um Fernsteuerung und Monitoring zu ermöglichen.

cpp
WiFiServer server(80); void setup() { Serial.begin(115200); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); digitalWrite(led1, 0); digitalWrite(led2, 0); digitalWrite(led3, 0); while (status != WL_CONNECTED) { status = WiFi.begin(ssid, password); delay(10000); } server.begin(); }

Für die Steuerung der LEDs können dann einfache GET-Anfragen verwendet werden. So könnten etwa Anfragen wie http://<IP-Adresse>/gpio1/1 die LED 1 einschalten, während http://<IP-Adresse>/gpio1/0 sie ausschalten würde.

Zusätzlich zur NTP-Zeitabfrage und der LED-Steuerung bietet dieses Projekt auch die Möglichkeit, weitere Sensoren oder Geräte hinzuzufügen, die über das Webinterface gesteuert werden können. Diese einfachen, aber flexiblen IoT-Anwendungen bilden eine solide Grundlage für die Entwicklung komplexerer Systeme, bei denen Zeit und Fernsteuerung zentrale Funktionen darstellen.

Wie richtet man die Entwicklungsumgebung für Arduino Nano 33 IoT mit dem Arduino Web Editor ein?

Um Programme für das Arduino Nano 33 IoT zu erstellen, ist es essenziell, eine geeignete Entwicklungsumgebung einzurichten, die eine Verbindung zwischen dem Gerät und dem Computer herstellt. Der Arduino Web Editor bietet eine plattformunabhängige Möglichkeit, Arduino-Sketches direkt im Browser zu programmieren, ohne eine lokale Softwareinstallation vornehmen zu müssen. Für die Nutzung dieses Editors muss zunächst ein Arduino-Konto registriert werden. Dieses Konto ähnelt dem, das für den Kauf von Arduino-Hardware im offiziellen Store verwendet wird und ermöglicht den Zugriff auf alle Funktionen des Web Editors sowie die Verwaltung eigener Projekte und Bibliotheken.

Ein zentraler Schritt bei der Vorbereitung ist die Installation eines Arduino Plug-ins. Dieses Plug-in fungiert als Kommunikationsbrücke zwischen dem lokalen Arduino Nano 33 IoT und dem Web Editor. Besonders unter Windows ist die Installation unerlässlich, um eine reibungslose Verbindung zu gewährleisten. Der Installationsprozess beginnt auf der offiziellen Arduino-Webseite, wo der Nutzer zunächst die Installationsdatei herunterlädt und anschließend die Installation durchführt. Nach erfolgreicher Installation erkennt der Browser automatisch das Plug-in und ermöglicht den direkten Zugriff auf den Web Editor.

Die Arbeitsweise des Arduino Web Editors entspricht weitgehend der klassischen Desktop-Software. Das Erstellen von Programmen beginnt meist mit der Auswahl eines Projektbeispiels. Ein typisches erstes Projekt ist das „Blink“-Programm, das die LED am Arduino-Board in regelmäßigen Abständen ein- und ausschaltet. Dieses Beispiel dient als Grundlage zum Verstehen der grundlegenden Struktur eines Arduino-Programms, welches hauptsächlich aus zwei Funktionen besteht: setup() und loop(). Die Funktion setup() wird einmal beim Start ausgeführt und dient dazu, Einstellungen vorzunehmen, während die loop()-Funktion kontinuierlich wiederholt wird und die Hauptlogik des Programms enthält.

Nachdem der passende Boardtyp ausgewählt wurde – in diesem Fall das Arduino Nano 33 IoT – kann der Code kompiliert und direkt über den Web Editor auf das Gerät hochgeladen werden. Die Nutzung von Beispielprojekten ermöglicht es, schnell erste Erfolgserlebnisse zu erzielen und die Funktionsweise von Arduino-Sketches kennenzulernen.

Neben der einfachen Programmierung mit dem Web Editor bietet Arduino auch die Desktop-Version der Entwicklungsumgebung an, die dieselben Funktionen bereitstellt. Unabhängig von der gewählten Methode ist das Verständnis der Grundprinzipien der Programmstruktur und der Nutzung der vorhandenen Bibliotheken essenziell für die Weiterentwicklung eigener Projekte.

Wichtig ist, dass der Nutzer sich mit der Programmiersprache vertraut macht, die auf C++ basiert und eine eigene Dialektvariante namens Sketch nutzt. Kenntnisse in C++ erleichtern das Erlernen erheblich, jedoch sind grundlegende Syntax und Programmstrukturen auch für Einsteiger gut erlernbar. Die deklarative Art, Variablen zu definieren, Kontrollstrukturen wie Schleifen und Bedingungen zu verwenden, sowie der Umgang mit Ein- und Ausgabesignalen sind Grundlagen, die im weiteren Verlauf unverzichtbar sind.

Neben der reinen Installation und dem Aufbau einer ersten Programmlogik sollte der Nutzer auch die Kommunikationsschnittstellen des Arduino Nano 33 IoT verstehen. Die integrierten WiFi- und Bluetooth-Module eröffnen zahlreiche Möglichkeiten, das Board in Netzwerke einzubinden oder mit anderen Geräten drahtlos zu kommunizieren. Die Kenntnis dieser Schnittstellen erweitert die Anwendungsbereiche erheblich und ist ein Schlüssel zur Entwicklung komplexerer Projekte.

Darüber hinaus ist es wichtig, die verschiedenen Ein- und Ausgabemöglichkeiten des Boards zu kennen – digitale und analoge Pins, PWM, SPI und I2C. Diese Protokolle und Schnittstellen erlauben die Steuerung von Sensoren, Aktoren und anderen Per