Arduino Nano 33 IoT kan opsættes som en simpel webserver, der lytter efter HTTP-anmodninger over et WiFi-netværk og styrer LED'er baseret på disse kommandoer. Processen begynder med at starte serveren ved at kalde begin()-funktionen på WiFiServer-objektet, hvilket aktiverer serverens evne til at modtage klientforbindelser. Når serveren er startet, vises IP-adressen, som Arduinoen har fået tildelt, typisk via seriel monitor, hvilket gør det muligt at identificere og tilgå enheden i netværket.
I loop()-funktionen venter Arduinoen kontinuerligt på, at klienter forbinder sig. Ved en ny klient oprettes et WiFiClient-objekt, og programmet afventer data fra klienten. Når en HTTP-request modtages, læses den som en streng frem til en carriage return, hvorefter strengen analyseres for specifikke kommandoer. Disse kommandoer følger et mønster som "/gpioX/Y", hvor X angiver LED'ens nummer, og Y kommandoen (0 for sluk, 1 for tænd).
Strengmanipulation og søgning med indexOf() anvendes til at afgøre, hvilken LED der skal styres, og om den skal tændes eller slukkes. Når kommandoen er identificeret, justeres LED'ens tilstand med digitalWrite() i overensstemmelse hermed. Dernæst sendes et HTTP-respons tilbage til klienten som en simpel HTML-tekst, der bekræfter LED'ens nye status, og forbindelsen til klienten lukkes.
Denne tilgang giver en let forståelig metode til at kontrollere hardware via HTTP-anmodninger, hvor kommunikationen er baseret på enkle URL-mønstre. Det muliggør brug af en standard browser til at interagere med IoT-enheden, hvilket gør teknologien tilgængelig uden behov for specialiserede applikationer.
Ved test kan man observere, at en vellykket WiFi-forbindelse giver Arduinoen en IP-adresse, der vises i seriel monitor. Ved at tilgå denne adresse med de relevante kommandoer i en browser kan man tænde og slukke LED'erne, mens programmet løbende printer information om klientforbindelser og anmodninger, hvilket letter fejlfinding og overvågning.
Det er vigtigt at forstå, at denne kommunikationsmodel forudsætter stabil WiFi-forbindelse og korrekt behandling af HTTP-anmodninger. Desuden bør man være opmærksom på, at simple strengeoperationer til at fortolke kommandoer kan være sårbare over for uventede input, hvilket kan kræve yderligere validering i mere avancerede anvendelser.
Foruden selve styringen af LED'erne, er det væsentligt at have indsigt i netværksprotokollernes fundament, da det sikrer bedre forståelse af begrænsninger og muligheder ved IoT-kommunikation. Endvidere kan integration med cloud-platforme som Arduino IoT Cloud udvide funktionaliteten til fjernovervågning og kontrol, hvilket muliggør skalerbare løsninger.
Hvordan opretter og konfigurerer man en Thing i Arduino IoT Cloud?
Arduino IoT Cloud giver udviklere og entusiaster mulighed for at opbygge intelligente systemer med en enkel webgrænseflade. For at begynde med en IoT-applikation på Arduino Nano 33 IoT, oprettes først en Thing. Har man kun en gratis konto, skal man slette eksisterende Thing for at kunne oprette en ny. Efter oprettelsen navngives Thing’en – i dette tilfælde kaldes den GyroscopeThing – og derefter tilføjes relevante egenskaber, som i dette eksempel er X-, Y- og Z-akserne fra et gyroskop.
Tilføjelse af egenskaber foregår gennem en formular, hvor man for hver egenskab definerer navn, variabelnavn, datatype, minimum og maksimum værdi, tilladelser og opdateringsinterval. For gyroskopet er datatypen Float, og værdierne opdateres, når ændringen overstiger 0.05. Historikvisualisering aktiveres for hver egenskab, så ændringer over tid kan observeres i dashboardet. Når disse tre egenskaber – xDegree, yDegree og zDegree – er oprettet, vises de automatisk i Thing’ens dashboard.
Dernæst redigeres Sketch-programmet. Via Arduino IoT Cloud’s editor åbnes programmet, og nødvendige biblioteker inkluderes, herunder arduino_secrets.h, thingProperties.h og LSM6DS3 biblioteket. Sidstnævnte muliggør kommunikation med det integrerede gyroskop i Arduino Nano 33 IoT.
I setup() initialiseres sensoren via IMU.begin(). Hvis initialiseringen fejler, vises en fejlmeddelelse i Serial Monitor. Hovedsløjfen, loop(), indeholder en kontrol, hvor IMU.gyroscopeAvailable() afgør, om nye data er tilgængelige. Hvis ja, læses de aktuelle værdier fra gyroskopet via IMU.readGyroscope(xDegree, yDegree, zDegree) og opdateres til de definerede egenskaber. Disse værdier sendes derefter til Arduino Cloud med ArduinoCloud.update(). Programmet kompileres og uploades til Nano 33 IoT, hvorefter systemet er klar til brug.
Når sensordataene sendes korrekt til skyen, opbygges et dashboard, som gør det muligt at visualisere og interagere med dataene. Der oprettes et nyt dashboard, og tre widget-elementer tilføjes – hver af dem kobles til én af gyroskopets tre egenskaber. Brugeren kan navngive dashboardet efter behov. I testfasen aktiveres dashboardet i RUN-tilstand, og sensordata kan nu ses i realtid. Ved fysisk bevægelse af Arduino Nano 33 IoT vises ændringer i X-, Y- og Z-akserne straks i de tilsvarende widgets.
Denne struktur muliggør hurtig prototyping og realtidsmonitorering af sensorinformation via internettet uden behov for avanceret backend-infrastruktur.
Foruden opsætningen beskrevet ovenfor er det væsentligt at forstå betydningen af update delta i egenskabsindstillingerne. Et lavt delta (f.eks. 0.05) sikrer, at små ændringer registreres og sendes, hvilket giver mere nøjagtig overvågning, men kan øge netværkstrafikken. Tilsvarende kræver aktiveret historikvisualisering mere lagerplads i skyen, men giver dybere indsigt over tid.
Det er også vigtigt, at man overvejer sikkerheden ved IoT-applikationer. Selvom Arduino IoT Cloud leverer grundlæggende sikkerhed, bør udviklere forholde sig til netværkskryptering, adgangskontrol og beskyttelse af følsomme data, især ved kommerciel eller industriel brug.
En udbredt fejl blandt begyndere er at overse, at sensorer som gyroskoper ofte genererer data med høj frekvens og støj, hvilket kan kræve filtrering eller glatning, før det vises på dashboardet eller anvendes i beslutningslogik.
Hvordan fungerer grundlæggende seriel kommunikation og betingede udtryk på Arduino Nano 33 IoT?
Når man arbejder med mikrokontrolleren Arduino Nano 33 IoT, er det afgørende at forstå, hvordan seriel kommunikation fungerer, og hvordan betingede logikker implementeres. Et typisk udgangspunkt er at oprette et simpelt program i Arduino IDE, hvor vi bruger Serial-objektet til at kommunikere med computeren via USB.
For at initialisere seriel kommunikation anvendes Serial.begin(115200), hvor 115200 er baudraten – altså overførselshastigheden i bit per sekund. Koden while (!Serial) { ; } sikrer, at mikrokontrolleren venter, indtil forbindelsen er aktiv, hvilket især er vigtigt for boards med native USB som Nano 33 IoT. Det muliggør realtidsudveksling af data mellem enheden og Serial Monitor i Arduino-softwaren.
Et eksempel er deklarationen og initialiseringen af to variabler a og b, som efterfølgende anvendes i aritmetiske operationer. Resultaterne printes ud på den serielle terminal med Serial.print() og Serial.println(), hvor forskellen er, at sidstnævnte afslutter linjen og automatisk indsætter linjeskift. Det gør output mere læsevenligt.
Denne type program placeres typisk i setup()-funktionen, hvilket betyder, at det kun køres én gang ved opstart. loop()-funktionen, som ellers bruges til at gentage kode kontinuerligt, forbliver tom.
En vigtig detalje for begyndere er, at hvis man ikke ser noget output i Serial Monitor, kan det skyldes, at programmet allerede er kørt færdigt, før monitoren blev åbnet. Løsningen kan være at trykke på RESET-knappen på boardet, som typisk er placeret ved siden af micro-USB-porten. Det genstarter koden og tvinger et nyt output gennem Serial Monitor.
Videregående programmering med Arduino kræver forståelse for operatorer. C++-operatørerne bruges i Arduino Sketch – fx +, -, *, /, % til matematiske beregninger og =, &&, ||, ! til logiske operationer og tildelinger. Dette gør det muligt at udtrykke betingelser og evaluere dem løbende i programmet.
Et konkret eksempel er brugen af if-statement til at sammenligne to tilfældigt genererede tal:
Ved at bruge random() genereres nye værdier kontinuerligt, og via delay(2000) indsættes en pause mellem hver iteration for at gøre output mere overskueligt. Koden placeres i loop() og kører derfor uendeligt, hvilket er nyttigt til overvågning eller dataindsamling.
Et alternativ til if-statement er brugen af switch, som er velegnet, når man skal reagere forskelligt

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский