Um die Pins per Bash anzusteuern, kann die wiringpi Lib verwendet werden. Die GPIO Homepage oder auch die Pin Belegung des rPi ist hilfreich.
So, jetzt erst einmal alles installieren und testen mit einer LED mit Widerstand an Pin 7 (4. Pin von oben links) und Masse (ganz unten links).
Zuerst alles für die Bash, um von der Konsole auf die Pins zugreifen zu können:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# installieren der wiringPi lib # git installieren sudo apt-get install git-core # repo clonen git clone git://git.drogon.net/wiringPi cd wiringPi git pull origin cd wiringPi # compilieren ./build # test die Version ausgeben gpio -v # Ergebnis: gpio version: 2.25 # Status aller ausgeben mit gpio readall # Ergebnis: |
Wir sehen nun alle Werte. Z.B. ist der GPIO. 7 auf OUT geschaltet und der Wert in Spalte V(alue) ist 0.
Da ich eine LED zwischen GPIO 7 und Masse geklemmt habe ist die nun aus.
Jetzt schalten wir die LED an Pin 7 an mit:
1 |
gpio write 7 1 |
und die LED geht an. Der Status ist nun auf 1 in der V Spalte:
Jetzt soll auch der Zugriff per Python laufen.
Da es bei Kali kein Python Package gibt, bauen wir RPi.GPIO selbst zusammen:
1 2 3 4 5 6 7 8 9 10 |
# Lib downloaden wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz # auspacken tar -xvf RPi.GPIO-0.5.11.tar.gz cd RPi.GPIO-0.5.11 # instalieren sudo python setup.py install # löschen cd ~ sudo rm -rf RPi.GPIO-0.* |
So jetzt können wir auch von Phyton aus auf die Pins zugreifen, hier mal ein Testscript led.py
, welches die LED an Pin 7 anschaltet:
1 2 3 4 5 6 7 |
#!/usr/bin/python import RPi.GPIO as GPIO GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT) GPIO.output(7, True) |
1 |
chmod +x led.py |
Und ausführen des Python Script als sudo:
1 |
sudo ./led.py |
Hier gibt es noch Beispiele.
Das Java Interface pi4j kann bei der Gelegenheit auch gleich installiert werden mit:
1 |
curl -s get.pi4j.com | sudo bash |
Ok, bei Kali schlägt das fehl. Deshalb manuel:
1 2 3 4 5 6 7 8 9 |
# archive holen sudo wget http://get.pi4j.com/download/pi4j-1.0-SNAPSHOT.deb # installieren sudo dpkg -i pi4j-1.0-SNAPSHOT.deb # beispiele compilieren, dauert 10 min sudo cd /opt/pi4j/examples sudo ./build # test eines Beispiels, Ausführen des Blink Beispiels sudo java -classpath .:classes:/opt/pi4j/lib/'*' BlinkGpioExample |
Kommt unter Kali zu folgenden Fehler, da nicht die aktuelle Java Version installiert ist, sondern 1.6.0_34. Deshalb sind auch beim compilieren Warnungen aufgetreten.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/pi4j/io/gpio/GpioFactory : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:643) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access$000(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:323) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:268) at BlinkGpioExample.main(BlinkGpioExample.java:55) |
Ok, dann auch noch Java 1.7 umschalten.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
update-alternatives --config java update-alternatives --config javac # test java -version # ok # java version "1.7.0_75" # OpenJDK Runtime Environment (IcedTea 2.5.4) (7u75-2.5.4-1~deb7u1) # OpenJDK Zero VM (build 24.75-b04, mixed mode) # # neu compilieren, nochmal 10 min warten für alle 34 Beispiele sudo cd /opt/pi4j/examplessudo ./build # ok, keine Fehler mehr |
So nun das Testen ob die Java Programme ausgeführt werden können.
Das klappt leider noch nicht, es kommt die Fehlermeldung das die libpi4j.so nicht gefunden wird:
1 2 3 4 5 |
root@pi:/opt/pi4j/examples# java -classpath .:classes:/opt/pi4j/lib/'*' BlinkGpioExample <--Pi4J--> GPIO Blink Example ... started. Feb 28, 2015 7:53:25 PM com.pi4j.util.NativeLibraryLoader load SCHWERWIEGEND: Unable to load [libpi4j.so] using path: [/lib/libpi4j.so] java.lang.UnsatisfiedLinkError: /tmp/libpi4j2137877968790734584.so: /tmp/libpi4j2137877968790734584.so: Kann die Shared-Object-Datei nicht öffnen: Datei oder Verzeichnis nicht gefunden |
Die gibt es da auch nicht. Da mache ich dann bei Gelegenheit weiter…