JavaScript: Hardware mit Cylon.js steuern

Werkzeuge  –  8 Kommentare

Zum Steuern und Überwachen von Geräten im IoT muss mangels Webtauglichkeit häufig selbstentwickelte Software zum Einsatz kommen. Bei der Programmierung können Frameworks wie Cylon.js helfen

Wer einen Einstieg in das Internet der Dinge sucht, landet schnell bei Experimenten mit Einplatinenrechnern wie dem Arduino oder Raspberry Pi, die eine LED steuern sollen. Als erste Übung lässt man das Licht üblicherweise blinken, da dafür neben der LED nur ein passender Widerstand nötig ist.

Damit die Diode tatsächlich abwechselnd angeht und erlischt, ist ihre Stromversorgung regelmäßig ein- und auszuschalten. Dafür sorgt eine Software, die beispielsweise für Arduino in C zu schreiben ist:

int pin = 13;

void setup () {
pinMode(pin, OUTPUT);
}

void loop () {
digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pin, LOW);
delay(1000);
}

Das Vorgehen für den Raspberry Pi unterscheidet sich von jenem für Arduino, da der Raspberry Pi keinen Mikrocontroller, sondern einen vollwertigen Computer mit Linux als Betriebssystem darstellt. Die Programmiersprache lässt sich frei wählen, sofern ein Compiler oder zumindest ein Interpreter für den verwendeten ARM-Prozessor und die gewählte Linuxvariante existieren.

Vergleicht man den Ansatz, eine LED per Arduino oder Raspberry Pi blinken zu lassen, mit einer reinen Hardware-Lösung der Aufgabe, wirkt das Herangehen zumindest auf elektrotechnisch unerfahrene Entwickler weitaus einfacher, als sich mit Kondensatoren und integrierten Schaltungen wie dem NE555 befassen zu müssen. Der Aufbau komplexerer Schaltungen erfordert allerdings nach kurzer Zeit wenigstens einige Basiskenntnisse der Elektrotechnik und auch die Entwicklung der Software gestaltet sich anspruchsvoller. Spätestens wenn mehrere Boards zeitgleich zu steuern sind, ist über deren Koordination nachzudenken. Es liegt nahe, die einzelnen Geräte nicht autark laufen zu lassen, sondern das Steuern und Überwachen der Aktoren und Sensoren an zentraler Stelle zu regeln.

Wollen Entwickler unterschiedliche Plattformen ansprechen, ohne für jede eine eigene Software zu entwickeln, stehen sie jedoch schnell vor einem Problem. Abhilfe schaffen Frameworks wie das kostenlose Open-Source-Projekt Cylon.js. Laut seiner Dokumentation lassen sich mit ihm und JavaScript über 40 Hardwareplattformen wie Arduino, Raspberry Pi, Nest oder die Parrot AR.Drone ansprechen.

Um das Framework zu nutzen, muss Node.js installiert sein. Mit dessen Paketverwaltung lässt es sich via

$ npm install cylon

einrichten. Zusätzlich zu dem Basisframework sind noch Treiber für die gewünschten Geräte zu ergänzen. Für Arduino ist beispielsweise die Installation des Moduls cylon-firmata erforderlich:

$ npm install cylon-firmata

Um die GPIO-Pins oder den I²C-Bus verwenden zu können, sind weitere Pakete nötig:

$ npm install cylon-gpio
$ npm install cylon-i2c

Einen guten Überblick über alle Treiber erhält man, wenn man die GitHub-Seite der Organisation The Hybrid Group nach Repositories filtert, deren Name mit dem Präfix cylon- beginnt.

Wie der Name cylon-firmata nahelegt, verwendet Cylon.js für die Kommunikation mit einem Arduino-Board das Firmata-Protokoll und setzt daher die Installation der gleichnamigen Bibliothek auf dem verwendeten Arduino-Board voraus. Sie lässt sich entweder über die integrierte Entwicklungsumgebung von Arduino oder mit dem Kommandozeilenwerkzeug Gort vornehmen, das ebenfalls von den Cylon.js-Entwicklern stammt.

Nutzt man es, ist zunächst zu ermitteln, ob das Arduino-Board angeschlossen ist. Dazu dient der Befehl scan, dem sich bei Bedarf noch serial, usb oder bluetooth als Parameter mitgeben lässt:

$ gort scan

Die Ausgabe zeigt alle gefundenen Geräte, einschließlich der Schnittstelle des Arduino-Boards. Um es ansprechen zu können, sind die folgenden Kommandos auszuführen, wobei für <port> der Name der im vorigen Schritt ermittelten Schnittstelle einzusetzen ist:

$ gort arduino install
$ gort arduino upload firmata <port>

Gegebenenfalls müssen diese Schritte unter einem administrativen Benutzerkonto ausgeführt werden, damit Gort uneingeschränkt auf die serielle Schnittstelle zugreifen kann.