Snel in de lucht met de Arduino IoT cloud

In 2019 werd de Arduino IoT cloud aangekondigd. Inmiddels is dit platform volwassen en ontdekken steeds meer makers hoe kinderlijk eenvoudig het is om relatief snel een leuke IoT oplossing te bouwen. Dat zal ongetwijfeld een boost aan leuke, nieuwe IoT toepassingen geven.

De Arduino IoT cloud is een web-omgeving waarin meetdata afkomstig van verschillende sensor modules opgeslagen en gevisualiseerd kunnen worden. Ook kunnen actuatoren op afstand bestuurd worden. Maar voor je grafisch aan de slag kunt moeten er eerst nog wat andere zaken geregeld worden.

Stap 1: aanmelden van je hardware devices

Arduino Nano RP2040

De Arduino IoT cloud ondersteunt een groot pallet aan HW platforms die als device inzetbaar zijn. Wel moeten ze een secure element bevatten waarin de credentials veilig opgeslagen kunnen worden. Voorbeelden van geschikte platformen zijn de nieuwe Arduino Uno R4, de Arduino MKR familie, de Arduino Nano RP2040, maar ook de vele ESP8266 en ESP32 gebaseerde development kits. Daarnaast kunnen ook ‘eigen devices‘ zoals een laptop of een RaspBerry Pi ingezet worden mits ze python, micropython of javascipt (node.js) ondersteunen. Connectivity is mogelijk via WiFi, LoRa en 4G-IoT.

Heb je de keuze gemaakt dan moeten de devices aangemeld worden. Daarbij krijgt elk device unieke credentials toegewezen om de toegang tot de IoT cloud te beveiligen. Je wilt immers niet dat devices van iemand anders jouw IoT database gaan vervuilen met hun data, al dan niet per ongeluk (spoofing).

Stap 2: definiëren van je ‘Thing(s)’

Een “IoT Thing”

Een ‘Thing’ is een device waaraan je IoT eigenschappen toekent. Dat begint met het benoemen van alle variabelen die gesynchroniseerd moeten worden met de IoT cloud. Beschikbare data types zijn ‘booleans’, ‘integers’ en ‘floats’ en een aantal voorgedefinieerde structs zoals ‘CloudColor’. Sensor variabelen zijn ‘read-only’ en kunnen alleen vanuit het device naar de cloud verstuurd worden. Actuator variabelen zijn ‘read-write’ en kunnen (ook) vanuit de cloud aangepast worden. Verder worden per ‘thing’ de connectivity credentials ingesteld (bijvoorbeeld WiFi UID en PWD).

Stap 3: schrijven van de sketch

Arduino sketch

Dat gaat op een soortgelijke manier als dat je gewend bent van Arduino. Middels de online editor schrijf je de code voor de setup() en de loop(). Belangrijk is de code op regel 60. Die regelt dat de variabelen tussen het ‘IoT thing’ en de ‘IoT cloud’ gesynchroniseerd worden. Het is daarvoor belangrijk dat de ‘loop()’ functie niet blocking is. Geadviseerd wordt daarom om ‘millis()’ te gebruiken in plaats van ‘delay()’, behalve op regel 82 :-). Om cloud interactie te minimaliseren worden variabelen alleen gesynchroniseerd als ze van waarde zijn veranderd.

Indien een ‘read-write’ variable in de IoT cloud door de gebruiker wordt aangepast dan wordt in het IoT thing een zgn call-back functie aangeroepen, zoals het voorbeeld in regel 89.

P.s. voor de meest voorkomende sensoren en actuatoren zijn libraries beschikbaar, zoals voor de on-board 6DOF IMU van de Arduino Nano RP2040.

IoT cloud

Stap 4: visualiseren van de data

Daarvoor maak je een (of meerdere) dashboard waarvoor allerlei verschillende widgets beschikbaar zijn die eenvoudig op een canvas gesleept en naar eigen behoefte aangepast kunnen worden. Sensor meetwaardes kunnen weergegeven worden als ‘ruwe waarde’, als ‘gauge’ of als ‘tijdlijn’. Voor actuatoren zijn ‘drukknoppen’, ‘sliders’, etc beschikbaar.

Batterijgevoede IoT devices

De in deze blog toegepaste Arduino Nano RP2040 verbruikt typisch zo’n 10mA. Prima voor heel veel toepassingen. Maar wanneer je die vanuit een gangbare LiPo batterij met een capaciteit van 2600mAh zou willen voeden dan is die battery binnen 260 uur, oftewel binnen ~10 dagen, leeg. Da’s niet handig voor IoT devices die in ergens het veld staan.

Jammer genoeg is het niet (eenvoudig) mogelijk om in je code batterij besparende maatregelen te gebruiken zoals ‘sleep()-modes’. Daarmee verstoor je het onderliggende MQTT ‘keep alive’ mechanisme en wordt de verbinding met de Arduino IoT cloud verbroken. Bovendien zorgt een verborgen WDT ervoor dat het IoT device weer tot leven wordt geroepen mocht het om wat voor reden dan ook vastgelopen zijn. Op zich uiteraard een waardevolle feature. Maar wie weet komt er in de nabije toekomst nog een update die een lange levensduur van batterijen wel mogelijk maakt.

Kosten

Om snel even te evalueren kun je een gratis proefaccount aanmaken. Daarvoor krijg je dan de mogelijkheid om maximaal 2 “IoT things” te gebruiken met een data retentie van maximaal 1 dag. Wil je meer, dan moet je overschakelen op een van de betaalde accounts.

Conclusie

Na een korte inleercurve kom je met Arduino IoT cloud snel tot een werkende oplossing. Bovenstaande demo is makkelijk met een paar uurtjes werk in elkaar te zetten. De documentatie is redelijk uitgebreid en goed leesbaar geschreven. Ook op YouTube zijn veel tutorials te vinden. Al met al een aanrader voor eenvoudige IoT systemen.