JavaScript und das Internet of Things, Teil 2: BeagleBone Black und Arduino

Seite 3: Cylon.js und Fazit

Inhaltsverzeichnis

Betrachtet man die Code-Beispiele der vorangegangenen Listings fällt auf, dass sie sich vom Prinzip her alle sehr ähnlich sind, sich im Detail aber unterscheiden. Das Framework Cylon.js setzt genau hier an und schafft eine einheitliche Schnittstelle für IoT-Plattformen (derzeit 36 verschiedene), darunter Tessel, BeagleBone Black und Arduino. Espruino unterstützt es momentan hingegen nicht. Installiert wird Cylon.js als Node.js-Modul über den Befehl npm install cylon.

Die folgenden Codebeispiele zeigen jeweils für Tessel, BeagleBone Black und Arduino, wie sich die Bibliothek dazu verwenden lässt, eine LED per Drucktaster an- und auszuschalten. Der Code ist dabei in allen Fällen mehr oder weniger der gleiche. Lediglich die Verbindungsinformationen (die Parameter der Methode connection()) sowie die Angaben zu den verwendeten Pins (der Konfigurationsparameter der Methode device()) unterscheiden sich voneinander. Dank Fluent API sind die Programme zudem um einiges lesbarer als der Code aus den vorangegangenen Auszügen.

Tessel:

var Cylon = require("cylon");
Cylon
.robot()
.connection("tessel", { adaptor: "tessel" })
.device("led", { driver: "led", pin: 1 })
.device("button", { driver: "button", pin: "config" })
.on("ready", function(robot) {
robot.button.on("push", function() {
robot.led.toggle();
});
});
Cylon.start();

BeagleBone Black:

var Cylon = require("cylon");
Cylon
.robot()
.connection("beaglebone", { adaptor: "beaglebone" })
.device("led", { driver: "led", pin: "P9_12" })
.device("button", { driver: "button", pin: "P9_14" })
.on("ready", function(robot) {
robot.button.on("push", function() {
robot.led.toggle();
});
});
Cylon.start();

Arduino:

var Cylon = require("cylon");
Cylon
.robot()
.connection("arduino", { adaptor: "firmata", port:
"/dev/cu.usbmodem14131" })
.device("led", { driver: "led", pin: 13 })
.device("button", { driver: "button", pin: 2 })
.on("ready", function(robot) {
robot.button.on("push", function() {
robot.led.toggle();
});
});
Cylon.start();

Neben dem programmatischen Zugriff über JavaScript lässt sich Cylon.js zudem über REST oder MQTT ansprechen. Insgesamt stellt die Bibliothek also einen interessanten Ansatz dar, um den Zugriff auf die unterschiedlichen Geräte zu vereinheitlichen und ist allemal einen Blick wert.

Egal, ob Espruino, Tessel, BeagleBone Black oder über das Firmata-Protokoll auch Arduino: Das Herumexperimentieren mit den verschiedenen Plattformen macht Spaß, wenn man sich erst einmal mit den Grundlagen vertraut gemacht hat. Und JavaScript als Programmiersprache ebnet auch Webentwicklern, die in der Regel wenig mit hardwarenaher Programmierung zu tun haben, den Weg in die IoT-Welt. Der Programmierung von heimischer Kameraüberwachung oder Temperatursteuerung steht dann nicht mehr viel im Weg.

Neben den in diesen Artikeln vorgestellten Mikrocontrollern und -computern gibt es außerdem noch eine Reihe weitere, die JavaScript ausführen beziehungsweise sich darüber steuern lassen. Beispiele hierfür sind Intel Galileo, Intel Edison und Particle (ehemals Spark). Darüber hinaus lassen sich Produkte wie die Pebble Smartwatch, die VR-Brille Oculus Rift oder der Bewegungsdetektor Leap Motion per JavaScript ansprechen. Damit zeigt sich, dass die Sprache auch in kommenden Bereichen technischer Entwicklung durchaus relevant und praxistauglich ist und sich nicht nur auf die Webentwicklung beschränkt.

Philip Ackermann
entwickelt seit 15 Jahren Web- und Softwareanwendungen, arbeitet beim Fraunhofer-Institut für Angewandte Informationstechnologie FIT an Tools zum teilautomatisierten Testen von Web Compliance und ist Autor zweier Fachbücher über Java und JavaScript sowie mehrerer Fachartikel.
(jul)