Arduino IDE¶
Voor een uitgebreidere uitleg van de Arduino IDE en het programmeren van embedded systemen hiermee, verwijzen we naar het thema “Physical Computing”. We beschrijven hier alleen de extra stappen die nodig zijn voor het programmeren van de IoT-knopen.
Installeren Arduino IDE¶
- zie: https://www.arduino.cc/en/Main/Software, Download the Arduino IDE.
Opmerking: naast de desktop-versie is er tegenwoordig ook een Arduino IDE “in the cloud”. Deze cloudversie is niet bruikbaar voor deze module.
Notitie
- selecteer voor het uploaden altijd het juiste board;
- soms moet je extra gegevens selecteren, zoals de kloksnelheid;
- bijvoorbeeld: Processor: “ATmega328P (3.3V, 8MHz)”
- voor de ESP8266 en de ESP32 moet je de grootte van het Flash-memory instellen passend bij je hardware;
- reserveer daarbij tenminste 1MB voor het SPIFFS filesysteem, voor het opslaan van de configuratie;
- bijvoorbeeld (Wemos D1 mini): Flash size: “4M (1M SPIFFS)”
- selecteer in de Seriële Monitor dezelfde baudrate als ingesteld in het programma op het board (zie de “setup”).
Installeren extra boards¶
Via de board manager kun je extra boards (microcontroller-types) installeren, bijvoorbeeld voor de ESP8266 of ESP32.
- Zoek je board via Hulpmiddelen->Board->Board beheer;
- Als je board niet in de lijst voorkomt, voeg je de URL voor dit bord toe in de “preferences”, onder “Additionele Board Beheer URLs”.
- Installeer je de board-software via Hulpmiddelen->Board->Board beheer: selecteer “More Info” bij de betreffende beschrijving, en klik op “Installeer”.
Dit wordt ook uitgelegd bij de betreffende installatie-instructies:
- ESP32
- installatie-instructies ESP32
- URL voor board-beheer: https://dl.espressif.com/dl/package_esp32_index.json
Installeren USB device-driver¶
CP210x (WeMos D1 mini pro v1)¶
Voor het gebruik van het WeMos D1 mini pro V2 bordje heeft je computer een speciale USB device-driver nodig. Deze kun je downloaden via:
Selecteer de versie voor het OS van je computer, en installeer deze.
CH304x (WeMos/LoLin bordjes)¶
De WeMos/LoLin bordjes (met uitzondering van de WeMos D1 mini pro V1) gebruiken de CH304x USB-serieel omzetter. De driver hiervoor kun je downloaden via de (Chinese) website van de leverancier:
Selecteer de versie voor het OS van je computer, en installeer deze.
FT232 (Arduino mini pro)¶
Voor de Arduino mini pro gebruiken we de FT232 USB-serieel omzetter (“rode PCB”). De driver hiervoor kun je downloaden via:
Selecteer de versie voor het OS van je computer, en installeer deze.
Testen van de USB-driver¶
Je kunt controleren of het werkt via de Seriële Monitor van de Arduino IDE: als je het ESP8266-bordje verbindt met de computer, met de Seriële Monitor ingesteld op 115200, dan krijg je bij het opstarten van het bordje (via de reset-knop) meestal de nodige teksten te zien. Een volgende stap is dan het programmeren van het ESP8266-bordje met het Arduino Blink-programma, zie hieronder.
Testen van de keten¶
Als je de bovenstaande stappen gedaan hebt kun je controleren of de Arduino-keten werkt. Hiervoor gebruik je het programma “Blink”.
- Verbind het ESP8266-bordje met een USB-poort van je computer.
- Selecteer in de Arduino IDE het juiste board, via Hulpmiddelen->Board. (bijv.: LOLIN WeMos D1 mini);
- Pas zonodig de klokfrequentie aan voor je board (Arduino Pro Mini 3.3V 8MHz);
- Pas de instelling van het Flash-geheugen (ESP8266/ESP32) aan voor je hardware (Wemos D1 mini: 4MB); reserveer tenminste 1MB voor het filesysteem (SPIFFS).
- Selecteer de juiste poort (Hulpmiddelen->poort)
- Open de Arduino-sketch: Bestand->Voorbeelden->01.Basics->Blink
- “Upload” dit naar de ESP8266: pijl naar rechts in Arduino IDE.
Je ziet de resultaten van het compileren en van het uploaden onderin het sketch-venster. Als 100% van de code geladen is wordt het programma uitgevoerd. De ingebouwde LED moet dan gaan knipperen (1s aan, 1s uit).
Als je helemaal zeker wilt zijn kun je de “delay”-waarden in de Blink-sketch aanpassen, en het programma opnieuw uploaded. De LED moet dan met een andere frequentie gaan knipperen.
Mogelijke problemen en oplossingen
- als de communicatie tussen de Arduino IDE en de ESP8266 niet lijkt te werken, probeer dan een andere USB-kabel. Sommige USB-kabels zijn alleen geschikt voor stroomvoorziening (laden); voor datacommunicatie kan de kwaliteit sterk verschillen.
Installeren extra libraries¶
Er zijn twee manieren om een extra library te installeren:
- via Schets->Bibliotheek gebruiken->Bibiotheken beheren…
- via Schets->Bibliotheek gebruiken->.ZIP-bibliotheek toevoegen…
Deze laatste optie heb je nodig als de library niet in de lijst van bekende libraries voorkomt. Je moet dan eerst een ZIP-bestand met de betreffende library downloaden, bijvoorbeeld van GitHub. Deze kun je dan via deze tweede optie inlezen in de Arduino IDE.
Adafruit unified sensor library¶
De Adafruit unified sensor library vormt de basis voor veel sensor-libraries, ook voor de BME280 heb je die nodig.
- Selecteer Schets->Bibliothkeek gebruiken->Bibliotheken beheren…
- Zoek: Adafruit unified sensor
- Selecteer de Adafruit unified sensor library
- Klik op “Installeren”
Adafruit BME280 library¶
Voor het uitlezen van de BME280-sensor gebruiken we deze Adafruit-library. Deze installeer je als volgt:
- Selecteer Schets->Bibliothkeek gebruiken->Bibliotheken beheren…
- Zoek: BME280
- Selecteer Adafruit BME280 library
- Klik op “Installeren”
MQTT client library¶
Wij gebruiken de volgende mqtt-client-library voor de IoT-knopen:
- https://pubsubclient.knolleary.net
- voor Arduino met Ethernet shield
- ook voor ESP8266 (WiFi)
Deze installeer je op eenzelfde manier als de Adafruit BME280-library.
- Selecteer Schets->Bibliothkeek gebruiken->Bibliotheken beheren…
- Zoek: pubsub
- Selecteer de PubSubClient library (van Nick O’Leary)
- Klik op “Installeren”
Aanpassen van de maximale grootte van MQTT-berichten¶
Het default-maximum voor een MQTT-bericht is 128 bytes. Dit is voor onze toepassingen, in het bijzonder voor de RFM69 gateway, te klein. Bovendien heeft de ESP8266 genoeg ruimte voor grotere MQTT-berichten, in tegenstelling tot een normale Arduino (UNO, micro). Pas het default-maximum als volgt aan:
- Zoek uit in welke map de Arduino-code opgeslagen wordt, bijvoorbeeld via de Arduino IDE->Voorkeuren->Instellingen->Sketchbooklocatie. Open deze map.
- Open via dit pad de map
libraries/PubSubClient/src
. - Open met een teksteditor (Notepad, Atom, o.i.d.) het bestand
PubSubClient.h
- Pas regel 26 aan: max. grootte van MQTT-berichten van 128 naar 512 bytes:
#define MQTT_MAX_PACKET_SIZE 512
- Bewaar deze verandering.
Deze aanpassing hoef je maar eenmaal uit te voeren - totdat je een nieuwe versie van PubSubClient installeert.
Als je deze verandering niet doorvoert, worden kleinere berichten zoals van de buttons wel doorgegeven via MQTT, maar grotere berichten zoals van de sensoren mogelijk niet.
JSON library¶
Deze library gebruiken we voor het coderen van berichten in het JSON-formaat.
- Selecteer Schets->Bibliothkeek gebruiken->Bibliotheken beheren…
- Zoek: JSON
- Selecteer ArduinoJSON (van Benoit Blanchon)
- Selecteer versie 5.13.2 of nieuwer (niet versie 6)
- Klik op “Installeren”
Notitie
Denk erom dat je ArduinoJSON versie 5 installeert. De library-update installeert automatisch versie 6 als je niets opgeeft. De IoT-0 software is nog niet aangepast aan Versie 6.
Display library¶
De software wifi-node-xd kun je gebruiken met een klein OLED display; deze is geconfigureerd voor het Wemos mini display (64x48 pixels). Om deze software te vertalen moeten de volgende libraries geïnstalleerd zijn:
- Adafruit GFX library
- Adafruit SSD1306 Wemos mini OLED
- deze library vind je op GitHub: https://github.com/stblassitude/Adafruit_SSD1306_Wemos_OLED
- of: https://www.arduinolibraries.info/libraries/adafruit-ssd1306-wemos-mini-oled
File system¶
De software voor de ESP8266 WiFi-nodes (wifi-node-x(d)) en voor de WiFi/RFM69-gateway is configureerbaar. De configuratie wordt als bestand opgeslagen in het Flash filesysteem van de ESP8266. Je hebt hiervoor de filesystem library nodig: #include <FS.h>. Deze library maakt deel uit van de ESP8266-distributie: deze hoef je niet apart te installeren.
Uitleg over deze library vind je onder andere hier: https://circuits4you.com/2018/01/31/example-of-esp8266-flash-file-system-spiffs/
Voor het eerste gebruik moet het filesysteem geformatteerd worden. De software doet dit automatisch, als er geen filesysteem gevonden wordt. Het formatteren van het filesysteem kan tot enkele minuten duren, afhankelijk van de grootte van het filesysteem (bijvoorbeeld Wemos D1 mini pro: 16MB Flash).
Bij het vertalen van een programma dat het filesysteem gebruikt moet in de board-parameters ruimte voor het SPIFFS filesysteem gereserveerd worden, bijvoorbeeld: Flash size: “4M (1M SPIFFS)” (als je hardware 4MB flash heeft).
LowPower library¶
De belangrijkste manier om energie te sparen is: het grootste deel van de tijd in de “sleep”-toestand doorbrengen. Met behulp van de Low Power library kun je de Arduino in deze “sleep” toestand brengen, en regelmatig laten wekken.
- zie: https://github.com/rocketscream/Low-Power
- Zoek in Schets->Bibliothkeek gebruiken->Bibliotheken beheren…: “low-power management”
- Selecteer Low-power van Rocketscream, en installeer deze.
RF69min¶
Dit is een library voor eenvoudig gebruik van de RFM69. Niet alle mogelijkheden van de RFM69 en van communicatie worden benut, maar voor de toepassingen in deze module is deze library voldoende. Deze library gebruikt geen RFM69-interrupts.
De library hoeft je niet apart te installeren: het bestand rf69min.h is bijgevoegd in de broncode van de voorbeelden. Dit bestand bevat de volledig library-code.
LMIC¶
- zie: https://github.com/matthijskooijman/arduino-lmic
- Zoek in Schets->Bibliothkeek gebruiken->Bibliotheken beheren…: “LMIC”
- Selecteer LMIC van Matthijs Kooijman, en installeer deze.
Installeren iot2018-voorbeelden¶
- ga in de browser naar: https://github.com/eelcodijkstra/iot2018
- klik op “Clone or download” (groene knop), selecteer: “download .zip”
- pak het zip-bestand uit, en plaats de folder
iot2018
in de Arduino-sketchbook-folder. (De locatie daarvan vind je via de Arduino “preferences”.)
F.A.Q. - als het niet werkt¶
- foutmelding:
- je hebt waarschijnlijk de verkeerde versie van ArduinoJSON: gebruik versie 5 in plaats van versie 6. Zie JSON library
- configureren van de wifi IoT-knoop lukt niet: de knoop start na configureren weer op in Access Point (AP) mode.
- je hebt waarschijnlijk de grootte van het Flash Filesysteem (SPIFFS) in de board-instellingen op 0 staan. Voor de Wemos D1 mini (4MB Flash) moet dit zijn: Flash size: “4M (1M SPIFFS)” (of meer).