Project: LED-strip met RPi (hardware)
Voor deze opstelling gebruik ik een raspberry pi zero w. Dit is de kleinste en goedkoopste RPi met WiFi-ondersteuning. Geen zero bij de hand? Je kan dan perfect een iets duurdere RPi2 of RPi3 gebruiken.
De hardware.
- 1 x raspberry pi zero w (of een andere RPi met netwerkondersteuning)
- 1 x SD-kaart van minimaal 2GB
- 1 x RGB LED-strip
- 1 x 12V-DC naar 5V-DC adaptor
(12V voor de LED-strip en 5V voor de PRi-voeding)
- 3 x MOSFET's
(De RPi-uitgangen kunnen het hoge stroomverbruik van de LED-strip niet aan.)
De software.
Ik ga ervan uit dat je reeds voldoende ervaring hebt met schrijven en bewerken van een RPi-image. Je kan perfect met je voorkeurtools verder werken. Onderstaande tools worden in dit project gebruikt:
- Etcher: om de basis-image naar de SD-kaart te schrijven.
- Paragon ExtFS for Windows. Een gratis tool waarmee je linux-partitie automatisch kan mounten onder Windows. Je kan op deze partitie zowel lezen als schrijven.
Geen gedoe meer met sudo nano .... Gewoon de bestanden openen in je favoriete editor. :-)
- Backup & Recovery Free om een back-up van je definitieve image te maken.
- Sublime Text: een eenvoudige teksteditor om Unix-bestanden aan te passen.
- MobaXterm: als alternatief voor PuTTY en Git Bash.
MobaXterm is een handige SSH- en SFTP-tool in één.
Nieuwe RPi-image configureren.
- Download Raspbian Stretch Lite.
- Schrijf de image op een SD-kaart.
- Mount SD-kaart en open de Linux partitie met Paragon ExtFS.
Enable ssh (boot partitie).
- Plaats in de boot partitie een leeg bestand met als naam ssh (dus zonder extensie).
Configureer netwerkinstellingen (Linux partitie).
- Open het bestand /ect/wpa_supplicant/wpa_supplicant.conf met Sublime Text.
- Voeg achteraan het bestand de WiFi-configuratie toe.
# WiFi
network={
key_mgmt=WPA-PSK
ssid="YOUR_SSID"
psk="YOUR_PASSWORD"
}
TIP: je kan later het wachtwoord coderen via het commando: $ wpa_passphrase YOUR_SSID YOUR_PASSWORD.
Bovenstaande configuratie geeft ons een dynamisch IP-adres. Heb je liever een statisch IP-adres (bijvoorbeeld WiFi: 192.168.1.61 en Ethernet: 192.168.1.60), pas dan volgend bestand aan:
- Open het bestand /ect/dhcpcd.conf met Sublime Text en voeg achteraan volgende code toe:
# WiFi
interface wlan0
static ip_address=192.168.1.61/24
static routers=192.168.1.1
static domain_name_servers=8.8.8.8 8.8.4.4
# Ethernet (niet nodig voor de RPi zero!)
interface eth0
static ip_address=192.168.1.60/24
static routers=192.168.1.1
static domain_name_servers=8.8.8.8 8.8.4.4
Unmount de SD-kaart altijd via ExtFS. Doe je dit niet, dan zijn de wijzigingen meestal niet bewaard!

Installeer GIT en clone het basis-script via Github.
- Verbind de RPi met de voedingsspanning (voor de RPi zero w is dit de BUITENSTE micro USB connector).
- Connecteer via mobaXterm met de RPi.

- Ga naar de map /home/pi en voer achtereenvolgens volgende commando's uit:
$ sudo apt-get install git
$ git clone https://github.com/pverhaert/PIstrip.git
$ mv /home/pi/PIstrip/* /home/pi/
$ rm -R -f /home/pi/PIstrip
- Run het bash-script:
$ sudo bash PIstrip.sh
- Update/upgrade RPi (keuze 1).
- Installeer Node.js versie 4 of hoger (keuze 60 t.e.m 65).
Let op: het script controleert op welke processor je nu draait en installeert de juiste Node-versie. Installeer je Node op een PRi zero, dan kan je de SD-kaart niet gebruiken op een RPi3 en omgekeerd!
- Maak SSL certificaten voor https (keuze 100).
Je hoeft tijdens deze installatie niet alle velden in te vullen. Je mag elke keer op enter drukken.
Waarom SSL certificaten aanmaken? Op de RPi komt ook een website die je kan openen via het IP-adres. Je kan zowel http als https gebruiken. Bijvoorbeeld: http://192.168.1.61 en https://192.168.1.61.
Voorlopig krijg je op het einde van de configuratie enkel een statische webpagina te zien.
- Installeer pm2 (keuze 101).
pm2 is een vrij uitgebreide process manager voor Node. In onze toepassing zijn we vooral geïnteresseerd in de watch end reload functie. Telkens je een Node-script aanpast, wordt het script automatisch terug opgestart. Ook als je de RPi volledig stopt en terug opstart, zal het script ook automatisch opstarten.
- Installeer node dependencies voor het project (keuze 102).
Let op: deze keer ZONDER sudo!
$ npm install
- Express: web framework voor Node.
- PubNub voor Node. Het script dat we hier gebruiken, is vergelijkbaar met het PubNub-script in Cordova.
- Johnny-five: een JavaScript robotics & IoT platform.
- Raspi-io: een RPi I/O plug-in voor Johnny-five.
- Reboot de RPi.
$ sudo reboot
Configureer app.js
- Ga naar /home/pi/app.js.
- Vervang de variabelen subscribeKey door de API-key die bij het project hoort.
App.js opstarten met pm2.
Zie ook: https://www.npmjs.com/package/pm2#main-features
Het hoofdprogramma, app.js, is volledig klaar. Zet de toepassing in productie via de commando's:
$ sudo pm2 start app.js --watch
$ sudo pm2 save
Het commando save bewaart de huidige configuratie zodat app.js automatisch start zodra je de RPi terug volledig opstart.
Wil je het script aanpassen, dan kan je het script best eerst stoppen en terug in debug-mode (--no-daemon) starten.
$ sudo pm2 stop app
$ sudo pm2 start app.js --watch --no-daemon
Pas als het script volledig klaar is, zet je het terug in productie.
$ sudo pm2 stop app
$ sudo pm2 start app.js --watch
$ sudo pm2 save
Je kan de toestand van de app volgen via:
$ sudo pm2 list
De app volledig verwijderen doe je via:
$ sudo pm2 delete app
$ sudo pm2 save
App-website hosten op de RPi.
Elke app die je met Cordova ontwikkelt, heeft zowel een Android versie als een browser versie. De browser versie kan je dus makkelijk op de RPi installeren. Zo kan elk toestel (laptop, iPhone, ...) binnen het lokale netwerk de site via http of https bereiken. Je hoeft enkel nog de gecompileerde browser versie naar de map /home/pi/www op RPi te kopiëren. Je kan hiervoor een standaard FTP programma gebruiken (FileZilla bijvoorbeeld) of je gebruikt de ingebouwde FTP-client van WebStorm.
Ziehier de configuratie voor WebStorm:
- Wijzig enkele voorkeuren in WebStorm.
Open Settings onder het File-menu. Ga naar Build, Execution, Deployment en klik op
Options.
Vink de optie Hash hosts in known_hosts file af.
- Open het menu Tools -> Deployment -> Configuration en klik op het plus-teken.
- Geef de configuratie een naam (PIstrip) en vul de gegevens van RPi in. Belangrijk: kies als verbindingstype SFTP en verwijs het Root path naar /home/pi/www !
Klik op Test SFTP connection om de verbinding te testen.

- Klik bovenaan op het tabblad Mappings.
- Verwijs het Deployment path naar /.
Leg het Local path naar de gecompileerde versie. Deze staat in de map platforms\browser\www!

- Open de map platforms\browser\www en upload vanuit het snelmenu de volledige www-map naar de RPi.

Vergeet niet bij elke aanpassing in het project de website ook opnieuw te uploaden. De hercompilatie gebeurt automatisch zolang je $ phonegap serve op de achtergrond laat draaien.
Telkens je een volledig nieuwe image maakt, zal deze een unieke ssh-key genereren. WebStorm kan nu niet meer kan connecteren op hetzelfde IP-adres omdat de nieuwe sleutel niet overeenstemt met de oude sleutel!
Dit kan je makkelijk oplossen door de oude IP-configuratie uit de lijst met known_hosts te verwijderen.
Zie bestand: C:\Users\%USERPROFILE%\.ssh\known_hosts.
Hardware schema.
....