WiFi-MQTT¶
We gebruiken een IoT-knoop op basis van de ESP8266, met als software mqtt-node-0
.
Deze software is te vinden op GitHub: https://github.com/eelcodijkstra/iot2018.
Gebruik¶
Bij het opstarten van de IoT-knoop probeert deze eerst contact te maken met het lokale WiFi-netwerk, en daarna met de broker. Als dit gelukt is, stuurt de knoop regelmatig de waarden van de sensoren naar de broker. De tijd tussen twee sensormeldingen verdubbelt na 10, 100 en 1000 stappen: na het opstarten van de knoop kun je snel controleren of alles goed werkt. Na ruim een dag krijg je de meldingen om de 4 minuten (volgens de huidige instellingen). Na een reset/power-up begint de knoop weer opnieuw te tellen.
Je kunt de gegevens van de knoop bekijken met MQTTT, via NodeRed, of via je eigen toepassing. Via MQTTT kun je ook de LEDs (actuatoren) besturen.
De sensorwaarden worden gepubliceerd met topic node/xxxx/sensors
;
de actuatorwaarden worden ontvangen met topic node/xxxx/actuators
.
Hierin is xxxx
de node-id van de IoT-knoop.
De nodeid is afgeleid van het WiFi-MAC-adres: het is een string die bestaat uit de laatste 4 hexadecimale cijfers.
Het formaat voor de sensor- en actuatordata staat beschreven in JSON-LPP formaat; dit JSON-formaat is afgeleid van het binaire IoT-LPP formaat.
De IoT-knoop geeft de nodige meldingen bij het opstarten en bij het ontvangen en versturen van berichten. Deze kun je volgen via de Seriële Monitor van de Arduino IDE. Zorg ervoor dat je de juiste USB-poort selecteert, en dat je de baudrate van de Seriële Monitor goed instelt (volgens de huidige configuratie: 115200).
Configuratie¶
De software moet geconfigureerd worden voor de toegang tot het lokale WiFi-netwerk, en voor de gebruikte MQTT-broker.
Notitie
We gebruiken in eerste instantie een MQTT-broker in het publieke internet. Deze moet vanuit het lokale netwerk toegankelijk zijn, via de poorten 1883: MQTT over TCP, en 1884: HTTP/websockets over TCP. Dit kan problemen opleveren voor een schoolnetwerk; zie: Gebruik via het schoolnetwerk.
Voor het gebruik van het lokale WiFi-netwerk heb je de naam (ssid) en het wachtwoord nodig:
// WiFi
const char* ssid = "...";
const char* password = "...";
Voor het configureren van de server gebruik je de domeinnaam (string, bijvoorbeeld: “mijndomein.nl”) of het ip-adres (4 getallen). Je hebt voor de meeste brokers ook een gebruikersnaam en wachtwoord nodig.
// PubSub (MQTT)
const char* mqttServer = "...";
// alternative: IPAddress mqttServer(172, 16, 0, 2);
const int mqttPort = 1883;
const char mqttUser[] ="...";
const char mqttPassword[] ="...";
Sensorperiode
Je kunt de tijd tussen twee sensormeldingen instellen, via sensor1TimerPeriod
.
In de huidige opzet is de waarde die gegeven wordt bij de declaratie/initialisatie van de variabele de beginwaarde voor deze tijd.
Na 10, 100 en 1000 stappen wordt deze waarde verdubbeld.
De normale instelling is: 30 seconden gedurende de eerste 5 minuten, daarna 1 minuut gedurende de volgende 1,5 uur (ongeveer),
daarna 2 minuten, en na ruim 1 dag 4 minuten.
Uitbreiden van de hardware¶
Je kunt andere sensoren en actuatoren toevoegen. De belangrijkste beperking hiervoor is het aantal pinnen van de ESP8266. (De ESP32 heeft meer vrije pinnen.) Je moet dan de aansturing van deze sensoren en actuatoren toevoegen. Ook moet je de JSON-berichten voor de sensoren en actuatoren aanpassen: gebruik hiervoor bij voorkeur het JSON-LPP formaat.
Gebruik van een lokale broker¶
Te doen
- uitwerken van WiFi-MQTT met lokale broker
- gebruik van lokale broker als bridge naar een publieke broker.