Wechsel von RPi.GPIO auf PIGPIO

  • Hallo zusammen,

    in diesem Projekt (GPIO-STATUS in MySQL-Datenbank schreiben) verwende ich ein Phyton-Script, in dem diverse GPIO´s überwacht werden. Dazu ist die RPi.GPIO- Bibliothek importiert.

    Leider kommt es zeitweise zu Fehlerkennungen der GPOI`s. Die Helfer aus diesem Thread meinten, das es besser sei die PIGPIO-Bibloithek anzuwenden. Diese habe ich installiert.

    Code
    sudo apt-get update
    
    
    sudo apt-get install pigpio python-pigpio python3-pigpio

    Danach habe ich das Phyton-Script an Hand diese Instuktion (http://abyz.co.uk/rpi/pigpio/python.html#set_PWM_dutycycle) versucht anzupassen. So schaut es momentan aus:

    Wenn ich das starte, kommt diese Meldung:

    Code
    pi@raspberrypi:~ $ sudo /test04.py
    Traceback (most recent call last):
     File "/test04.py", line 27, in <module>
       pi.set_mode(29, pigpio.INPUT)
     File "/usr/local/lib/python2.7/dist-packages/pigpio.py", line 1161, in set_mode
       return _u2i(_pigpio_command(self.sl, _PI_CMD_MODES, gpio, mode))
     File "/usr/local/lib/python2.7/dist-packages/pigpio.py", line 943, in _u2i
       raise error(error_text(v))
    pigpio.error: 'no permission to update GPIO'

    Würde mich über Unterstützung freuen, da ich jetzt nicht mehr alleine weiterkomme.

    Gruß - towi

  • Hast du vorher den pigpiod Dienst als root gestartet?

    Übrigens ist pigpiod der "GPIO Server" welchen man über raspi-config aktivieren kann ;)


    Problem wird aber auch sein das "interrupt_Event" noch vom alten Script stammt und in deinem neuen gar nicht mehr angesprochen wird - es wird also aktuell nichts dem Queue hinzugefügt.
    So wie du 'cbf' verwendest macht es aber auch kein Sinn. 'cbf' wäre die CallBackFunction die man definiert und bei einem Flankenwechsel aufgerufen wird - dort musst du den Queue Kram aus "interrupt_Event" rein tun - die Festlegung "pi.callback..." musst du vorher machen, in der for Schleife. Die for Schleife macht so aber auch kein Sinn da du ja eine Liste durchgehst - aktuell setzt du die GPIO's 29 und 31 zwei mal nacheinander....

  • Hallo meigrafd,

    Zitat

    Hast du vorher den pigpiod Dienst als root gestartet?

    Ja - per sudo pigpiod .

    Wie ist die Meldung zu interpretieren - ich kann leider nicht soviel für Einsteiger zu pigpio finden.

    Gruß - towi

  • Ich hab mit pigpio auch noch nicht so viel gemacht... Versuchs mal folgendem Code: http://codepad.org/MtXVnVEl

    Wie gesagt ist es wichtig das der pigpio Dienst im Hintergrund über den root Benutzer läuft - denn dahin verbindet sich dann das Script wodurch das Script selbst auch ohne root-Rechte auskommt.

    //EDIT: Script updated

  • Hallo meigrafd,

    besten Dank erstmal!!! :thumbs1:

    Leider passiert nach wie vor folgendes:

    Code
    pi@raspberrypi:~ $ sudo pigpiod
    pi@raspberrypi:~ $ sudo /test04.py
    Traceback (most recent call last):
     File "/test04.py", line 31, in <module>
       pi.set_mode(gpio, pigpio.INPUT)
     File "/usr/local/lib/python2.7/dist-packages/pigpio.py", line 1161, in set_mod                                                                                        e
       return _u2i(_pigpio_command(self.sl, _PI_CMD_MODES, gpio, mode))
     File "/usr/local/lib/python2.7/dist-packages/pigpio.py", line 943, in _u2i
       raise error(error_text(v))
    pigpio.error: 'no permission to update GPIO'

    Scheinbar nicht so easy der umstieg auf pigpio - eventuell das Packet nochmal neu installieren? Ode was könnte ich da noch checken?

    Trotzdem schon mal vielen Dank - Gruß towi

  • Hallo zusammen,

    nachdem ich über

    Code
    sudo apt-get remove --purge pigpio python-pigpio python3-pigpio

    PIGPIO nochmalig deinstalliert habe, bleibt das übrig:

    Wie kann ich dieses fachgerecht entfernen, damit nach einer Neuinstallation dieses auch nochmal neu installiert wird. Ich vermute mal, dass meine Fehlermeldung (siehe voriger Beitrag) eventuell daher stammt.

    Besten Dank und Gruß - towi

  • Hallo deets,

    nachdem ich es nun doch noch geschafft habe Alles zu cleanen und PIGPIO nochmalig neu installiert habe, kommt jetzt diese Fehlermeldung:



    Irgendwie soll es wohl nicht klappen mit PIGPIO bei mir - noch ´ne Idee - Gruß towi

  • Hm, ich wuerde mal versuchen die Versionen zu vergleichen. Denn das sieht so aus, als ob die Python-Version etwas anderes erwartet als der pigpiod-Server liefert.

  • Hallo zusammen,

    wollte nur noch abschließend bericht, das es mit dem Wechsel doch noch geklappt hat - die Erkennung der GPIO-Eingänge funktioniert jetzt super!

    Der Grund war die falsche GPIO-Nummerierung: Bei PIGPIO darf nur die BCM-Nummerierung des Chip´s verwendet werden!

    Die Entprellung der Eingänge funktioniert per pi.set_glitch_filter(pin, 100000).

    So - jetzt muss nur noch der AUTOSTART klappen - dazu muss ich aber noch ´ne Weile lesen und verstehen(!).

    Also nochmal aller besten Dank an meigrafd, __deets__ und BlackJack(PythonForum) :danke_ATDE:

  • Hallo meigrafd,

    Zitat

    Was funktioniert denn bezüglich Autostart noch nicht?

    Tja - PIGPIO(sudo pigpiod) und das Python-Script(/test05.py) lassen sich nicht über die /etc/rc.local starten.

    Zitat

    Bzw beschreibe bitte detailliert was du gemacht hast, was du wo installiert und eingerichtet hast.

    Nachfolgend der letzte Teil der rc.local vor exit 0 :

    Code
    sudo pigpiod &
    
    
    pi/test05.py &
    
    
    exit 0

    Das python-Script wurde folgendermassen ausführbar gemacht:

    Code
    pi@raspberrypi:~ $ sudo chmod 777 /test05.py

    Habe da scheinbar diverses noch nicht richtig geblickt :s :s :s

    Gruß towi

  • Das kann daran liegen, dass zu dem Zeitpunkt das Netzwerk noch nicht oben ist. Statt immer diesen rc.local oder Crontab-Frickelkram sollte man besser einen richtigen systemd oder system-V Service anlegen, und den in der richtigen Reihenfolge/Abhaengigkeit starten.

  • Wenn du "GPIO Server" über raspi-config aktiviert hast wird pigpiod über eine systemd Unit automatisch gestartet.

    sudo in /etc/rc.local bringt eh nix da das Script bereits als root ausgeführt wird, also auch alle darin befindlichen Sachen.

    "pi/test05.py" ist kein absoluter Pfad - das hatten wir doch schon mal. Woher soll /etc/rc.local wissen wo pi/test05.py sich befindet?

    "sudo chmod 777 /test05.py"

    das wiederum ist ein absoluter Pfad: /test05.py
    Allerdings zeigt das nicht aufs HOME Verzeichnis vom pi Benutzer: /home/pi/ .... sondern aufs Wurzelverzeichnis: /
    Das wiederum widerspricht sich also mit deinem /etc/rc.local Eintrag.

  • Hallo meigrafd,

    leider kann ich in der raspi-config unter Advanced Options keinen Eintag GPIO Server bei mir finden.
    Auf meinem Raspi ist allerdings nur ein Volkszähler-Image installiert >>> kann das eventuell die Ursache sein und wie kann pigpiod noch per AUTOSTART gestartet werden?

    Leider startet /test05.py(absoluter Pfad) per /etc/rc.local auch nicht! Hatte ich vorab bereits mehrfach probiert. :daumendreh2:

    Gruß towi

  • Wie gesagt - Chaos ;)

    Du hast eine Datei: /home/pi/test05.py
    Das ist der absolute Pfad. Diesen Pfad musst du auch in /etc/rc.local nutzen, nicht /test05.py die Datei wird es nicht geben. Vermutlich. Ich versuche durch dein Chaos durchzusteigen.

    Du kannst dir das aktuelle raspi-config Script wie folgt installieren:

    Code
    wget -O /usr/bin/raspi-config https://raw.githubusercontent.com/RPi-Distro/raspi-config/master/raspi-config
    chmod +x /usr/bin/raspi-config
  • Hallo meigrafd,

    Zitat

    Du kannst dir das aktuelle raspi-config Script wie folgt installieren:

    ....


    habe ich installiert. Kann jetzt den Menüpunkt GPIO Server finden - aber was muss den da eingestellt werden - ich kann nur auswählen, ob die GPIO´s über das Netzwerk erreichbar seien sollen oder nicht. Habe es mal umgestellt und danach kommt diese Meldung:

    Code
    pi@raspberrypi:~ $ sudo raspi-config
    
    
    Failed to restart pigpiod.service: Unit pigpiod.service failed to load: No such file or directory.

    In der /etc/rc.local steht momentan dieses(hatte ich allerdings vorab auch schon ohne Erfolg probiert):

    Code
    /home/pi/test05.py &
    
    
    exit 0

    Funktioniert leider noch nicht.

    Gruß und Dank - towi

  • Hm und du hast auch einen Shebang ganz oben in dein test05.py eingetragen sowie das Script ausführbar gemacht? Beides ist bei dieser Startweise nötig. Alternativ die Datei dem python Interpreter übergeben.

    Wegen pigpiod:

    Welches System hast du?
    ich kenne das Volkszaehler Image nicht... Aber wenn du kein systemd hast dann wird das auch nichts ;)
    Im raspi-config Script wird die pigpiod.service Unit selber erstellt: https://github.com/RPi-Distro/ras…spi-config#L997

  • Hallo meigrafd,

    hier mal das ganze Python-Script:


    Ein Shebang ist, denke ich, in der ersten Zeile vorhanden. Habe das Script jetzt nochmal in das Verzeichnis/home/pi/ kopiert und die Ausführbarkeit mit sudo chmode 777 /home/pi/test05.py festgelegt. (Manuell lässt es sich nach sudo pigpiod ohne Probleme starten)

    Zitat

    Aber wenn du kein systemd hast dann wird das auch nichts

    :

    :denker: Besten Dank und Gruß - towi

Jetzt mitmachen!

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