Listing 1
[...] auto wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa.conf
Die letzte Zeile der Beispielkonfiguration referenziert die Datei /etc/wpa.conf, die Sie ebenfalls erstellen und editieren müssen. Sie enthält die für die WLAN-Verbindung wichtigen Informationen (Listing 2).
Listing 2
network={
ssid="Netzwerkname"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk="Netzwerkschlüssel"
}
Im Beispiel kommt DHCP zum Beziehen einer dynamischen IP-Adresse und WPA2 für die Verschlüsselung zum Einsatz. Für beide Konfigurationsdateien gilt, dass Sie sie auf die entsprechende Konfiguration Ihres RasPi anpassen müssen.
Außerdem benötigen Sie auf dem RasPi ein Java Runtime Environment (JRE). Das OpenJDK-JRE richten Sie bei vorhandener Internetverbindung auf Debian-basierten Distributionen mit folgendem Befehl ein:
$ sudo apt-get install openjdk-7-jre
Unter Raspbian ist allerdings bereits das unfreie Oracle-Java vorinstalliert. Welche der beiden Umgebungen Sie verwenden, macht prinzipiell keinen Unterschied, solange diese alle Funktionen der Anwendung unterstützt.
Ansteuern der GPIO-Pins
Eine Java-Anwendung auf dem RasPi steuert die GPIO-Pins, entweder “zu Fuß” programmiert oder mithilfe einer Bibliothek wie Pi4J [8]. Im Quellcode dieser Java-Anwendung richten die Kommandos aus Listing 3 die GPIO-Pins mithilfe einer Anwendung, die der Bibliothek WiringPi [9] beiliegt, zunächst als Output-Pins ein.
Listing 3
private void setupPins() throws IOException {
Runtime.getRuntime().exec("sudo /home/pi/wiringPi/gpio/gpio mode 0 out");
Runtime.getRuntime().exec("sudo /home/pi/wiringPi/gpio/gpio mode 1 out");
Runtime.getRuntime().exec("sudo /home/pi/wiringPi/gpio/gpio mode 3 out");
Runtime.getRuntime().exec("sudo /home/pi/wiringPi/gpio/gpio mode 4 out");
}
Das Durchnummerieren der Pins von null bis vier beruht darauf, dass die verwendeten Pins 11, 12, 15 und 16 in WiringPi die Bezeichnungen GPIO0, GPIO1, GPIO3 und GPIO4 tragen. Nach der Konfiguration der Pins müssen Sie diese entsprechend der Spezifikation des Motortreiberchips in verschiedenen Kombinationen auf HIGH/LOW beziehungsweise 1/0 setzen, damit der Motor entweder in die eine oder andere Richtung läuft respektive ruht.
Beim L293E ruht der Motor bei der gleichen Belegung für beide Input-Pins. Die Belegung dieser Pins mit jeweils einmal HIGH und einmal LOW lässt den Motor in die eine beziehungsweise andere Richtung drehen, je nachdem, an welchem der beiden Pins HIGH anliegt. Den entsprechenden Java-Code zeigt Listing 4.
Listing 4
private void motor1Forward() throws IOException {
Runtime.getRuntime().exec("sudo /home/pi/wiringPi/gpio/gpio write 0 1");
Runtime.getRuntime().exec("sudo /home/pi/wiringPi/gpio/gpio write 1 0");
}
private void motor1Backward() throws IOException {
Runtime.getRuntime().exec("sudo /home/pi/wiringPi/gpio/gpio write 1 0");
Runtime.getRuntime().exec("sudo /home/pi/wiringPi/gpio/gpio write 0 1");
}
private void motor1Stop() throws IOException {
Runtime.getRuntime().exec("sudo /home/pi/wiringPi/gpio/gpio write 0 0");
Runtime.getRuntime().exec("sudo /home/pi/wiringPi/gpio/gpio write 0 0");
}
Remote Method Invocation
Die Remote Method Invocation, oder kurz RMI, läuft in einer anderen Anwendung auf einem zweiten Computer, von dem aus Sie über das Netzwerk die Anwendung auf dem RasPi ansteuern. Um in Java RMI zu verwenden, definieren Sie ein Interface mit allen Methoden, die der Server (hier also die Anwendung auf dem RasPi) zur Verfügung stellt. Dieses Interface muss der Server implementieren.
Damit der Server für den Client (also die zweite Anwendung) erreichbar ist, müssen Sie ihn registrieren. Listing 5 zeigt, wie Sie eine Registry erzeugen und ein Server-Objekt – hier RMIServerImpl – im Quellcode der Server-Anwendung erstellen und registrieren.
Listing 5
Registry r = LocateRegistry.createRegistry(Port);
r.rebind("RMIServer", new RMIServerImpl());





