GPIOs reagieren nicht

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,

    ich habe da ein Problem, dass ich so bei meiner Suche noch nicht gefunden habe. Daher dieser Beitrag.

    Ich habe einen Raspberry Pi 2 und möchte die GPIOs schalten und auslesen. Bei einem anderen Raspberry habe ich das auch schon öfters gemacht und hatte nie Probleme damit.
    Ich weiß auch, dass die schalt- und abfragbaren GPIO Pins nur mit 3,3V betrieben werden dürfen.
    Nun zu meinem Problem:

    Egal, welchen der GPIOs ich schalten will, es passiert nichts. Wenn ich also mit wiringPi zum Beispiel den Befehl

    Code
    gpio -g write 17 1


    eingebe und danach mit

    Code
    gpio -g read 17


    den Wert abfrage, steht weiterhin die "0".
    Das gleiche passiert, wenn ich den Pin mittels

    Code
    sudo echo "1" /sys/class/gpio/gpio17/value


    auf high setzen will. In der Datei "value" steht weiterhin die 0.
    Der Pin ist auf jeden Fall auf "out" gesetzt. Dies zeigt auch, wenn ich mir alle Pins mit "gpio readall" anzeigen lasse.

    Das gleiche Problem habe ich bei allen Pins, sowohl die Pins, die auf "out" stehen, also auch die, die auf "in" stehen (Zustandswechsel mit Pullup-Schaltung).

    Kann mir hier vielleicht irgendjemand weiterhelfen?

    Einmal editiert, zuletzt von Blade-of-Fire (10. Oktober 2015 um 22:22)

  • Hallo Blade-of-Wire,

    wahrscheinlich liegt bei Dir ein Missverständnis / Denkfehler vor.

    GPIO fungieren entweder als Eingang ODER als Ausgang.

    Wenn Du einen Pin auf Ausgang setzt und mit einem Pegel von 0 oder 1 versiehst, dann steht der Wert da drin.

    Wenn Du versuchst, den Wert wieder auszulesen, dann fungiert der GPIO-Pin als Eingang und zeigt Dir den Pegel an, der physikalisch an dem GPIO-Pin anliegt - nicht das von Dir dort zu einer anderen Zeit gesetzte, als der GPIO-Pin mal ein Ausgang war. Wenn da kein Pegel wirkt, weil kein Kabel etc. angeschlossen ist, dann kannst Du da auch nichts anderes auslesen, erst recht nicht das, was Du da mal hereingeschrieben hast.

    Wenn Du einen GPIO auf Ausgang setzt, dann fließt in der Regel ein Strom vom GPIO-Pin zu GND - der GPIO fungiert hier als Spannungsquelle 3V3 (aber beachte, dass Du einen GPIO nicht mit mehr als 2 mA belasten solltest).

    Wenn Du einen GPIO auf Eingang setzt, dann fließt ein Strom von 3V3 zum GPIO-Pin - der GPIO-Pin hat die Rolle einer Masse / GND.

    Und ansonsten ist es immer wichtig, die eingesetzte Schaltung zu kennen, denn der Fehler kann in der Schaltung oder im Programm liegen, das mit der Schaltung irgendwas machen soll.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (10. Oktober 2015 um 22:51)

  • Hallo Andreas,

    danke schonmal für deine Antwort.

    Ok, das mit dem Wert auslesen habe ich verstanden. Was ich eingangs nicht erwähnt habe, ist, dass ich an mehreren GPIO Pins, die auf "out" stehen mit dem Steckboard eine kleine LED (natürlich mit Wiederstand) angeschlossen habe. Wenn ich mit + der LED auf 3,3V gehe (Pin1) leuchtet die LED, die Schaltung funktioniert also grundsätzlich.

    Allerdings wenn ich nun einen der besagten GPIOs auf High setze, leuchtet die verbundene LED nicht.

    Gurß,
    Patrick

  • Hallo Patrick,

    drehe doch mal die LED um.

    Entweder (bevorzugte Vorgehensweise)
    GPIO-Ausgang-R-LED-GND
    Ausgang auf 1 setzen, LED leuchtet
    Ausgang auf 0 setzen, LED erlischt
    (Richtige Polung der LED vorausgesetzt)

    oder:
    3V3-R-LED-GPIO-Eingang
    GPIO auf Eingang, LED leuchtet
    GPIO auf Ausganng (und 0 gesetzt), LED erlischt

    Was sagt denn ds Linux-Kommando

    Code
    uname -a

    zu Dir?

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Zunächst mal spielt es für "gpio (-g) write" keine Rolle ob der GPIO als Ausgang oder Eingang festgelegt wurde. Die Festlegung, ob der GPIO als Eingang oder Ausgang fungieren soll erfolgt stattdessen über einen anderen Befehl: gpio mode ...

    Mit "gpio -g write 17 1" setzt man GPIO#17 auf HIGH.
    Mit "gpio -g read 17" liest man tatsächlich den aktuellen State aus. Auch wenn man denken mag das man diesen kennen sollte kann man den Befehl trotzdem nutzen ;)

    Diese beiden Befehle sind unabhängig davon ob der GPIO zuvor über "gpio mode" auf OUT oder IN gestellt wurde

    Beispiel:


    solange der Mode also auf "out" steht kann man problemlos "read" anwenden. Nur kann man selbstverständlich keinen Eingang einfach so beeinflussen, dazu muss man schon irgend etwas an den Pin anschließen der mind 1 Volt oder GND auf den Pin legt...

    Übrigens wird bei der aktuellen wiringPi Version keine Datei mehr unter /sys/class/gpio/ erzeugt. Wenn man diese virtuellen Dateien verwenden will muss man zuvor den GPIO darüber auch erst aktivieren (export) und die direction festlegen.

  • Also ich habe die beiden Varianten, die du geschrieben ausprobiert, mit folgendem Ergebnis.

    Variante 1 (so hatte ich es bereits):
    Die LED bleibt immer dunkel, egal ob GPIO auf 1 oder auf 0 gestellt wird (auf out gestellt)

    Variante 2:
    Die LED klimmt schwach, allerdings ist keinerlei Reaktion der LED zu verzeichnen, wenn man den GPIO auf Ausgang stellt. Die LED leuchtet in allen Einstellungen schwach. Wenn der GPIO auf Eingang gestellt ist, dann sollte doch bei dieser Schaltung (LED leuchtet) der Wert des GPIO "1" sein, oder? Beim Auslesen des Wertes kommt hier aber "0".


    Code
    uname -a
    Linux raspberrypi 4.1.7-v7+ #817 SMP PREEMPT Sat Sep 19 15:32:00 BST 2015 armv7l GNU/Linux

    Einmal editiert, zuletzt von Blade-of-Fire (11. Oktober 2015 um 00:01)

  • Dann beschreibe mal bitte so exakt wie möglich wie du as angeschlossen hast und auch was genau du eingibst - alle Befehle inkl. der mode Zeile usw. Am besten du machst Copy&Paste.
    Vllt. aufmahlen und exakte Werte von zB dem Widerstand mit dazu schreiben usw. Eben so detailliert wie möglich.

  • @ meigrafd

    Genauso hatte ich das Verhalten auch in Erinnerung.
    Mein Problem ist, dass die Befehle keinerlei Reaktion bewirken.

    Ich beschäftige mich schon eine Weile mit dem Pi und habe auch schon funktionierende Relaisschaltungen (mit Transistoren) betrieben sowie Taster angeschlossen und erfolgreich abgefragt.
    Aber bei diesem PI ist es, als ob die GPIOs "gesperrt" sind.

    Ist es möglich, dass der PI defekt ist? Der PI ist jetzt gerade mal einen Monat alt, mit den GPIOs hatte ich an diesem PI aber noch nichts gemacht.

  • Naja solange du keinen Schaltplan zeigst oder genauere Details nennst, kann man nicht wirklich jetzt schon von Defekt sprechen.

    Davon abgesehen verwendest du einen BETA Kernel. Das alleine kann schon Grund genug sein wieso irgend etwas nicht so funktioniert wie es sollte....

    Generell (und man kann es anscheint nicht oft genug wiederholen) sollte man nicht planlos 'rpi-update' ausführen. Die darüber geladenen Kernel und Firmware befindet sich aktuell in der Entwicklung und kann Fehlerhaft sein. Die sind also BETA.
    Sobald ein Kernel/Firmware offiziell verwendbar wird, ist dieser auch regulär über apt-get verfügbar.

    Da du bereits einen 4.1.x Kernel drauf hast, davon aber noch kein Stable (non-Beta) raus ist, wäre es nun das einfachste erneut (planlos) 'rpi-update' auszuführen, mit der Hoffnung der derzeit aktuelle BETA Kernel hat kein Problem mehr mit GPIO. Anschließend rebooten und dann probierst du mal das aus was ich in Beitrag#5 beschrieben habe - bitte exakt nach machen. Da dies auf meinem Pi2 mit Kernel 4.0.6 funktioniert sollte es also auch bei dir gehen - es sei denn du machst irgend etwas anders und genau das sollte man ausschließen können, auch wenn du schon zich Relais oder sonst was geschaltet hast, können Flüchtigkeitsfehler zu später Stunde auftreten :fies:
    Ich bin da btw root, also ggf vorher " sudo -s " ausführen.

  • So,
    ich habe nun mal meinen Aufbau gezeichnet. So habe ich GPIO 17 angeschlossen, analog dazu habe ich auch GPIO 27 und 22 getestet:
    .

    Ich hatte gestern die Vermutung, dass es vielleicht mit dem Raspbian zusammen hängt. Daher hatte ich gestern abend mir auf Raspbian nochmal ein Image runter geladen. Da wurde direkt auf der Raspbian-Seite das neue Raspbian Jessy angeboten. Ich dachte, wenn es dort auf der direkten Downloadseite angeboten ist, hat es keinen Beta-Status mehr. Hab da aber auch nicht mehr näher nachgeschaut.
    Das Problem bestand aber auch schon mit dem vorherigen Kernel.

    Ich habe nun nochmal sudo rpi-update ausgeführt.


    Code
    uname -a
    Linux raspberrypi 4.1.10-v7+ #821 SMP PREEMPT Sat Oct 10 00:16:28 BST 2015 armv7l GNU/Linux

    Um auf der gleichen Grundsage zu arbeiten und um, wie du schon sagst, die gleichen Bedinungen zu haben, werde ich jetzt noch mal Raspbian Wheezy installieren.

    Vorher habe ich noch folgende Tests gemacht.

    Was seltsam ist, bei GPIO 25 und 26 hat die LED geleuchtet, die Abfrage hat aber dennoch "0" zurück gegeben (siehe oben). Ich habe wirklich mehrmals geprüft, ob ich wirklich auf dem richtigen GPIO bin.

    Ich verstehe das Verhalten nicht. Es ist, als ob die Befehle und Abfragen von wiringPI überhaupt nichts mit dem tatsächlichen Status zu tun haben.

    Einmal editiert, zuletzt von Blade-of-Fire (11. Oktober 2015 um 13:40)

  • GPIO#17 ist Pin#11. GPIO#27 ist Pin#13

    Führe den 'gpio' Befehl bitte als root aus. Deshalb auch der Hinweis von mir oben: Ich bin root wenn ich die Befehle ausführe. Also wechsel bitte vorher zum root Benutzer: sudo -s

    Spoiler anzeigen

    An dieser Stelle zitiere ich mal einen anderen Beitrag der ein wichtiger Hinweis hierfür sein könnte:


    Ein Update auf ein neues Betriebssystem ist fast nie direkt nach dem Erscheinen zu empfehlen... Da sind immer Anfangsprobleme. Wenn man kein Poweruser ist, sollte man ein paar Wochen wenn nicht Monate abwarten bis die Anfangsschwierigkeiten von Leuten gelöst wurden, die sich entsprechend auskennen.
    Jessie wird in Küre genausogut funktionieren wie aktuell wheezy.
    Und "Neuer Kernel" war auch unter Wheezy ständig, daran liegt es definitiv nicht :P
    Neues OS != neuer Kernel

  • Ok, leider das gleiche Ergebnis mit sudo -s:


    root@raspberrypi:/home/pi# gpio -g mode 22 out
    root@raspberrypi:/home/pi# gpio -g write 22 1
    root@raspberrypi:/home/pi# gpio -g read 22
    0
    [/code]
    Die LED bleibt immer dunkel.

    Ich werde nun mal das Wheezy installieren und kein Update machen. Danach wiederhole ich nochmal die Tests.
    Automatisch zusammengefügt:

    So, Wheezy ist installiert, danach nur

    Code
    sudo apt-get update


    und

    Code
    sudo apt-get install wiringPi

    Leider weiterhin das gleiche Ergebnis:

    Ach ja, die Kernelversion:

    Code
    uname -a
    Linux raspberrypi 3.18.7-v7+ #755 SMP PREEMPT Thu Feb 12 17:20:48 GMT 2015 armv7l GNU/Linux

    Einmal editiert, zuletzt von Blade-of-Fire (11. Oktober 2015 um 14:29)

  • Hallo Jörg,

    ja, die LED ist verpolt - aber das habe ich im Beitrag #4 schon geschrieben.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Jörg,

    da kann man Fehler in der Software / Ansteuerung suchen und diskutieren... die LED kann als unbelebtes Ding nur den Gesetzen der Physik folgen. In Sperrrichtung betrieben, leuchtet da auch nix. Kann nichts leuchten. Darf nix leuchten.

    Und wenn nix leuchtet: Einfach immer wieder das Betriebssystem neu flaschen, bis die SD-Karte glüht.

    Da kann man jetzt auch nicht weiterhelfen... Vielleicht hüpft die LED ja vor Freude aus dem Steckbrett und wird aus Versehen anders herum wieder eingesteckt. Das ist die Hoffnung, die zum Ziel führen könnte. Vielleicht fällt der Tisch um, alles Bastelzeugs ergießt sich auf den Boden und hat die Chance, sinnvoll zusammengesteckt zu werden.

    Da kommt eine Rückmeldung: "Hurra! Jetzt leuchtet sie!" ...

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (11. Oktober 2015 um 20:52)

  • Nu versteift euch mal nicht so auf das Steckbrett-Bild der LED... Das ist arg übertrieben!
    Ob die LED richtig angeschlossen ist oder nicht hat nichts damit zu tun ob man den aktuell geschalteten State des GPIOs auslesen kann.

    Ich hab das doch bereits demonstriert - dort war an den GPIO auch nichts angeschlossen. Notfalls bitte mal selber ausprobieren bevor ihr wegen des Steckbrett-Bilds von der LED noch mehr solcher Beiträge macht...


    //EDIT: EIne Möglichkeit wäre auch die /sys/class/gpio/ Dateien zu verwenden. Bitte kopiere dir mal folgenden Code direkt in nano rein und poste dann unverändert die Ausgabe:

    nano gpioswitch.sh


    Ausführen: sudo bash gpioswitch.sh

    Eigentlich sollte er dann den GPIO hin und her schalten, also von 1 auf 0 und nach einer Sekunde wieder von 0 auf 1 usw.

    Es spielt hier wie gesagt absolut gar keine Rolle ob irgend etwas an den GPIO angeschlossen ist da es sich um ein AUSGANG handelt (out). Hauptsache du verwendest dies mal den von mir vorgegeben GPIO, denn es gibt 2 GPIOs die Probleme machen könnten...

  • Oh, das mit der LED ist mir gar nicht aufgefallen :blush:
    Das bezieht sich aber nur auf die LED in der Zeichnung. Angeschlossen ist sie richtig! Wenn ich die LED statt an einen der konfigurierbaren GPIOs an den 3,3V anschließ, leuchtet sie ja.

    Ich habe das Ganze nun auch mal mit dem Tutorial von raspiprojekt (übrigens eine coole Seite von dessen Shop ich schon öfters bestellt habe :thumbs1: ) getestet. Leider mit dem gleichen Ergebnis... (Led bleibt dunkel)

    Code
    echo "17" > /sys/class/gpio/export
    root@raspberrypi:/home/pi# echo "out" > /sys/class/gpio/gpio17/direction
    root@raspberrypi:/home/pi# echo "1" > /sys/class/gpio/gpio17/value
    root@raspberrypi:/home/pi# cat /sys/class/gpio/gpio17/value
    0
    root@raspberrypi:/home/pi#
  • Altes Thema, ich weiß...

    Dennoch stehe ich mit dem Raspi 3 B+ genau vor dem selben Problem (wiringpi)...

    Die GPIOs lassen sich nicht schalten... Setzt man einen auf High passiert nichts...

    Egal welchen GPIO ich nehme, nichts passiert...

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!