Python 3 und GPIO

  • Hallo Forum,


    ich habe mithilfe von Python 3 ein kleines Programm geschrieben das eine Programmoberfläche mit Buttons erzeugt. Ich möchte jetzt diese Buttons benutzen um eine Ampel zu steuern. Dazu muss ich verschiedene Pins des GPIO ansteuern. Wenn ich allerdings versuche den GPIO anzusteuern erhalte ich immer wieder eine Fehlermeldung mit dem Hinweis "try running as root". Ich habe mittlerweile nachgelesen das man den GPIO nur als root ansteuern kann. Alle Lösungen im Internet steuern den GPIO direkt über das Terminal aber ich möchte das ja über eine Programmoberfläche erreichen. Wie schaff ich das am besten??
    Vielen Dank schon einmal für alle Antworten

  • Hallo und willkommen im Forum,


    normalerweise benutze ich dafür immer "sudo python [scriptname]".


    Kannst du uns den Code für deine Benutzeroberfläche mal zeigen? Das wäre sicher hilfreich :)

  • Hi,


    entweder, in dem Du das Python 3 Script wie folgt ausführst:


    [code=php]sudo python deinskript.py[/php]


    Oder aber das Skript ausführbar machst:


    [code=php]sudo chmod a+x deinskript.py[/php]



    Mfg

    “Don’t comment bad code - rewrite it.”

  • Wenn das Script als root ausgeführt wird werden auch alle darin befindlichen Dinge als root laufen. Führst du also sudo script.py aus solltest du problemlos die GPIO's ansprechen können.


    Ausführbar muss (oder kann) man das Script nur machen wenn in der Datei ein Shebang angegeben ist. Das legt dann aber noch nicht fest als welcher Benutzer es ausgeführt wird - also root oder pi.
    Wenn es ausführbar gemacht wurde und ein Shebang gesetzt ist, brauch man nur noch sudo script.py ausführen. Falls aber kein Shebang gesetzt ist muss man die Datei direkt dem Interpreter übergeben: sudo python3 script.py


    Desweiteren kommt es darauf an was du verwendest um die GPIO's anzusprechen. Eine brauchbare Alternative für das weit verbreitete RPi.GPIO ist imho pigpio was auch eine Server und Client Variante bietet.. Es läuft in dem Fall als root ein Server-Daemon (pigpiod) und ein normaler Benutzer kann (sogar übers Netzwerk) auf die GPIO's zugreifen, dieser benötigt dann also keine sudo Rechte.