Een computer is niet meer het enige device dat online is. Andere apparaten zoals een smartwatch of koelkast zijn ook online. Bij u thuis alleen al kan er een netwerk bestaan uit lampen, een thermostaat, sieraden, de auto’s, en uw koelkast. Samen vormen deze het ‘Internet of Things’.
Dankzij het netwerk van devices automatiseer je het hele huis. Natuurlijk kun je zelf ook op afstand je lampen blijven bedienen.
Een ‘smart home’ klinkt misschien ver weg, maar in dit artikel laten we zien hoe je zelf een Ledstrip smart maakt en deze bestuurt vanuit de cloud. Met niet meer dan een goedkoop ledstripje en een Raspberry Pi kun vanuit je eigen slack-app je kleuren instellen.
Een chatbot waarbij je kleuren kunt aanpassen
Vanuit de chatbot moet het mogelijk zijn om kleuren aan te passen. Gewoon omdat het cool is! In dit project zit het hele proces van het opzetten van een Internet-of-things-device (IOT). Van het aansturen van poorten tot het koppelen aan een internet dienst. Voor dit artikel heb ik gekozen om dit via Slack te doen. Slack is een chatprogramma om snel binnen teams te communiceren. Slack biedt ook de mogelijkheid om een chatbot in deze gesprekken te integreren.
Wat ben ik hiervoor nodig?
- Raspberry Pi (2 of 3)
- Micro SD –kaart
- 2,5 Ampère Micro USB-voeding
- Ledstrip (12V 5050 RGB-ledstrip)
- 3 Transistors (BD139)
- Breadboard en draadjes
- Leddimmer. (PWM-board: PCA9685)
TL;DR
Raspberry Pi configuratie
Wanneer je Raspbian (Lite) hebt draaien op je Raspberry Pi dan kun je starten met deze tutorial. In de volgende stappen leg ik uit hoe je dit zelf kunt uitvoeren. Op de site van de Raspberry Pi-foundation staat een goede uitleg om het device te installeren. Zet de image van de site op het SD-kaartje en start de Raspberry Pi op. Standaard start het apparaat op met pi als gebruiker en raspberry als wachtwoord.
Installeer Node.JS
Mijn scripts draaien op Node.js. Node.js is softwareplatform waarop men applicaties kan ontwikkelen en draaien. Die applicaties worden geschreven in JavaScript. Normaal wordt JavaScript uitgevoerd door een webbrowser maar in dit geval wordt JavaScript uitgevoerd door de Raspberry Pi.
In de package-manager van Raspbian is Node.js sterk verouderd. Een package-manager is op dit platform de App-store. Dus daarom installeren we het programma vanaf de officiële website. In de volgende stappen leg ik uit hoe je dat doet.
In deze tutorial maak ik gebruik van Terminal commando’s. Wanneer je niet zo goed weet hoe dit werkt, klik dan hier Je kunt via een commando-regel inloggen vanaf een ander apparaat (SSH). Het is ook mogelijk om via het apparaat zelf commando’s in te geven. Op de Raspberry Pi-site wordt een uitleg gegeven van hoe SSH werkt. In dit artikel gebruik ik het dollar teken om aan te geven dat het een terminal commando is dat als normale gebruiker wordt uitgevoerd. Je hoeft het dollar-teken niet mee te kopieren.
Wanneer je bent ingelogd op het device. Vanaf deze site downloaden we een bestand.
$ wget https://nodejs.org/dist/v7.8.0/node-v7.8.0-linux-armv7l.tar.gz
Vervolgens pak ik dit bestand uit
$ tar -xvf node-v*-linux-armv7l.tar.gz
Wissel ik van map en ga naar de net uitgepakte map
$ cd node-v*-linux-armv7l
Nu ga ik kopieren met speciale rechten (sudo). Het kan zijn dat er gevraagd wordt om een wachtwoord, als je deze niet veranderd hebt is dit: raspberry
$ sudo cp -R * /usr/local/
In de volgende stap controleer je of de installatie goed is gegaan. Als het goed is antwoord het onderstaande commando: v7.8.0
$ node -v
Zet i2c aan
Om te communiceren met het bordje waarmee de leds gedimd worden maken we gebruik van I2C. I2C is bedacht om op een snelle en goedkope manier te tussen chips te communiceren. Voor de data-overdracht wordt er gebruik gemaakt van twee draden. SCL wordt gebruikt om een klok-signaal door te geven en SDA zorgt voor de data.
Standaard staat I2C op een Raspberry Pi uit en in de onderstaande stappen leg ik uit hoe je dit kunt activeren.
In het volgende bestand verwijderen we het hekje voor de tekst. Om het bestand op te slaan en af te sluiten gebruik je de toetsen combinatie Ctrl-X en toets vervolgens Y voor Yes
$ sudo nano /boot/config.txt
#device_tree_param=i2c_arm=on
Even herstarten en de veranderingen zijn doorgevoerd
$ sudo reboot
Om te controleren of I2C werkt installeer ik i2cdetect
$ sudo apt-get install -y i2c-tools
Met dit commando controleer ik of I2C werkt
$ sudo i2cdetect -y 1
Mocht de uitkomst van het commando anders zijn dan hierboven.
De website Adafruit heeft een uitgebreide uitleg over het aanzetten van i2c onder Raspbian.
Clone de webapp
De code van de webapp heb ik gehost op github. Door het volgende commando uit te voeren haal je de code binnen
$ git clone "https://github.com/qdraw/raspberry-pi-rgb-ledstrip"
$ cd raspberry-pi-rgb-ledstrip
Installeer de benodigde packages
$ npm install
Start de webapp
$ npm start
No key file found. One was generated. Here is the public key: mhvr00pcowwqobneq2
App is gestart op http://localhost:5037
https://mhv*q2.localtunnel.me/webhook
De hardware setup
Wanneer de vorige code wordt uitgevoerd gebeurt er nog niks, er is nog geen hardware aangesloten. In deze stap sluiten we de hardware aan. Bij een Raspberry Pi-project is de moeilijkheid dat de combinatie tussen de hardware en software goed moet werken.
Voor setup heb ik een schema gemaakt waarin beschreven staat hoe de aansluitingen gedaan moeten worden.
Het aansluitschema (gebaseerd op: Adafruit-documentatie)
Dit is de setup zoals het bij mij thuis eruitziet
De keuze om gebruik te maken van een PWM-board
Een Raspberry Pi heeft out-of-the-box 2 PWM-kanalen. Deze 2 PWM-kanalen zijn verdeeld over 4 GPIO-poorten. Daarnaast heeft de Raspberry Pi ook nog de beperking dat het PWM gebruiken is of een normale schakeling.
Slack API
Slack biedt ook de mogelijkheid om een chatbot in deze gesprekken te integreren. Dit heet Slash Commands. Wanneer je een slack-app aanmaakt op https://api.slack.com/apps?new_app=1
In de volgende stappen lopen door de setup van Slack heen.
Zo ziet het eerste proces van ‘Create an App eruit’
We maken een Slash Command aan. Aan de linkerkant is het menu zichtbaar waar ‘Slash Commands’ zichtbaar zijn. Klik hier op om een nieuw Slash Command aan te maken. Vervolgens klik je op ‘Create New Command’ om verder te gaan.
Voer hier de waardes in die de webapp weergeeft geeft. Op
deze manier weet Slack wat er moet gebeuren als er /mycommand wordt ingevoerd.
Tevens is het mogelijk om een omschrijving weer te geven.
Het is gelukt, vanaf nu kun je vanuit Slack een ledstrip besturen. In het voorbeeld gebruik ik /kleur rood om de Raspberry Pi te activeren.
Mocht je vragen hebben over deze tutorial of over de wereld van ‘Internet of Things’ je interesse hebben gewekt. Maar weet je nog niet hoe je dit kunt toepassen en heb je de nodige vragen? Stuur mij dan een mailtje dan kunnen we een kopje koffie drinken.
Deze blogpost verscheen op Qdraw.nl