© I000s_pixels/Shutterstock.com
Einführung in die JavaScript-Programmierung des Tessel 2

Das muss (wieder) tesseln!


Die erste Generation des Tessel (vorgestellt im Entwickler Magazin 5.15) beeindruckte die Entwicklerschaft in vielerlei Hinsicht: Die Ausführung von JavaScript auf einem Minimikrocontroller der Bauart Cortex M3 war durchaus cool. Mit der zweiten Version professionalisiert Technical Machine die Architektur. Dieser Artikel zeigt, was Sie erwarten dürfen.

Tessel 1 und Tessel 2 unterscheiden sich technisch komplett: Ein Tessel der ersten Generation war im Grunde genommen eine virtuelle Maschine, die Lua-Code ausführte. Das Ausliefern von JavaScript erfolgte über eine Node Runtime, die den JavaScript-Code auf der Workstation des Entwicklers transpilierte und in Richtung des Prozessrechners schickte. Der Rest des Betriebssystems war nicht zugänglich – im Vergleich zu Unix-basierten Prozessrechnern ein durchaus signifikanter Nachteil.

Der Tessel 2 [1] basiert auf einem Prozessor aus dem Hause MediaTek, der mit 580 Megahertz Rechenleistung und 64 Megabyte RAM durchaus genügend Rechenleistung für eine kopflose JavaScript-Umgebung anbietet. Ferner wurde der Softwarestack insofern verändert, als dass der JavaScript-Code nun direkt in V8 ausgeführt wird. Änderung Numero drei ist die Einführung eines zweiten Koprozessors, der für das eigentliche IO zuständig ist. Weitere Informationen zu den Unterschieden finden sich unter https://tessel.io/blog/113259439202/tessel-2-hardware-overview. Für uns reicht es aus, wenn wir davon ausgehen, dass unser Tessel 2 ein mit JavaScript programmierbarer Prozessrechner ist.

Installation

Die Installation der Tessel Utilities ist insofern kritisch, als sie auf diverse Hardwaremodule zugreift. Das erste wichtige Kriterium ist, dass die Node-Versionen des Superusers und des normalen Users übereinstimmen müssen. Das lässt sich in der Kommandozeile durch Eingabe der folgenden beiden Befehle überprüfen:

tamhan@TAMHAN14:~/.nvm$ sudo node -v v6.10.3 tamhan@TAMHAN14:~/.nvm$ node -v v6.10.3

Findet sich an dieser Stelle ein Mismatch zwischen den angezeigten Versionen, haben Sie ein Problem: Die Installation der Treiber wird in diesem Fall nicht gelingen. Im nächsten Schritt sind einige Module erforderlich, die Linux-Zugriff auf USB-Hardware erleichtern:

tamhan@TAMHAN14:~/.nvm$ sudo apt-get install libusb-1.0-0-dev libudev-dev

Das eigentliche Herunterladen erfolgt über den npm-Paketmanager. Wundern Sie sich aber nicht, wenn während der Installation der eine oder andere Fehler geworfen wird, denn die Tessel Runtime probiert mehrere Methoden aus, um die notwendigen Treiber zu kompilieren.

tamhan@TAMHAN14:~/.nvm$ npm install -g t2-cli

Zu guter Letzt müssen die Treiber auf der Workstation installiert werden. Das erfolgt durch Eingabe des folgenden Befehls:

tamhan@TAMHAN14:~/.nvm$ sudo t2 install drivers *** Error in 'node': free(): invalid pointer: 0x0000000003b66eff ***

Kommt es bei der Ausführung des Installationsbefehls zum oben erwähnten Fehler, so müssen Sie die Tessel-Programmierumgebung – gegen die expliziten Empfehlungen des Entwicklerteams – als Root „nachinstallieren“, um danach die Installation zum erfolgreichen Durchlaufen zu bringen:

tamhan@TAMHAN14:~/.nvm$ sudo npm install -g t2-cli tamhan@TAMHAN14:~/.nvm$ sudo t2 install drivers INFO udev rules installed to /etc/udev/rules.d/85-tessel.rules INFO Done. Unplug and re-plug Tessel to update permissions.

Tessel hoch!

Unsere nächste Aufgabe ist das Testen der korrekten Funktion. Hierzu ist natürlich ein Tessel-2-Prozessrechner erforderlich. Das Board ist beispielsweise bei Mouser erhältlich: http://www.mouser.de/search/­ProductDetail.aspx?R=0virtualkey0virtualkey102990210. Um sich für eine kostenlose Lieferung zu qualifizieren, bietet es sich an, Zubehörteile oder sonstige Komponenten mitzubestellen. Für die folgenden Schritte benötigen wir z. B. ein RFID-Modul, das Sie an dieser Stelle samt Zenerdiode und Widerstand mitbestellen könnten.

Verbinden Sie den Prozessrechner per Micro-USB-Kabel mit einer Workstation. Die blaue LED zwischen den beiden Erweiterungsports wird kontinuierlich pulsieren. Der Bootprozess des Linux-Betriebssystems kann bis zu dreißig Sekunden in Anspruch nehmen. Lassen Sie dem Prozessrechner etwas Zeit, bevor Sie ihn mit folgendem Kommando zu identifizieren suchen:

tamhan@TAMHAN14:~$ t2 list INFO Searching for nearby Tessels USB Tessel-02A3457FFA5E

t2 list lässt sich insofern etwas Zeit, als es nicht nur nach per USB verbundenen Prozessrechnern sucht: Ein Tessel wird auch dann gefunden, wenn er im selben Netzwerk wie die Workstation residiert.

Nach dem erstmaligen Anstecken ist es empfehlenswert, eine Aktualisierung der Firmware durchzuführen. Hierzu müssen Sie folgenden Befehl eingeben:

tamhan@TAMHAN14:~$ t2 update INFO Looking for your Tessel... INFO Connected to Tessel-02A3457FFA5E. INFO New firmware version found...0.0.16 . . . INFO Updated Tessel-02A3457FFA5E from 0.0.13 to 0.0.16

Wundern Sie sich nicht, wenn der Aktualisierungsprozess einige Zeit in Anspruch nimmt. Der Tessel des Autors genehmigte sich fünf Minuten. Achten Sie zudem darauf, dass es während dieser Zeit nicht zu Stromausfällen oder sonstigem Blödsinn kommt.

Erstes Projekt: ein Cardreader

Nach diesen einführenden Überlegungen wollen wir uns mit der Erzeugung eines ersten Testprojekts auseinandersetzen. Die schwarzen Konnektoren auf der Seite des Boards erlauben das Anstecken von dedizierter Hardware. Zum Zeitpunkt der Drucklegung gibt es rund ein Dutzend geschiedener Module.

Als erste Aufgabe – sowohl zur Nutzung von vorgefertigten als auch von eigenen Erweiterungen – müssen wir ein Projektskelett anlegen, das später auf den Tessel geschoben werden kann. Hierzu ist unter Unix die folgende Kommandofolge erforderlich:

tamhan@TAMHAN14:~/tesselspace$ mkdir blinker tamhan@TAMHAN14:~/tesselspace$ cd blinker tamhan@TAMHAN14:~/tesselspace/blinker$ t2 init

Tessel-Projekte leben normalerweise in einem eigenen Verzeichnis. Die Eingabe des Befehls T2 Init sorgt sogar dafür, dass der Client die nötige Projektstruktur im gerade aktuellen Arbeitsverzeichnis errichtet. Nach dem erfolgreichen Durchlaufen des Kommandos stellen Sie fest, dass das Projekt ein gewöhnliches Node.js-Projekt darstellt, das um einige B...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang