Raspberry Pi, TinkerForge und Java 8 im Terzett

Internet of Things mit Java 8 und TinkerForge, Teil 6

Sven Ruppert
© S&S Media

Bis jetzt haben wir alles per USB am Rechner angeschlossen. Das wird sich nun ändern. Wir werden heute einen Raspberry Pi für unsere weiteren Experimente vorbereiten.

Um nach den ersten fünf Teilen dieser Serie weitere Beispielprojekte zu realisieren, benötigen wir ein wenig mehr Infrastruktur. Wir werden uns nun den Raspberry Pi genauer ansehen und die notwendigen Dinge darauf installieren.

Einmal Java 8 SE Embedded, bitte!

Um auf dem Raspberry Pi mit Java arbeiten zu können, wird in der Grundausstattung nichts weiter benötigt. Allerdings ist es dann Java 7. Da wir uns aber schon so sehr an die Lambdas und Streams gewöhnt haben, wollen wir nicht warten. Java 8 gibt es in verschiedenen Versionen. Wir entscheiden uns für Java 8 SE Embedded – bitte nicht mit der ME Version verwechseln! Da gibt es nur einen kleinen Haken: Es muss auf der Zielplattform selbst zusammengebaut werden. Aber das werden wir jetzt Schritt für Schritt durchgehen.

Alles beginnt auf der Oracle-Seite. Dort werden verschiedene Versionen von Java 8 SE Embedded angeboten. Für den Raspberry Pi nehmen wir die mit der Hard-Floating-Point-Implementierung (ARMv7 Linux – VFP, HardFP ABI, Little Endian). Nach dem Download erhalten wir ein tar.gz, in meinem Fall die Datei ejdk-8-fcs-b132-linux-arm-vfp-hflt-03_mar_2014.tar.gz. Damit sind wir im Besitz des JRECreate-Tools. Falls der Download nicht schon von dem Raspberry Pi aus gemacht worden ist, diese Datei bitte auf selbigen kopieren. Ich habe mich für das Verzeichnis /opt/ entschieden. Mit dem Befehl tar –xzf <Dateiname> kann man das Archiv entpacken, und es entsteht ein Unterverzeichnis mit dem Inhalt der gepackten Datei.

Soweit ist nun alles vorhanden, und es kann an die Installation gehen. Zu Beginn aktualisiert man am besten das Trägersystem auf gewohntem Wege mittels nachfolgender Befehlsfolge:

  • sudo apt-get update
  • sudo apt-get upgrade
  • sudo apt-get clean
  • sudo rpi-update
  • sudo ldconfig
  • sudo reboot

JRECreate auf dem Raspberry Pi

Nun sind wir soweit, dass wir mit dem Tool JRECreate unser JRE zusammenbauen können. Bei meinen Experimenten hat sich herausgestellt, dass es angebracht ist, eine Veränderung in dem Script (bin/jrecreate.sh) vorzunehmen. Dort erfolgt der Aufruf der JVM mit 512 MB RAM, das funktioniert leider nicht immer zuverlässig. Bei der Erzeugung des rt.jar ist es zu verschiedenen Fehlern gekommen. Aus diesem Grund ändern wir den Wert auf 256 MB. Nachfolgend lief das Script fehlerfrei beliebig oft durch. Kommen wir nun zu den Einstellungen.

Zu Beginn muss die Variable JAVA_HOME in der Shell gesetzt werden. Das sollte auf die vorherige Installation eines JDK (auch JDK7 ist OK) zeigen. Falls das nicht der Fall ist kann das mit dem Befehlt export JAVA_HOME=<Pfad zum JDK> in der Shell nachgeholt werden. Bitte beachten, dass dieses nur aktiv in der aktuellen Shell ist. Wird eine weitere gestartet, ist dort die Variable wieder auf dem „Default“-Wert dieses Systems. Es gibt verschiedene Parameter, mit denen die Ausführung des Scripts jrecreate.sh parametrisiert werden kann. Einer davon ist die Angabe, welche Version der VM gewünscht ist. Leider ist die Server-Version auf dem Raspberry Pi nicht enthalten. Erst ab ARM7 kann darauf zurückgegriffen werden. Ich habe mich daher für die Client-Version entschieden und die Minimal-Version weggelassen. Wenn gewünscht, kann man weitere Module hinzufügen wie z. B. JavaFX. Handelt es sich um ein reines Serversystem, kann man das natürlich weglassen. In meinem Beispiel aktiviere ich sowohl JavaFX als auch die Locales und Charsets. Wichtig ist noch die Auswahl des Profils. Hier werde ich das komplette Profil compact3 verwenden. Für die Unterschiede zu den Profilen kann die Oracle-Webseite hinzugezogen werden. Dort ist detailliert beschrieben, was wo enthalten ist. 

./bin/jrecreate.sh --dest /opt/jdk1.8.0_b132 
    --profile compact3 
    --vm client 
    --extension fx:controls,locales,charsets,nashorn 
    --no-compression 
    --ejdk-home /opt/ejdk1.8.0_b132

Nachdem das Script fertig ist, ist in dem angegebenen Zielverzeichnis, in meinem Fall /opt/jdk1.8.0_b132, das JRE installiert. Nun muss nur noch für das System verfügbar gemacht werden.

JRE bekanntgeben

Damit das JRE direkt von der Kommandozeile verwendet werden kann, muss das System davon noch erfahren. Dafür gibt es unter Debian den Befehl update-alternatives. Damit kann auch später zwischen verschiedenen auf dem System installierten Versionen das Default gewechselt werden.  

sudo update-alternatives --install /usr/bin/java java
                                          /opt/jdk1.8.0/bin/java 1
sudo update-alternatives --config java

Sollte ein solcher Alias schon angelegt sein, kann der bestehende mit dem zweiten Befehl aus Listing  2 verändert werden. Nachfolgend kann man das System rebooten und durch die Eingabe von java –version  auf der Kommandozeile nachsehen, ob alles funktioniert hat.

JDK installieren

Wenn man sich nicht mit der JRE auf dem Raspberry Pi begnügen möchte, kann man selbstverständlich auch ein JDK installieren. Hier geht die Installation wesentlich schneller vonstatten. Da hier kein JRECreate Script verwendet werden muss, kann man wie gewohnt das JDK per Download von Oracle beziehen. Auch hier wieder die Version mit der Hardware Floating-Point-Unterstützung. Die Installation selbst ist recht einfach, da lediglich im gewünschten Zielverzeichnis das tar.gz ausgepackt werden muss. Um dem System das JDK zur Verfügung zu stellen, muss man wie oben beschrieben die beiden ausführbaren Dateien java und javac per update-alternatives deklarieren.

TinkerForge Brickviewer und BrickDaemon installieren

Da nun Java in der Version 8 funktioniert, wird nun der BrickDaemon benötigt, um an die USB-Schnittstelle angeschlossene TinkerForge Elemente ansprechen zu können. Hierzu sind lediglich drei Befehle notwendig. TinkerForge hat einem die Arbeit hier sehr vereinfacht. Auch hier gehen wir von einer Installation mit Hardware Floating Point aus.

sudo apt-get install libusb-1.0-0 libudev0 pm-utils
wget http://download.tinkerforge.com/
   tools/brickd/linux/brickd_linux_latest_armhf.deb
sudo dpkg -i brickd_linux_latest_armhf.deb

Wenn eine neue Version des BrickDaemon veröffentlicht wird, müssen lediglich die letzten beiden Schritte wiederholt werden. Werden nun TinkerForge-Elemente mittels Master Brick an der USB-Schnittstelle angeschlossen, stehen diese sowohl unter localhost als auch unter der IP des Raspberry Pi zur Verfügung. Mit dem BrickViewer kann man nun von dem eigenen Rechner aus eine Verbindung zu den angeschlossenen Sensoren herstellen. Der BrickDaemon wird bei einem Neustart automatisch neu gestartet und steht dann wieder zur Verfügung.

Fazit

Nun sind wir in der Lage, mit dem Raspberry Pi Java-Programme laufen zu lassen. Dank des BrickDaemons ist die Verwendung von TinkerForge-Elementen gewohnt einfach. Nun steht einem eine Vielzahl an Möglichkeiten offen. Wir werden uns in den nächsten Artikeln ausführlich mit dieser Kombination beschäftigen. Bei Ideen, Anregungen oder Fragen: bitte einfach melden: Twitter: @SvenRuppert

Stay tuned. Happy coding! 

Die Quelltexte zu diesem Text sind unter [1] zu finden. Wer umfangreichere Beispiele zu diesem Thema sehen möchte, dem empfehle einen Blick auf [2].

Geschrieben von
Sven Ruppert
Sven Ruppert
Sven Ruppert arbeitet seit 1996 mit Java und ist Developer Advocate bei Vaadin. In seiner Freizeit spricht er auf internationalen und nationalen Konferenzen, schreibt für IT-Magazine und für Tech-Portale. Twitter: @SvenRuppert
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: