© ZinetroN/Shutterstock.com
Die Mikrocontrollersoftware low.js im produktiven Einsatz

low.js - die kleine Alternative


JavaScript am Mikrocontroller mag auf diensterfahrene Rüstungselektroniker ähnlich wirken wie der Versuch, den Teufel mit Weihwasser in Kontakt zu bringen. Die im letzten PHP Magazin durchgeführten Experimente mit der Espruino Runtime zeigten aber, dass ausreichend Rechenleistung alle Wunden heilt.

Wer Espruino erwähnt, darf low.js nicht vergessen. Es handelt sich dabei um eine andere JavaScript Runtime, die ausschließlich für den ESP32 vorgesehen ist. Er ist – insbesondere im Vergleich zu den von Espruino sonst unterstützten Controllern – eine durchaus leistungsstarke Plattform. Die in Deutschland ansässigen Entwickler entschieden sich deshalb für eine andere Herangehensweise. Anstatt den JavaScript-Code à la Espruino zur Laufzeit zu interpretieren, arbeitet low.js mit einer Bytecode-verarbeitenden Engine. Zudem implementiert das Team so weit wie möglich die in Node.js vorgesehene Ausführungsumgebung. Was das in der Praxis bedeutet und was es beim Experimentieren zu berücksichtigen gibt, klären wir in diesem Artikel.

Startbereit

Wie so gut wie alle anderen JavaScript-Arbeitsumgebungen lebt auch low.js in der allseitsbekannten Node.js-Ausführungsumgebung. Der Autor führt die folgenden Schritte auf einer mit Ubuntu 18.04 laufenden Workstation durch, auf der sich unter anderem die folgenden Versionen finden:

tamhan@TAMHAN18:~$ node -v v12.4.0 tamhan@TAMHAN18:~$ npm -v 6.9.0

Die Installation der Arbeitsumgebung beginnt durch das Herunterladen des LowSync-Pakets. Es handelt sich dabei um eine Art Make-Werkzeug für JavaScript, das das Herunterladen der Runtime und die Interaktion mit ESP32-Hardware professionalisiert:

tamhan@TAMHAN18:~$ sudo npm install --unsafe-perm -g lowsync

Die in der Einleitung besprochenen Designentscheidungen führen dazu, das low.js eine durchaus umfangreiche Mikrocontroller-Software darstellt. Der ESP32 wird zum Zeitpunkt der Drucklegung dieses Hefts in zwei Versionen angeboten: der kleinere WROOM und sein mit mehr Speicher ausgestatteter Kollege WROVER. Beachten Sie beim Kauf von ESP-32-Boards, die für low.js vorgesehen sind, unbedingt, dass das Modul auf dem passenden Chip basiert. Der zur Verfügung stehende Speicher lässt sich nach dem Kauf nämlich nicht – oder zumindest nicht mit für normale Labors vertretbarem Aufwand – nachrüsten.

Verbinden Sie Ihr Board jedenfalls im nächsten Schritt mit der Workstation und prüfen Sie anhand von dmesg, an welchem seriellen Port der Controller angedockt wurde. Wenn Sie nicht schon Arduinos oder andere serielle Geräte mit dem Linux-Rechner verbunden haben, handelt es sich hierbei meist um /dev/ttyUSB0:

tamhan@TAMHAN18:~$ dmesg | grep "tty" [74408.596653] usb 1-6.1: ch341-uart converter now attached to ttyUSB0

Im nächsten Schritt weisen wir LowSync dazu an, die diversen benötigten Ressourcen herunterzuladen. Im Rahmen der Initialisierung des Repositorys mit der Runtime fragt low.js auch einige Parameter ab, die das spätere Verhalten des Controllers beeinflussen (Listing 1).

Listing 1

tamhan@TAMHAN18:~$ mkdir lowspace tamhan@TAMHAN18:~$ cd lowspace tamhan@TAMHAN18:~/lowspace$ lowsync init ? What is the IP address of the microcontroller on your network? 192.168.0.1 ? What is the local directory that you want to sync with? /home/tamhan/lowspace ? Enable ES 6 (and more) via automatic Babel transpilation? (if disabled, you will have to handle this yourself!) Yes tamhan@TAMHAN18:~/lowspace$

Sodann können wir den Code – zumindest in der Theorie – auf den angeschlossenen Prozessrechner schicken:

tamhan@TAMHAN18:~$ sudo lowsync flash /dev/ttyUSB0 –init

In der Praxis kommt es an dieser Stelle häufig zu Problemen – insbesondere, wenn Sie einen ESP32 verwenden, dessen USB Serial Interface auf dem (insbesondere in China weit verbreiteten) CH341x-Chip basiert. Der Autor dieser Zeilen sendete ein diesbezügliches Board sogar an den Hersteller, eine wirkliche Lösung war bisher nicht zu erreichen. Falls ihr ESP32-Boards den Code problemlos annimmt, können Sie an dieser Stelle laut den unter https://www.lowjs.org/examples/getting-started.html bereitstehenden Anweisungen losprogrammieren. Falls nicht, funktioniert das Board normalerweise mit der Espressif-eigenen IDE IDF, weshalb Sie es an einen nicht an JavaScript interessierten Kollegen weitergeben können.

Ein bequemer Weg

Ein alter Kalauer besagt, dass der Prozessrechnermarkt ein Old Boys Club ist. Hat man nicht ThreadX, Graupner oder Segger, so hat man mit einem neuen Echtzeitbetriebssystem oft nur marginale Chancen. Als besonders haarig erweist sich meist die Finanzierung. Die Neonious-Entwicklungsgesellschaft reagiert auf diesen Markttrend mit dem Anbieten eines eigenen Entwicklungsboards, das einige Komfortfunktionen mitbringt und Entwicklern bei der schnellen Erzeugung von JavaScript-Applikationen für den ESP32 hilft. Die auch als One bezeichnete Planare ist aus Codesicht im Großen und Ganzen mit dem ESP32 kompatibel, weshalb sie sich insbesondere zum Prototyping und auch für Kleinserien eignet. Der Verkauf liefert Neonious zudem Einnahmen.

Wer einen neuen Neonious One erwirbt, muss darauf achten, die Verpackung nicht wegzuwerfen. Auf der Rückseite befindet sich nämlich ein Sticker mit einigen Codes, die man zum Verbindungsaufbau benötigt. Verliert man sie, muss man die Platine per Ethernet resetten – ein durchaus arbeitsintensiver Vorgang. Der zur Auslieferung verwendete Antistatikbeutel ist übrigens nicht wiederverschließbar. Schneiden Sie ihn einfach auf und achten Sie dabei darauf, den in ihm befindlichen Prozessrechner nicht zu beschädigen. Das Löten der Konnektoren dürfte kein großes Problem sein, ergreifen Sie notfalls eine beliebige Lochrasterplatine und stecken Sie die Pins hinein, um die korrekte physikalische Ausrichtung während des Lötprozesses zu garantieren.

Wie bei so gut wie allen ESP32-Boards gilt natürlich auch hier, dass der Abstand zwischen den Pins nicht sonderlich gut für Steckplatinen geeignet ist. Es ist empfehlenswert, auf jeder Seite des Prozessrechners einen Steckplatinenteil anzustecken. Preiswert in China erhältliche Boards sind so gut wie immer teilbar, wenn man den auf der Unterseite befindlichen Moosgummi mit einem Japanmesser durchtrennt.

Wie dem auch sei, verbinden Sie den Prozessrechner im nächsten Schritt unter Verwendung des mitgelieferten Mikro-...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang