Internet of Things/Node-architectuur
Node-architectuur
De architectuur van een node, en de keuzemogelijkheden die je daarvoor hebt, hangen nauw samen met de lokale IoT-architectuur. Door een handige keuze van interfaces en protocollen kun je het niet-lokale deel van de architectuur ontkoppelen van de lokale node-architectuur. Je kunt dan werken met een grote mix aan nodes.
Voorbeeld: Arduino Uno met Ethernet
Het eerste voorbeeld van een node is een Arduino Uno met een Ethernet-verbinding, bijvoorbeeld in de vorm van een Ethernet-shield.
- In dit geval gebruik je voor de communicatie met het internet een bedrade verbinding (Ethernet). Deze kun je eventueel ook gebruiken voor de energievoorziening van de node, via "Power over Ethernet" (PoE). Hiervoor heb je extra onderdelen nodig, zowel aan de kant van de router/switch (voor het toevoegen van de power) als aan de kant van de node (voor het gebruik van de power).
- processor: Atmega328 (32 kbyte programmageheugen; 2 kbyte RAM)
- communicatie: Ethernet (via Ethernet shield)
- energie: bedraad (bijv. via USB; eventueel: Power over Ethernet)
Onderdelen
- Arduino UNO
- Arduino Ethernet Shield (versie 1 of versie 2)
- Breadboard
- 2*: drukknop, pulldown-weerstand (10 kOhm)
- 2* LED, serieweerstand (220 Ohm)
- analoge lichtsensor: LDR met serieweerstand (22 kOhm)
- analoge temperatuursensor: LM35DZ
Voorbeeld: NodeMCU met WiFi
De NodeMCU-bordjes zijn gebaseerd op de ESP8266, waarin een WiFi-radio gecombineerd wordt met een redelijk krachtige processor. Ten opzichte van een Arduino UNO heb je veel meer rekenkracht en geheugen tot je beschikking (maar iets minder I/O pinnen). Je kunt deze bordjes gewoon via de Arduino-IDE programmeren. Bovendien zijn deze bordjes goedkoop (vergeleken met een Arduino): -12 Euro, afhankelijk van de leverancier.
- processor:
- 4 MByte programmageheugen/Flash storage
- 128 kbyte RAM
- communicatie: WiFi (ingebouwd in ESP8266-module)
- energie: via USB
De WiFi-communicatie vraagt de nodige energie (???); het ligt daarom niet voor de hand om hiervoor een batterij te gebruiken.
Een variant van de NodeMCU is de xxx. Deze is iets kleiner en heeft minder pinnen beschikbaar, maar is voor het overige te vergelijken met de NodeMCU-bordjes. Deze zijn nog goedkoper dan de NodeMCU-bordjes.
Je gebruikt deze bordjes vaak in combinatie met een breadboard waarop je de sensoren e.d. kunt monteren.
Onderdelen
- NodeMCU v1
- Breadboard
- 2* LED + serieweerstand (220 Ohm)
- 2* pushbutton + pulldown-weerstand (10 kOhm)
- analoge lichtsensor: LDR + serieweerstand (10 kOhm)
- (evt. digitale sensoren)
Voorbeeld: Raspberry Pi als node
We kunnen sensoren e.d. ook direct aansluiten op een Raspberry Pi: we kunnen deze ook gebruiken als IoT-node.
Voor het aansturen en uitlezen van de sensoren en actuatoren kunnen we NodeRed gebruiken: de NodeRed-versie van de Raspberry Pi heeft speciale nodes voor de toegang tot de de GPIO-poorten van de Raspberry Pi. NodeRed kan ook optreden als MQTT-client, zowel voor uitgaande berichten (publish) als voor binnenkomende berichten (subscribe).
Een alternatief is het gebruik van Python. Vanuit Python hebben we toegang tot de GPIO-poorten. We hebben in dit geval een MQTT-library nodig, om de Raspberry Pi als MQTT-client te kunnen gebruiken. De Paho-library is hiervoor geschikt.
- documentatie van Paho-library: https://eclipse.org/paho/clients/python/
- installeren van Paho-library:
pip install paho-mqtt
- gebruik van Paho-library in Python:
import paho.mqtt.client as mqtt
- zie verder de Paho-documentatie.
Voorbeeld: Arduino (enz.) met RFM69
We gebruiken in dit geval een andere radio: de RFM69 gebruikt de 868 MHz-band. Hierdoor heeft deze een groter bereik dan het normale WiFI-bereik; bovendien is er minder kans op storing: op veel plaatsen is de WiFi-band nogal druk bezet, door WiFi, Bluetooth (en magnetrons;-). Deze radio is bovendien energie-zuinig (ten opzichte van WiFi).
De radio-module sluiten we door middel van een speciaal bordje aan op de Arduino: dit zorgt voor de mechanische en elektrische aanpassing. De radio gebruikt 3.3V, waar een normale Arduino 5V gebruikt.
Evaluatie
Als je het energieverbruik van een node erg klein wilt maken, bijvoorbeeld om een kleinere batterij te gebruiken, of om minder vaak de batterij te vervangen, dan kun je de volgende maatregelen nemen:
- beperk het gebruik van de radio;
- hoewel zenden meer energie kost dan ontvangen, vraagt ook het ontvangen de nodige energie. Een ontvanger die continu aanstaat vraagt dan uiteindelijk veel meer energie dan een zender die maar even actief is.
- zet de node zoveel mogelijk in de "sleep" toestand;