Maak een weerstation met je Arduino
Eerder schreven we al over de Arduino: een goedkope programmeerbare microcontroller die de basis vormt voor zelf in elkaar geknutselde projecten. Het kan nog leuker: een Arduino met ingebouwde wifi-chip maakt het mogelijk om ook aan internet verbonden projectjes te maken! We gaan aan de slag met het ontwikkelbordje NodeMCU om een weerstation te maken.
Zoals gezegd besteedden we al eerder in Computer!Totaal aandacht aan Arduino, een opensource elektronicaplatform dat je zelf kunt programmeren en kunt gebruiken in combinatie met elektronische componenten. Hier kun je op onze website een aantal artikelen over Arduino lezen. Erg leuk om mee te knutselen, maar het heeft één nadeel: het blijft door gebrek aan netwerkmogelijkheden bij lokale projecten.
Een Arduino met wifi opent deuren naar nieuwe mogelijkheden. Je kunt informatie van internet ophalen en tonen, of je Arduino bijvoorbeeld inzetten als sensor die jou waarschuwingen geef, ook als je buitenshuis bent. In deze cursus gaan we een dergelijke Arduino met wifi inzetten voor twee met internet verbonden projecten die beide met weersinformatie te maken hebben. We hebben gekozen voor de NodeMCU.
Het project Weeralarm laat je aan de hand van een brandend ledje in één oogopslag zien of er in jouw regio momenteel een weeralarm van kracht is, waarbij uiteraard onderscheid gemaakt wordt tussen de verschillende kleuren die het KNMI hanteert. Uiteraard zijn ledjes niet de enige manier waarop je informatie kunt tonen. In het tweede project, Weermonitor, gebruiken we daarom een oled-schermpje waarop we weersinformatie van een zelfgekozen weerstation in Nederland tonen. Eerst wat algemene uitleg.
01 Wat is de NodeMCU?
De NodeMCU is technisch gezien geen Arduino, maar een ontwikkelbordje gebaseerd op de ESP8266 wifi-module. Je kunt deze wifi-module ook los kopen en koppelen met een Arduino. De chip is echter zo krachtig dat hij ook functioneert als een complete microcontroller. Deze chip is herkenbaar als een zilverkleurig blokje op de printplaat.
Naast de ESP8266 bevat de NodeMCU een usb-interface voor de communicatie met de ontwikkelomgeving, een voedingscircuit en twee rijen aansluitpinnen voor gebruik op een breadboard. Het NodeMCU-ontwikkelbordje is oorspronkelijk ontwikkeld voor de NodeMCU-ontwikkelomgeving waarin de programmeertaal Lua gebruikt wordt. NodeMCU en het bijbehorende bordje zijn bedoeld om op een goedkope manier IoT-projecten te maken. Het werd echter nog leuker toen ontwikkelaars ondersteuning voor de ESP8266-chip in de Arduino-ontwikkelomgeving inbouwden. Hierdoor kun je bordjes op basis van ESP8266 zoals de NodeMCU als een Arduino-bordje gebruiken.
Het grote voordeel van de NodeMCU ten opzichte van andere Arduino-bordjes voorzien van wifi is dat dit bordje erg goedkoop is. Voor drie euro heb je een compleet bordje met ingebouwde wifi-radio, dat je kunt programmeren met de Arduino-ontwikkelomgeving. Je vind de NodeMCU-bordjes op bijvoorbeeld eBay of AliExpress. Let wel op dat je de juiste versie koopt, koop er een die wordt aangeduid met 1.0 of v2. De v3 (ook aangeduid als LoLin) is breder en past hierdoor niet goed op een breadboard.
©PXimport
02 Een hoop pinnen
Net als bij een Arduino kan het aantal aansluitpinnen op de NodeMCU wat afschrikken, maar wees gerust: we gebruiken er slechts een paar. Er zit bovendien nogal wat herhaling in, zo zijn er drie 3V3-aansluitingen (+3,3 volt) en zelfs vier GND-pinnen (ground of 0 volt). De aansluitingen met dezelfde namen zijn onderling doorverbonden. Voor de schakelingen die je in zelfgebouwde projecten gebruikt, zijn vooral de digitale aansluitingen (het rijtje D0 tot en met D8) van belang. Deze aansluitingen gebruiken we om digitale signalen te versturen en uit te lezen. Daarnaast bevat de NodeMCU ook de analoge ingang (A0). Deze ingang verwerkt analoge signalen en kun je bijvoorbeeld gebruiken om sensoren uit te lezen om omgevingsfactoren te meten, zoals temperatuur en vochtigheid. De reset-pin (RST) spreekt voor zich en VIN dient om de module te kunnen voeden zonder usb-kabel. Als de module wel via de usb-kabel is verbonden, is deze aansluiting te gebruiken voor externe componenten die meer dan 3,3 volt nodig hebben.
©PXimport
03 Werking breadboard
Om de NodeMCU te gebruiken voor projecten, sluit je componenten als leds en weerstanden met jumperdraden aan. Het breadboard is letterlijk de basis van de schakelingen. Alsof het ministeck is, steek je alle componenten in de gaatjes, zodat die componenten onderling worden verbonden. Het breadboard is opgebouwd uit drie delen: aan weerszijden twee blauw-rood gemarkeerde rijen gaatjes en een deel ertussenin met een soort gootje in het midden. De gaatjes van het breadboard zijn op een slimme manier met elkaar verbonden. De buitenste twee delen bestaan elk uit twee rijen onderling verbonden gaatjes. Je hebt dus aan weerszijden van het breadboard een rode en een blauwe rij over de volle lengte van het breadboard.
In het middelste deel zijn telkens vijf gaatjes met elkaar verbonden. Als je goed kijkt, zie je cijfers en letters die de gaatjes coördinaten geven. De letters zijn van elkaar gescheiden en de cijfers vormen twee rijtjes van vijf verbonden gaatjes. Zo zijn a15 t/m e15 met elkaar verbonden en f15 t/m j15 ook. Tussen e15 en f15 loopt dus geen verbinding. De illustratie maakt het duidelijk. De grijze lijntjes geven aan op welke manier de gaatjes onderling zijn verbonden. Dus: telkens vijf gaatjes in het middelste deel en alle gaatjes over de hele lengte aan de buitenkanten. Overigens zijn de twee buitenste rijen niet met elkaar verbonden, al hebben ze dezelfde kleurcode. In onze schakelingen gebruiken we altijd de blauw gemarkeerde rij voor GND en de rood gemarkeerde rij voor 3,3 volt. Om praktische redenen werken we in deze cursus niet met coördinaten. Nu je weet hoe de gaatjes met elkaar zijn verbonden, kun je immers zelf bepalen wat je waar in het breadboard prikt. Een vuistregel: zorg ervoor dat er nooit meer dan één pootje van een component in hetzelfde rijtje zit. Prik dus nooit een led in a15 en b15, maar in a15 en a16. In e15 en f15 kan weer wel, want daartussen zit geen verbinding.
©PXimport
04 Werken met de Arduino-ontwikkelomgeving
De ontwikkelomgeving voor Arduino is een zogeheten integrated development environment oftewel IDE. We schrijven de programma’s (binnen de IDE ‘schets’ genoemd) erin, testen ze met de ingebouwde debugger en uploaden ze ermee naar de ESP-module.
De programma’s bestaan ten minste uit de functies setup en loop (lus). Alles wat in setup staat, wordt eenmalig uitgevoerd. Hier bepalen we onder andere welke aansluitpinnen we gaan gebruiken en of dat ingangen of uitgangen worden. Binnen loop staan instructies voor bijvoorbeeld het uitlezen van sensoren en het aan- en uitzetten van een led. Alles in dit gedeelte van het programma wordt oneindig vaak herhaald. Instructies die je slechts af en toe wilt uitvoeren, zet je in een of meerdere functies die je zelf definieert. In de praktijk wordt setup() nog voorafgegaan door variabelen die door het hele programma gebruikt worden. We kunnen bijvoorbeeld een pinnummer toewijzen aan een led of een drukknop, zodat we in de code niet alle pinnummers en de daarop aangesloten componenten hoeven onthouden.
©PXimport
05 Controleren en uploaden
Nadat de benodigde code is ingevoerd of geladen, is de eerste stap het verifiëren ervan. Dat gaat met het knopje met de V links bovenin. De IDE test niet de werking van de code, maar controleert of de structuur klopt. Heb je bijvoorbeeld alles netjes gegroepeerd en worden onderdelen correct geopend en afgesloten? En is er niet twee keer een andere waarde toegekend aan een constante? Overigens wordt de code voor het uploaden automatisch nog gecontroleerd. Dat voorkomt dat je code naar de module uploadt waardoor die zou kunnen vastlopen. Fouten worden gemeld in het zwarte venster onderaan.
De laatste stap is het al genoemde uploaden van je code. Dat gebeurt met de knop met de pijl naar rechts en bestaat uit drie fases, die automatisch na elkaar worden uitgevoerd. De eerste fase is zoals gezegd het controleren van het programma. De tweede fase is het compileren, dat is het omzetten naar instructies die de processor begrijpt. Die instructies zijn voor mensen onhanteerbaar, vandaar deze vertaalslag. Dit betekent overigens dat je de code niet op een later moment van de ESP-module kunt downloaden om er verder aan te werken. Bewaar je programma’s dus altijd goed! De derde en laatste fase is het daadwerkelijk versturen van de gecompileerde versie van het programma naar de module.
©PXimport
Installeren van de ontwikkelomgeving
Voordat je aan de slag kunt met de NodeMCU, moet je eerst het stuurprogramma en de Arduino-ontwikkelomgeving installeren. Op Windows-pc’s, macOS-computers en Linux-systemen wordt de module automatisch herkend, nadat je de Arduino-ontwikkelomgeving (IDE) hebt geïnstalleerd. Doe dat dus altijd als eerste!
- Installeer Arduino IDE.
- Sluit de NodeMCU aan met de usb-kabel. Als bij deze stap de module onverhoopt toch niet wordt herkend, trek dan de usb-kabel van module los. Download vervolgens de driver voor Windows of voor macOS (let op: downloadt direct) en pak het zip-bestand uit. Installeer de driver (voer bij Windows Setup.exe uit) en sluit de module weer aan.
- Start de Arduino IDE en geef indien nodig de firewall toestemming.
- Klik op Bestand / Voorkeuren en voer op het tabblad Instellingen de url http://Arduino.esp8266.com/stable/package_esp8266com_index.json in bij Additionele Board Beheer URLs.
- Voeg de module toe aan de IDE via Hulpmiddelen / Board / Boardbeheer.
- Zoek op ‘esp’ en klik bij esp8266 by Community op Installeren.
- Selecteer het juiste bord: Hulpmiddelen / Board / NodeMCU 1.0 (ESP-12E Module).
- Selecteer tot slot de juiste poort (Hulpmiddelen / Poort, kies de COM-poort met het hoogste nummer).
Arduino en nu online verder
De twee projecten die u op de volgende pagina’s vindt, zijn afkomstig uit het pakket ‘Arduino en nu online verder’, van dezelfde makers als dit tijdschrift. Het pakket bestaat uit een instructieboek met daarin 14 projecten. Daarnaast vind je in het pakket de NodeMCU, een breadboard en alle componenten die je nodig hebt om alle projecten te bouwen. Je vindt het pakket zolang de voorraad strekt hier. Normaal gesproken kost dit pakket 64 euro, gebruik de code ARDUINOTOTAAL om 10 euro korting te krijgen!
Benodigde componenten
- NodeMCU
- Breadboard
- 5 jumperdraden
- 1 rode led
- 1 oranje led
- 1 gele led
- 1 groene led
- 4 weerstanden van 100 ohm
01 Schakeling bouwen
De schakeling voor het weeralarm is eenvoudig: we sluiten een groene, gele, oranje en rode led op de NodeMCU aan. Voor elke led gebruiken we een aparte aansluiting op het bordje: de pinnen D1, D2, D5 en D6, die we in de code instellen als digitale uitgang. Verbind voor elke led de kathode (het korte pootje) van de led via een weerstand van 100 ohm met GND om de stroom door de led te begrenzen. De anode (het lange pootje) van de rode led sluit je aan op D1, die van de oranje led op D2, die van de gele led op D5 en die van de groene led op D6. Heb je niet alle kleuren leds tot je beschikking, dan kun je uiteraard ook andere kleuren gebruiken. Maar dat is natuurlijk wel minder leuk en minder duidelijk.
02 Uploaden code
Je kunt de code voor dit project hier downloaden. Open de code in de ontwikkelomgeving. Stel als eerste de naam van je draadloze netwerk (in plaats van SSID) en het wachtwoord van je draadloze netwerk in (in plaats van WACHTWOORD). Vervolgens kun je de juiste regio instellen, zodat je het weeralarm van jouw regio ziet. Het oorspronkelijke weeralarm gold voor heel Nederland, maar sinds 2010 geeft het KNMI een weeralarm per provincie. Het KNMI heeft Nederland daarom ingedeeld in vijftien regio’s. Een regio per provincie plus de Waddeneilanden, de Waddenzee en het IJsselmeergebied. In de code die je voor dit project kunt downloaden, vind je de url “/weeralarm.php?regio=utrecht” terug. Je kunt utrecht vervangen door limburg, zeeland, noord-brabant, zuid-holland, noord-holland, gelderland, flevoland, overijssel, drenthe, groningen, friesland, ijsselmeergebied, waddenzee of waddeneilanden om de juiste regio te tonen. Upload de code vervolgens naar de NodeMCU en druk op het resetknopje. Na een korte tijd gaat het lampje branden van de weercode die momenteel in jouw regio actief is.
©PXimport
ESP8266 in een domoticasysteem
De Arduino-ontwikkelomgeving is niet de enige software die je in combinatie met de ESP8266 kunt gebruiken. In editie 12/2017 hebben we het NodeMCU-bordje gebruikt als basis om sensoren te verbinden met domoticasysteem Domoticz. Hiervoor gebruikten we de ESP Easy-firmware die een webinterface biedt waarmee je eenvoudig aangesloten sensoren als een bewegingsmelder, thermometer of luchtvochtigheidsmeter kunt uitlezen. Je kunt het artikel hier teruglezen.
©PXimport
Project Weermonitor
Benodigde componenten
- NodeMCU
- Breadboard
- 4 jumperdraden
- Oled-scherm
01 Schakeling bouwen
De schakeling voor de weermonitor is nog eenvoudiger dan die van het weeralarm. Het enige dat we doen is een eenvoudig beeldschermpje aansluiten. Dat kan met vier draadjes. VCC en GND van het schermpje verbinden we respectievelijk met 3.3V en GND op de ESP-module, SCL met D1 en SDA met D2. En daarmee is onze schakeling klaar. Er zijn verschillende schermpjes te koop die je kunt gebruiken in combinatie met ontwikkelbordjes. We gebruiken een I2C-OLED-schermpje met witte weergave met een afmeting van 0,96 inch met een resolutie van 128 x 64 pixels, voorzien van vier aansluitpinnen. Wil je een dergelijk schermpje los kopen, tik dan in bijvoorbeeld eBay of AliExpress de zoekterm “i2c oled 4 pin white Arduino”. Zo’n schermpje is voor zo’n 2,50 euro te vinden.
02 Oled-driver installeren
Om het oled-schermpje aan te sturen, hebben we een extra library nodig: esp8266-OLED. Download het zip-bestand, pak het uit en plaats de uitgepakte map in de map libraries van je map met Arduino-schetsen (Documents\Arduino onder je persoonlijke map in Windows). Maak eventueel de map libraries aan als die nog niet bestaat. Herstart daarna de Arduino IDE. We kunnen nu in onze code de nieuwe library gebruiken met de regel #include "OLED.h". Overigens voegen we ook een regel #include <Wire.h> toe, omdat de library OLED de library Wire nodig heeft voor de communicatie met het schermpje.
03 Code instellen
Je kunt de code voor dit project hier downloaden. Om de schets te laten werken vul je in de code de naam van je draadloze netwerk in plaats van SSID en je wachtwoord in plaats van WACHTWOORD. In de regel daarna kun je het nummer van het gewenste weerstation instellen. Ieder weerstation heeft een viercijferig nummer. Standaard staat hier 6260, de code voor het weerstation bij De Bilt. Je vindt alle weerstations hier. Upload de code vervolgens naar de NodeMCU. Herstart het bordje door op het resetknopje te drukken en de weergegevens verschijnen op het schermpje.
©PXimport