Skip to content

Arduino mit PHP und Javascript programmieren

Seit geraumer Zeit besitze ich ein Arduino UNO, habe damit aber noch nicht viel mehr gemacht als ein paar LEDs zum Blinken zu bringen oder einen Servomotor anzusteuern. Vielleicht sollte ich mir endlich ein Ethernet-Shield dazukaufen, denn so völlig offline kann ich gar nicht mehr denken, weswegen mir da teilweise die Ideen fehlen O_o Außerdem werden die Arduino-Boards üblicherweise in einem vereinfachten C-Dialekt programmiert, der zwar einfach zu erlernen ist, aber auch nur bedingt Spaß macht (vor allem mit der offiziellen IDE) ;-) Zum Glück gibt es aber, wie bei Open Source-Projekten nicht ungewöhnlich, schöne Alternativen.

Firmata

Firmata ist ein Programm, welches - einmal auf das Arduino-Board übertragen - die Kommunikation mit Software auf einem anderen Computer ermöglicht. Firmata definiert gleichzeitig also auch das Protokoll, über welches mit dem Arduino (in beide Richtungen) kommuniziert werden kann. Wenn ich das richtig sehe, wurde Firmata zunächst für den Einsatz mit Processing entwickelt. Mittlerweile gibt es aber eine ganze Reihe von Client-Bibliotheken für verschiedene Sprachen.

Das Arduino-Board kann also von einem Host, auf dem die Software läuft, angesteuert werden; es können aber auch Sensoren oder z.B. ein Potentiometer ausgelesen werden. Für mich persönlich ergibt diese Kommunikation mehr Sinn als das pure Aufspielen eines Sketches, der dann auf dem Arduino-Board autonom vor sich hinläuft.

Javascript

Johnny-Five-Logo: RoboterEin Javascript-Framework für Firmata ist Johnny-Five. Johnny-Five wird als node.js-Modul installiert: npm install johnny-five und ermöglicht es, in nur wenigen Zeilen eine blinkende LED an PIN 13 zu erzeugen. Das ist maximal cool, wie ich finde. Wer sich schon ein wenig mit node.js beschäftigt hat, kann ohne Probleme loslegen und mit dem Arduino „sprechen“.

var five = require("johnny-five"),
    board = new five.Board();
board.on("ready", function() {
  (new five.Led(13)).strobe();
});

Einen weiteren Ansatz, Firmata mittels Javascript anzusprechen, liefert Breakout. Kommt auf meine Todo-Liste.

PHP

Für PHP gab es bis vor kurzem meines Wissens nach keine einfache Möglichkeit, das Firmata-API anzusprechen. Thomas Weinert hat sich nun aber mit Carica Io dessen angenommen und vor kurzem dieses Video gepostet. Nachdem mein Arduino sowieso schon wegen meiner Johnny-Five-Experimente auf dem Tisch lag, musste ich das natürlich auch sofort ausprobieren, klar. Das Beispielskript, das Thomas mitliefert, ist nicht ganz so kurz wie das von Johnny-Five, daher habe ich die Datei led.php hier nur verlinkt.

Allerdings befindet sich Carica Io noch mitten in der Entwicklung, so dass alles hier Beschriebene mit Vorsicht zu genießen („It's a learning project not a product. Use it at your own risk.“) und möglicherweise aufgrund von Weiterentwicklungen bald kaum noch nachzuvollziehen sein wird. Dennoch in aller Kürze hier meine Erfahrung. Ich musste zwei kleine Änderungen vornehmen. Zum einen wollte ich SerialPort statt Tcp nutzen:

 9 $board = new Io\Firmata\Board(
10   new Io\Stream\SerialPort(3)
11   //new Io\Stream\Tcp('127.0.0.1', 5333)
12 );

Zum anderen musste ich die Klasse \Carica\Io\Stream\SerialPort anpassen, da mein Arduino an /dev/ttyACM0 hängt (folglich ist der oben angegebene Port in Z. 10 auch erst mal egal):

51       } elseif (substr(PHP_OS, 0, 5) === "Linux") {
52         //$device = '/dev/ttyS'.((int)$this->_number);
53         $device = '/dev/ttyACM0';
54         $prepare = sprintf('stty -F %s', $device);

Danach reichte aber der Aufruf php led.php, damit … ach, seht selbst:

Der Code von Carica Io ist auch deswegen besonders interessant, weil wir es hier mit einem Event-Loop in PHP zu tun haben, weil Entwurfsmuster wie Promises und Deferred Objects angewendet werden, die bislang in PHP kaum anzutreffen waren. Wer sich dafür interessiert, sollte auch einen Blick auf ReactPHP werfen. Wirklich spannend!

Trackbacks

powtac am : powtac via Twitter

Vorschau anzeigen
RT @mattsches: blog update: Arduino mit PHP und Javascript programmieren http://t.co/vaAjfgP4Qw

fastner am : fastner via Twitter

Vorschau anzeigen
RT @mattsches: Noch einmal für die Wochenend-Offliner: http://t.co/Nepuik3WTc #php #javascript #arduino

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

powtac am :

powtac

Coole Sache, dass mir PHP muss ich mal antesten.

Matthias Gutjahr am :

Auf Twitter lesen: mattsches
Matthias Gutjahr

Mach das, dank Firmata ist es wirklich einfach. Wirklich tief eingestiegen bin ich noch nicht, aber das Interesse an meinem Arduino wurde dadurch wieder geweckt.

powtac am :

powtac

Hab' ein Mini-Projekt https://github.com/powtac/Autarc_LAN_User_Stats für User Statistiken gestartet. Für Co-Working Spaces u.ä.: Soll via (W)LAN Pings die Frage beantworten "Wer ist gerade dort?".

Mit Ethernetshield und Arduino, soll einfacheres Setup als z.B. https://status.raumzeitlabor.de/ bieten...

Kommentar schreiben

Markdown-Formatierung erlaubt
Wenn Du Deinen Twitter Namen eingibst wird Deine Timeline in Deinem Kommentar verlinkt.
Bewirb einen Deiner letzten Artikel
Dieses Blog erlaubt Dir mit Deinem Kommentar einen Deiner letzten Artikel zu bewerben. Bitte gib Deine Blog URL als Homepage ein, dann wird eine Auswahl erscheinen, in der Du einen Artikel auswählen kannst. (Javascript erforderlich)
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

Formular-Optionen

Kommentare werden erst nach redaktioneller Prüfung freigeschaltet!