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

kitty_portable_2018-01-13_20-16-26

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

clip_image001

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.

POWERPNT_2018-01-13_20-56-02