Dankzij de Raspberry Pi heb je eindeloze mogelijkheden om er een slim apparaatje van te maken. Je moet echter wel zelf programmeren om de aangesloten sensoren, schakelaars of andere apparaatjes met elkaar te laten samenwerken. Met Node-RED doe je dat visueel in de browser en sleep je als het ware je applicatie bij elkaar. Makkelijker kan het bijna niet. 

Auteur: Serge Gielkens

Bij Node-RED rijg je bouwstenen aan elkaar tot een zogenaamde flow. Die bouwstenen heten nodes en voeren een bepaalde actie uit. Zo zijn er nodes om sensordata uit te lezen of een schakelaar om te zetten. De flow bepaalt de volgorde van deze acties. Met Node-RED doe je dat op een intuïtieve manier in een webinterface.

In dit artikel zie je dat op basis van enkele standaard componenten voor de Raspberry Pi (zie afbeelding 1). Met het breadboard maak je een schakeling zonder te hoeven solderen. Het groene ledlampje schakelen we handmatig. Dat is een standaard ledje van 5 mm diameter. Gebruik als voorschakelweerstand minimaal 330 Ω. Wij kiezen 1 kΩ. Het rode ledje reageert op een PIR (Passive InfraRed) bewegingssensor. Zo’n sensor is gevoelig voor warmte. We maken het af door een foto met gezichtsdetectie te maken in geval van beweging.

1. Schakeling

 

Voorbereidingen

Download van de website van Raspberry het image Raspbian Buster with desktop. Zet dat op een microSD-kaartje. Met Etcher (zie kader Links) is dat in een handomdraai gebeurd. Steek het kaartje in de Raspberry Pi en koppel er een scherm met een toetsenbord en muis aan. Schakel dan de voeding in. De eerste keer vraagt Raspbian je nog enkele zaken om de installatie af te ronden.

Ga in het startmenu naar Preferences -> Recommended Software. Kies links de optie Programming en selecteer rechts Node-RED. Klik rechtsonder op OK om de installatie ervan te beginnen. Node-RED vind je nu in het startmenu onder Programming. Om in het vervolg geen scherm en dergelijke meer nodig te hebben, starten we de service voortaan bij iedere boot automatisch op. Tik daartoe het volgende in op de commandoregel:

sudo systemctl enable nodered

 

Om dan later nog wel toegang tot de Raspberry Pi te hebben, doe je hetzelfde voor SSH:

sudo systemctl enable ssh

 

Om de Pi camera te activeren, ga je in het startmenu naar Preferences -> Raspberry Pi Configuration. Activeer in het tabblad Interfaces bij Camera de optie Enable. Voer de gevraagde reboot uit, waarna de services voor Node-RED en SSH ook meteen draaien.

Voeg een dashboard toe

Voor de webinterface van Node-RED browse je op de pc naar raspberrypi:1880. Bij Raspbian is raspberrypi de standaard hostnaam. Links zie je alle beschikbare nodes staan, die gerangschikt zijn per categorie, zoals input en function. Dit heet de palette. Door een node te selecteren, zie je rechts gedetailleerde informatie over het gebruik ervan. In het centrale deel, de workspace, maak je de flow.

Om het groene ledje aan- en uit te schakelen hebben we een dashboard nodig, maar de nodes daarvoor zijn nog niet aanwezig. Ga daarom helemaal rechtsboven via het hamburgericoontje (drie horizontale strepen) naar Manage palette. Tik in het tabblad Install bij het zoekveld dashboard in. Klik rechts naast node-red-dashboard op install. Een pop-up scherm verwijst je naar de informatie. Lees die altijd even na. Soms is bijvoorbeeld aanvullende software op de Raspberry Pi nodig. Klik nu in deze pop-up op Install. Als de installatie klaar is, klik je op Close rechtsboven om weer terug te keren naar het hoofdscherm.

Ledje uit, ledje aan

De dashboard nodes vind je in de palette helemaal onderaan bij de categorie dashboard. Klik hier op de switch node en sleep hem naar de workspace. Voeg uit de categorie Raspbery Pi op dezelfde manier een rpi gpio uitvoer node toe. Het bolletje daarvan zit aan de linkerkant. Verbind in de workspace beide nodes door met de muis eerst het ene bolletje te selecteren en vervolgens de muis te verplaatsen naar het andere bolletje. Een node of verbinding haal je weg door hem te selecteren en vervolgens op de Delete-toets te drukken.

2. Ledje aan- en uitschakelen

 

Het dashboard is georganiseerd in tabbladen met groepen (zie afbeelding 2). Dit gebruik je om bijvoorbeeld per woningkamer een tabblad aan te maken en daarop schakelaars te groeperen voor een beter overzicht. Er moet minstens één tabblad met groep zijn. Dubbelklik op de switch. Klik bij Group op het edit icoontje met het potloodje en geef als naam Mijn ledjes. Omdat er nog geen tabblad is, voeg je die toe via het potloodje bij Tab. Verander de naam in Mijn schakeling en klik rechtsboven op Add. Je bent weer terug in het Group scherm. Klik ook hier op Add om terug te keren naar het switch scherm. Geef daar tot slot als label Schakelaar en klik rechtsboven op Done.

Dubbelklik daarna op de rpi gpio node. Bij Pin krijg je keurig de aansluitpinnen van de Raspberry Pi te zien samen met bijbehorende GPIO nummering. Kies hier GPIO26. Controleer dat Type op Digital output staat. Zorg voorts dat de led standaard uit is door de optie Initialise pin state aan te vinken. Check dat daaronder low (0) staat. Als je Name leeg laat, zie je in de flow PIN 37. Tik voor een wat sprekender naam Groene led in en klik tot slot op Done.

Je eerste flow bestaat nu alleen in je browser. Bij het afsluiten ervan ben je dan ook al je moeite kwijt. Klik daarom op de rode knop Deploy rechtsboven om de applicatie naar de Raspberry Pi over te zetten. Open nu het dashboard door in een nieuw tabblad naar raspberrypi:1880/ui te gaan. Klik op het schakelaartje om het groene ledje aan- of uit te zetten. Maak nu zelf voor de variatie een dimmer met de slider node.

Bewegingsmelder

Het rode ledje laten we reageren op de PIR bewegingssensor (zie afbeelding 3). Ga terug naar de workspace en voeg een rpi gpio invoer node toe. Dubbelklik hierop en selecteer de GPIO7 pin; dat is de middelste aansluiting van de bewegingssensor. Geef als naam Bewegingssensor en klik op Done. Voeg vervolgens een rpio gpio uitvoer node toe, net zoals hierboven voor de groene led. Zorg wel dat je nu pin GPIO19 selecteert en als naam Rode led invoert. Verbind tenslotte de twee nodes met elkaar en druk op Deploy.

3. Gezichtsdetectie

 

Door nu met je hand langs de bewegingssensor te bewegen, springt het rode ledje aan. Na enkele seconden dooft hij weer. Hiervan willen we een melding hebben op het dashboard. Voeg uit de categorie function een function node toe en uit de categorie dashboard een text node. Verbind Bewegingssensor met de function node en die op zijn beurt met de text node. Dubbelklik op de functie en geef als naam Bepaal melding. Bij Function tik je de volgende code in:

if (msg.payload == 1)
{
      msg.payload = "Iemand aanwezig";
}
else
{
      msg.payload = "Alles rustig";
}
return msg;

In Node-RED is msg het bericht dat nodes onderling uitwisselen. Dat heet een object. Zo’n object heeft kenmerken en properties. payload is het standaard kenmerk. De inhoud daarvan vraag je op met de combinatie msg.payload. Bij beweging vult Bewegingssensor die met de waarde 1, anders blijft die 0.

Dubbelklik op de text node. Kies bij Group voor [Mijn schakeling] Mijn ledjes. Dat zijn het tabblad en de groep, die je hierboven bij het groene ledje hebt gedefinieerd. Geef als label Beweginsmelding. Vergeet niet op Deploy te klikken en ga dan naar het dashboard. Beweeg de hand over de sensor. Het ledje en de bewegingsmelding reageren hierop synchroon.

Maak een foto

Laten we nu vastleggen wat zich bij de sensor afspeelt. Voeg allereerst de module node-red-contrib-camerapi toe via het menu Manage palette. Plaats nu de extra camerapi-takephoto node uit de categorie Raspberry Pi in de workspace en verbind die met Bewegingssensor.

Om te zien wat de camera opneemt, voeg je de module node-red-contrib-image-tools toe aan de palette. Plaats uit de nieuwe categorie image tools de viewer node in de workspace en koppel hem aan de uitvoer van de camerapi-takephoto node. Dubbelklik op deze laatste en zet File Mode op Buffered Mode. Hiermee zorg je dat de gemaakte foto als object beschikbaar blijft voor de viewer en niet als bestand naar de Raspberry Pi wordt weggeschreven. Druk op Deploy. Door nu in de buurt van de sensor te komen zie je in de preview een opname van jezelf.

Laat je gezicht zien

Als kers op de taart maken we het af met gezichtsdetectie. Daarvoor heb je de module node-red-contrib-opencv nodig. De informatie daarvan zegt dat het pakket libopencv-dev nodig is:

sudo apt-get install libopencv-dev

Installeer daarna de module via het menu Manage palette.

De opencv node vind je in de categorie analysis. Voeg die toe aan de flow en koppel daaraan een tweede viewer node. Dubbelklik op de opencv node en zet Detect op Face. Standaard staat bij Output de optie JSON. De node vult dan msg.payload met de coördinaten van de rechthoek rondom het gezicht. In overige gevallen is msg.payload leeg. Verander dit in Image buffer, zodat je een foto krijgt samen met een rode cirkel rondom het gezicht.

Voor de gezichtsdetectie heeft opencv wat tijd nodig. Om een wachtrij te voorkomen, begrenzen we het aantal foto’s. Voeg daartoe uit de categorie function een delay node toe. Zet die tussen de camerapi-takephoto en opencv node. Dubbelklik erop, kies als actie Rate Limit, zet Rate op 1 msg per 60 Seconds en vink de optie drop intermediate messages aan. Klik op Deploy en test of je gezicht gevonden wordt door voor de camera te verschijnen.

En verder

Ga nu zelf aan de slag. Gebruik het bovenstaande om bijvoorbeeld een automatisch kattenluik te maken of laat een LCD-scherm aanspringen als iemand aanbelt. Verder zijn er meer dan genoeg modules om zonder al teveel moeite een geheel nieuw project te beginnen. Met Node-RED is programmeren gewoon weer leuk.