GPIO über node.js schalten und per socket.io Rückmeldung an alle Clients
Nachdem ich mit php und javascript an die Grenzen gekommen bin um den Statuswechsel eines GPIOs an alle Clients zurück zu geben habe ich mich nun mit node.js beschäftigt.
Herausforderung
Es soll per Browser (und später auch per Hardware) eine Led ein und ausgeschaltet werden. Der Zustand der Led soll aber gleichzeitig auf allen angeschlossenen Browsern/Clients aktualisiert werden ohne das diese refreshen müssen oder über einen Intervall ständig abgefragt werden.
Vorbereitung
Note.js ist bei den aktuellen Raspbian Versionen bereits vorinstalliert. Überprüfen kann man das ganz einfach durch Eingabe von
Um mit nodes.js die GPIOs vom Raspberry anzusprechen benötigt node.js noch ein zusätzliches Paket. Ich habe mich für “onoff” entschieden. Die Installation erfolgt ganz einfach über
Zur Vereinfachung habe ich auch noch ein weiteres Paket “Express” installiert:
Zum Coden empfehle ich zusätzlich auch noch das Paket nodemon welches über
installiert wird.
Um zu Testen ob nodes.js richtig funktioniert empfehle ich der Beschreibung und das Script auf W3Schools um eine LED zum blinken zu bringen: https://www.w3schools.com/nodejs/nodejs_raspberrypi_blinking_led.asp
Umsetzung
Nun zum eigentlichen Projekt. Dazu werden im Grunde zwei Skripte benötigt – eins für den Server und ein weiteres für den Client. Auf dem Server läuft das Script welches den GPIO schaltet und die Aktionen der Clients auswertet und umsetzt. Zusätzlich wird von hier auch der aktuelle Satus an die Clients verteilt. Hört sich kompliziert an, ist es auch! Im Script selber sind es aber nur ein paar Zeilen in “gpioserver.js”:
Für den Client wird das folgende Script genutzt:
Ergebnis
Jede Änderung wird an alle angeschlossenen Geräte/Clients weitergeben ohne das diese aktiv werden müssen.