Aus Raspberry Pi Geek 01/2015

Der I²C-Bus des Raspberry Pi (Teil 1) (Seite 3)

Es gibt auch Bibliotheken für komplexere Programmbausteine, die auf diesen Funktionen aufbauen. Im weiteren Verlauf dieser Artikelreihe gehen wir noch genauer darauf ein. Das Listing 6 zeigt Ihnen als Abschluss unserer C-Einführung ein einfaches Programm, das die LEDs des Testaufbaus nacheinander aufleuchten lässt. Sie finden das Programm auch als i2c_test.c auf der Heft-DVD. Beim Kompilieren müssen Sie darauf achten, die WiringPi-Bibliothek mit einzubinden(Listing 7).

Listing 6

#include <wiringPiI2C.h>
int main(void) {
  int handle = wiringPiI2CSetup(0x20) ;
  wiringPiI2CWrite(handle, 0x10);
  delay(5000);
  wiringPiI2CWrite(handle, 0x20);
  delay(5000);
  wiringPiI2CWrite(handle, 0x40);
  delay(5000);
  wiringPiI2CWrite(handle, 0x80);
  delay(5000);
  wiringPiI2CWrite(handle, 0x00);
  return 0;
}

Listing 7

$ cc i2c_test.c -lwiringPi
$ ./a.out

Programmieren in Java

Um die GPIO mit Java anzusteuern, verwenden Sie die entsprechende Bibliothek des Pi4J-Projekts [5]. Damit diese fehlerfrei arbeitet, müssen Sie allerdings vor der eigentlichen Installation einige Vorarbeiten erledigen. Auch für Java benötigen Sie wieder die WiringPi-Library. Anschließend spielen Sie das aktuelle Java-Development-Kit (JDK) von Oracle [6] ein.

Am einfachsten übertragen Sie das JDK per SFTP auf den Raspberry Pi (Listing 8, Zeile 1) – Windows-Anwender greifen für diese Aufgabe am besten zu WinSCP [7]. Anschließend loggen Sie sich per SSH auf dem RasPi ein (Zeile 2) und entpacken den Tarball nach /opt/java (Zeilen 3 bis 5). Danach teilen Sie über update-alternatives dem System mit, welche Java-Version es nutzen soll (Zeile 6 und 7) – passen Sie bei diesen Befehlen bitte die Versionsnummer Ihrer Java-Installation an. Abschließend lassen Sie Java seine Versionsinformationen ausgeben (Zeile 8); hier sollte sich die Java-Engine korrekt melden.

Listing 8

$ scp jdk*.tar.gz pi@RasPi-IP:~
$ ssh pi@RasPi-IP
$ sudo -s
$ mkdir -p -v /opt/java
$ tar -xzf jdk*.tar.gz -C /opt/java/
$ update-alternatives --install "/usr/bin/java" "java" "/opt/java/jdkVersion/bin/java" 1
$ update-alternatives --set java /opt/java/jdkVersion/bin/java
$ java -version

Nun steht das Oracle-JDK für weitere Aufgaben bereit. Da einige Programme allerdings die Umgebungsvariable $JAVA_HOME benötigen, setzen Sie diese sicherheitshalber gleich mit. Möchten Sie die Variable für das komplette System bestimmen, müssen Sie diese mit Root-Rechten in die Datei /etc/environment eintragen. Für erste Versuche genügt es allerdings auch, die Variable mit in die benutzerspezifische ~/.bashrc aufzunehmen (Listing 9). Nach dem nächsten Login steht sie dann umgehend zur Verfügung. Um direkt weiterarbeiten zu können, setzen Sie die Variable ausnahmsweise für die aktuelle Sitzung von Hand.

Listing 9

$ echo 'export JAVA_HOME="/opt/java/jdkVersion/bin"' >> ~/.bashrc
$ export JAVA_HOME="/opt/java/jdkVersion/bin"

Damit sind nun sämtliche Systemvoraussetzungen erfüllt, der Weg für die Pi4J-Bibliothek steht offen. Am schnellsten klappt die Installation über ein Setup-Skript, das Sie mit dem Aufruf aus Listing 10 in einem Rutsch aus dem Internet laden und ausführen. Die Installation nimmt ein wenig Zeit in Anspruch, aber das Warten lohnt sich.

Listing 10

$ curl -s get.pi4j.com | sudo bash

Das Java-Programm aus Listing 11 lässt – wie wir es aus den ersten Beispielen kennen – die vier LEDs nacheinander leuchten. Auch in Java bauen Sie zuerst eine Verbindung zum I2C-Gerät auf und schreiben oder lesen danach Byte für Byte. Als Grundlage für Ihre eigenen Ideen finden Sie das Beispielprogramm als TestI2C.java auf der Heft-DVD.

Listing 11

import com.pi4j.io.i2c.I2CBus;
import com.pi4j.io.i2c.I2CDevice;
import com.pi4j.io.i2c.I2CFactory;
public class TestI2C {
  private static final int i2cBus = 1;
  private static final int address = 0x20;
  public static void main(String[] args) {
    try {
      I2CBus bus=I2CFactory.getInstance(I2CBus.BUS_1);
      I2CDevice dev = bus.getDevice(address);
      dev.write((byte)0x10);
      Thread.sleep(5000);
      dev.write((byte)0x20);
      Thread.sleep(5000);
      dev.write((byte)0x40);
      Thread.sleep(5000);
      dev.write((byte)0x80);
      Thread.sleep(5000);
      dev.write((byte)0x00);
    }
    catch(Exception e) {
      System.out.println(e);
    }
  }
}

Um das Java-Leben ein wenig einfacher zu machen, haben die Entwickler von Pi4J ihrer Bibliothek mit pi4j ein kleines Skript beigelegt, das zum Beispiel beim Kompilieren automatisch den Klassenpfad korrekt setzt – das erleichtert etwa das Ausprobieren kleiner Java-Programme. Die Hilfe aus pi4j --help zeigt Ihnen weitere Funktionen des Programms an.

Zum Kompilieren unseres Beispiels greifen wir auf Pi4J zurück, der Schalter -c baut das Programm (Listing 12). Meldet Pi4J keine Fehler, finden Sie danach eine Datei mit dem Namen TestI2C.class im aktuellen Verzeichnis. Dies ist unsere Java-Klasse, die wir abermals mit Pi4J ausführen, diesmal aber mit dem Schalter -r. Bei Erfolg blinken die LEDs unserer Testschaltung abermals auf.

Listing 12

$ pi4j -c TestI2C.java
$ pi4j -r TestI2C
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben