Ansteuerung der GPIO Ports mit Pi4J

  • Ansteuerung der GPIO Ports mit Pi4J

    Halli Hallo,
    Ich möchte euch einfach mal zeigen wie ihr eure GPIO Ports mittels Pi4J ansteuern könnt
    Ich werde versuchen einiges zu erklären aber ein gewisses Grundwissen in Elektrotechnik und Java solltet ihr für diese Anleitung schon mit bringen.

    Inhalt
    - Vorbereitung
    - Ansteuerung einer LED
    - Taster abfragen
    - kleines Spielchen


    Vorbereitung
    Auf dem Pi sollte folgendes Installiert sein:
    - Java (JRE reicht)
    - WiringPi

    Da die Entwicklung von Java Programmen auf dem Pi sehr umständlich ist, ist es besser auf dem PC zu programmieren ;)
    Dazu sollte folgendes installiert sein:
    - Java (JDK)
    - Filetransfer Programm (zbs WinSCP)
    - Eclipse | IntelliJ | Netbeans
    - Pi4J runterladen


    Sobald ihr Pi4J runter geladen habt und ein neues Eclipse Projekt geöffnet habt, müsst ihr den lib Ordner direkt in euer Projekt Verzeichnis kopieren und in den Buildpath einbinden.
    Erst dann können die Pi4J Funktionen auch genutzt werden. Außerdem ist eine kleine Einarbeitung in Eclipse ratsam ;)


    Ansteuerung einer LED
    Zunächst werden wir eine einfache LED zum leuchten und danach zum blinken bringen.
    Diesen Teil könntet ihr auch auf Webseite von Pi4J unter den Beispiel Control nachlesen


    Bauplan
    Um eine LED anzusteuern brauchen wir fast nichts, außer einer LED und einen Vorwiderstand.
    Doch wie hoch muss dieser Vorwiderstand sein? Dazu gibt es eine Formel mit der Ihr den Wert berechnen könnt.
    Mehr zu dieser Berechnung kann man im Elektronik Kompendium nachlesen.
    Ich werde den GPIO Port 1 für die LED benutzen.

    So oder Ähnlich könnte eurer Schaltplan dann aussehen:


    Software
    Kommen wir nun zur Software...
    Egal was ihr mit Pi4J vorhabt - Ihr braucht einen GpioController... dieser bietet diverse funktionen an um
    die GPIO Ports anzusteuern. Alles weitere erleutere ich mit Kommentaren im Quellcode ;)
    Die Pin belegung von Pi4J / WiringPi entspricht nicht den tatsächlichen Pins. Siehe hier

    "Beispiel Software zur LED ansteuerung"


    Wenn ihr mit dem Programm soweit fertig seit könnt ihr das Projekt als Ausführbare JAR exportieren und es zbs. via WinSCP auf euren Pi verschieben.
    Auf dem Pi könnt ihr unter root (oder sudo) euer Programm mit folgendem Befehl ausführen:

    Code
    pi@raspberrypi ~ $ sudo java -jar LEDAnsteuerung.jar


    Taster abfragen
    Ich werde hier einen einfach mechanischen Taster verwenden. Auch Pi4J liefert hierzu ein Beispiel.


    Bauplan
    Auf dem Raspberry Pi sind bereits Pullup Widerstände eingebaut, somit brauchen wir kein extra Widerstand in unserer Schaltung einbauen.
    Der Taster wird auf GPIO Port 2 geschaltet sein


    Software
    Auch hier wieder die Klasse inclusive Kommentare:

    "Beispiel Software zur Taster ansteuerung"


    Zur ausführung gilt das gleiche wie bei dem LED Projekt (Export; auf den Pi verschieben; starten) ;)

    Kleines Spielchen
    Das alles war relativ viel theoretisch und irgendwie gar nicht spaßig ... Daher sollte an dieser Stelle auch noch etwas spaßiges auf dem Plan stehen :)
    Wenn ihr die Schritte zuvor erledigt habt dann habt ihr die Hardware schon zusammen...


    "Kleines Beispiel Spielchen"


    Das wars dann auch schon :)
    Hoffentlich hilft es euch bei dem ein oder anderem Problem weiter...
    auch noch ein lieben Gruß an Steeef für die Idee des Spielchen ;)

    Wenn ich wieder mal ein wenig Zeit habe werde ich ein Tutorial erstellen zum Thema, wie man mit Pi4J auch aus dem Web auf die GPIO Ports zugreifen kann...


    viele Grüße
    Turael


    Anhang:
    Eclipse Projekt mit allen Beispielen GPIOAnsteuerung.zip

    Ich bin ein gefallener Engel namens Turael.

    Einst vor langer Zeit rebelierte ich im Himmel bis Gott mich auf die Erde verbannte.

    Doch meine taten werden kein ende finden....

    Edited once, last by Turael (November 25, 2013 at 8:54 AM).

  • Moin,

    schön strukturierte Anleitung. Bin auch bis zum GPIO Controller problemlos gekommen.
    Aber Leider nicht weiter. Sobald ich versuche
    "

    Code
    import com.pi4j.io.gpio.GpioController;


    "
    zu importieren gubts eine Fehlermeldung, das Eclipse das nicht bekannt ist.
    Was mach ich falsch ?
    Mir fehlt irgendwie der weg für Ecöipse und co.
    Ich nutze Eclipse und mein Ziel ist es mit Window Builder durch ein JButton eine LED einzuschalten.

    Danke.

  • Vielen Dank für das Feedback NEK4Killer :)
    Die einfachsten Sachen, wo man im Alltag nicht drüber nachdenkt, vergisst man gerne mal =P
    Das Problem bei dir wird es sein das du Pi4J nicht in den Buildpath hinzugefügt hast... kurze Anleitung habe ich unter dem Punkt Vorbereitung hinzugefügt :)

    Ich bin ein gefallener Engel namens Turael.

    Einst vor langer Zeit rebelierte ich im Himmel bis Gott mich auf die Erde verbannte.

    Doch meine taten werden kein ende finden....

  • Hey Turael,

    danke für deine SUPER Anleitung:thumbs1::danke_ATDE:.

    Ich habe folgendes Problem: Das Programm startet, aber die GPIO Factory wird nicht gefunden. :helpnew:

    Ich befinde mich in meinem Ordner ( /Desktop/Stefan/ )wo ich folgenden Befehl eingebe:

    Code
    sudo java -jar LEDAnsteuerung.jar


    Jetzt Startet das Programm und gibt mir folgendes aus:

    <--PI4J--> GPIO Control Example ... started.

    Exception in thread "main" java.lang.NoClassDefFoundError: com/pi4j/io/gpio/GpioFactory
    at test.LEDAnsteuerung.main(LEDAnsteuerung.java:15)
    Caused by: java.lang.ClassNotFoundException: com.pi4j.io.gpio.GpioFactory
    .
    .
    .

    wenn ich die Beispiele teste, welche bei Pi4J dabei sind (das sind .java Dateien in dem Verzeichnis: root/opt/pi4j/examples ) dann funktionieren diese alle, aber irgendwie habe ich Probleme mit .jar Dateien und der Gpio Bibliothek.
    Ich habe die Jar Datei schon in den Ordner der Pi4J Beispiele gepackt, aber das funktioniert auch nicht wenn ich die wie folgt aufrufe:
    [font="Courier New"] [/font]

    Code
    sudo java -classpath .:classes:/opt/pi4j/lib/'*' -jar LEDAnsteuerung.jar

    Die Jar Datei wir dann ausgeführt, aber das selbe Problem mit der GPIO Factory besteht weiterhin.

    Habe ich was mit der Classpath nicht beachtet oder was für einen Befehl muss ich eingeben, damit die .jar Datei richtig startet und die Pi4J Bibliothek auf findet?


    Danke für eure Hilfe

    Stefan


    PS: Bin absoluter Linux Neuling

    Edited once, last by hk_1000 (March 14, 2014 at 10:41 AM).

  • Hallo,
    Habe das gleiche Problem,
    die Beispiele im example-Ordner laufen, aber die eigenen jar-Dateien, die
    im selben Ordner sind, nicht.

    Das wird ausgegeben:
    //====================================================
    pi@raspberrypi /opt/pi4j/examples $ sudo java -jar JavaApplication1.jar

    <--Pi4J--> GPIO Control Example ... started.

    Exception in thread "main" java.lang.NoClassDefFoundError: com/pi4j/io/gpio/GpioFactory
    at javaapplication1.ControlGpioExample.main(ControlGpioExample.java:29)
    Caused by: java.lang.ClassNotFoundException: com.pi4j.io.gpio.GpioFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more
    //====================================================

    Habe auf dieser Seite nachgeschaut:
    http://pi4j.com/install.html

    Gruß Philipp


    //=======================================================

    Hallo,
    also ich hab es mit einer reinen editor-Datei versucht. In die Datei habe ich das pi4j-Beispiel kopiert und unter "<dateiname>.java" in den examples Ordner abgespeichert.
    Dann habe ich mit
    "pi@raspberrypi /opt/pi4j/examples $ javac -classpath .:classes:/opt/pi4j/lib/'*' <dateiname>.java"
    kompiliert und mit
    "sudo java -classpath .:classes:/opt/pi4j/lib/'*' <dateiname>"
    das Programm ausgeführt.

    Hierbei kann nur die pi4j-Bibliotheken genutzt werden. Das heißt, wie man es in JavaFX-Projekte einbaut, bzw. JavaFX-Projekte mit pi4j-Bibliothek nutzt weiß ich nicht.
    Ich probiere es mal mit Wiring-pi-Bibliotheken, die ich dann in JavaFX-Projekte einbinden vesuche.
    Zusammengefasst: ich kann nur die Hardware mit pi4j-Projekten steuern, und nicht über JavaFX die pi4j-Bibliotheken einbinden.

    Gruß Philipp Ziegler

    Edited once, last by PhilippZ (May 29, 2014 at 7:09 PM).

  • Hallo!
    erstmal danke für den feinen Guide!
    Ich habe mich jetzt einige Zeit mit dem PI gespielt und eine Mordsfreude daran meine kleinen Java Testprogramme am PI laufen zu sehen.

    Nun wollte ich mich an die Ansteuerung der GPIO wagen...
    Ich bin ja nicht unbedingt ein totaler noob, aber ich bringe es scheinbar nicht zustande dass die pi4j Biblio richtig zum laufen zu bringen...
    Die Jar Dateien habe ich zum Bildpath hinzugefügt (dieses Vorgehen kenne ich schon von den SQL Treibern), doch wenn ich dann mein kleines Testprogramm laufen lassen will kommen (zig) Fehlermeldungen dich ich als "du hast den Buildpath nicht richtig eingebunden" interpretiere.
    Ich habe nun schon einiges versucht bin aber ziemlich ratlos wie ich das beheben kann, weiss hier vlt. jmd bitte Rat?

    EDIT: gelöst....

    Ich hatte bisher ja meine Programme (leider) immer nur in der IDE (eclipse) laufen lassen.
    Damit ich nun auch mal was produktives am PI machen konnte musste eine lauffähige Datei her.
    Internet befragt: ja das musst eine JAR Datei machen.
    Gesagt getan.

    Und nun nach langem hin und her muss ich festellen eine JAR != eine runnable JAR


    Falls noch jemand so ein (Grundlagen)Problem hat: probier mal eine runnable JAR zu exportieren...

    juhu.jpg

    Edited once, last by Killrogg (August 9, 2014 at 10:46 PM).

  • Hallo,
    das Thema ist schon ein bisschen älter, aber ich habe ein kleines Problem.
    Ich kann das Programm problemlos ausführen, aber an der LED tut sich nichts.
    Könnt ihr mir helfen?
    LG Nils

  • Hört sich doch schon mal nicht schlecht an ;)
    Wie sieht dein Programm aus? (1:1 von dem ersten Post hier?)
    Kommen irgendwelche Fehlermeldungen?
    Hast du schonmal versucht die GPIO's zbs mit Bash anzusteuern?

    Ich bin ein gefallener Engel namens Turael.

    Einst vor langer Zeit rebelierte ich im Himmel bis Gott mich auf die Erde verbannte.

    Doch meine taten werden kein ende finden....

  • Also ich hab das Programm "LEDAnsteuerung verwendet, aber den GPIO auf 02 geändert.
    Und Bash.....? Sorry ich kenn mich mit Linux nicht so gut aus, obwohl ich es selber benutze. :s
    Und Ich bekomme keine Fehlermeldungen, das Programm startet, aber die LED bleibt dunkel...

  • kann mir bitte Jemand sagen wie ich die GPIO Pins quasi zurück setzte denn ich bekomm als die Fehlermeldung this gpio already excists und wenn ich versuche mit gpio.cleanup(); die pins zu reseten bekomm ich nur can not find symbol. programmiere das alles auf java

  • der Beitrag ist schon bisschen älter, hoffe jemand hat noch eine antwort.

    Erstmal ein SUPER TUTORIAL:bravo2::bravo2::bravo2:

    Also in Eclipse hat alles gut geklappt. Mein Problem besteht jetzt beim ausführen.
    Wenn ich das Programm ausführen lassen möchte, spuckt er mit die Zeile hier aus:

    Code
    pi@raspberrypi:~/Desktop $ sudo java -jar test.jar
    kein Hauptmanifestattribut, in test.jar


    in der MANIFEST.FM steht folgendes:

    Manifest-Version: 1.0

    Class-Path: .

  • Hi Tricksta,

    das ist, wie Du selbst bereits angemerkt hast, ein Tutorial.

    Bitte erstelle im passenden Bereich einen eigenen Beitrag und trag' Dein Anliegen vor.

    Würde jeder seine Probleme hier posten, wäre das sehr schnell sehr unübersichtlich.

    cu,

    -ds-

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!