Es scheint, wir kommen in eine Serie. Es begann mit der Nutzung eines Raspberry Pi als Docker-Host und wurde dann interaktiver mit einer blinkenden LED, die an die GPIO-Pins des RPi angeschlossen war. Hier ist die ganze Serie bisher:

  1. Docker fuer die Hosentasche
  2. Docker fuer die Hosentasche - Vereinfacht
  3. Hypriot, wiringPI und eine blinkende LED
  4. Die blinkende LED - JavaScript Edition

Jetzt hatte ich einige neue Ziele:

  1. Die blinkende LED mit einem physischen Button starten und stoppen koennen.
  2. Ein Web-Frontend haben, das anzeigt, ob der Blinkmodus aktiviert oder deaktiviert ist.
  3. Die blinkende LED mit einem Button im Web-Frontend starten und stoppen koennen.

Die “onoff”-Bibliothek, die ich bereits verwendete, machte es ziemlich einfach, den physischen Button hinzuzufuegen; ein Beispiel ist bereits auf ihrer Projektseite.

Das Coole an der “onoff”-Bibliothek ist, dass du keine while-Schleife brauchst, um den Pin-Zustand abzufragen. Eingehende GPIO-Aenderungen loesen einen Callback aus - das ist alles.

Das ist mein Verdrahtungsdiagramm:

Du kannst die Fritzing-Datei hier herunterladen.

Ich unterteilte die Entwicklung in zwei Phasen und versah meinen Code entsprechend mit Tags.

Release “2016-03-18” Umfang:

  • Physischer Button kann das Blinken aktivieren und deaktivieren.
  • Blinker sollte kontinuierlich laufen und Exceptions und Timeouts vom GPIO-Service ignorieren.
  • Besseres Prototyping mit Docker-Volumes, die auf den Host gemappt sind.
  • Refactoring, wie Docker package.json verwendet.

Release “2016-04-12” Umfang:

  • Frontend mit einem Button erweitert.
  • Frontend verbindet sich mit Backend ueber WebSockets.
  • Blinken mit dem Frontend-Button aktivieren und deaktivieren.
  • Backend sendet seinen Status an das Frontend ueber socket.io.

Es gibt eine schoene Stack Overflow Frage mit einem minimalen socket.io Beispiel. Wenn du mit socket.io nicht vertraut bist, schau es dir an - es hat mir geholfen, schnell einzusteigen.

Bisher sammelt das Projekt mehr Technologien. Derzeit haben wir:

  • Raspberry Pi
  • Docker
  • Node.js, Express
  • socket.io

Es gibt einige offene Punkte, die ich spaeter behandeln koennte:

  • Backend-Adresse ist hardcodiert; andere Code-Optimierungen.
  • Brauche ich wirklich einen separaten Port fuer socket.io?
  • Daten in MongoDB speichern.

Fertig fuer heute!