Python Script Executable machen GPIO funktioniert nicht

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,
    ich bin neu im Forum und auch relativ frisch im Programmieren im Python. Ich habe aber schon eine ganze Menge hinbekommen (auch durch Hilfe durch dieses Forum) nur hänge ich an einem Problem fest:

    Ich habe einen Raspberry Pi und lasse dort ein Python Script laufen, welches auch mit GPIOs arbeitet. Sowohl Ein- als auch Ausgängen. Das .py Script habe ich in Python 2.7.9 Shell geschrieben und wenn ich es per "F5" ausführe, funktioniert alles wie es soll - keine Probleme.

    Nun möchte ich, dass das Script beim Start des Pi automatisch ausgeführt wird. Ich weiß mittlerweile, dass es eine Vielzahl an Möglichkeiten gibt, dies zu realisieren.

    Das erste Problem, was ich jedoch habe, ist, dass ich egal was ich mache, das Python Script zwar "executable" bekomme und es auch ausgeführt wird, allerdings reagieren die GPIOs überhaupt nicht.

    Sowohl das direkte Ausführen des .py Scripts als auch das Ausführen über ein Shell Script (mit sudo und allem) funktionieren grundsätzlich (Slideshow wird gestartet mit eog), aber kein GPIO reagiert. Starte ich das Script wieder "normal" aus dem 2.7.9 per Shell funktioniert alles wie es soll.

    Könnt ihr mir helfen? Was mache ich falsch?

    Danke schon mal und ich hoffe auf Antworten, im Netz habe ich nichts weiter dazu gefunden.

    Ich nutze ein Raspbian GNU/Linux 8 (jessie). Ich hoffe die Informationen reichen vorerst, um einen Eindruck zu bekommen, was ich möchte.

    Schöne Grüße
    Kaufner

  • Python Script Executable machen GPIO funktioniert nicht? Schau mal ob du hier fündig wirst!


  • Kannst du mal das Script posten?

    Hi, na klar. Hier also mal eine abgespeckte Variante, das Problem besteht hier aber genauso. Die "else-Bedingung ist hier unsinnig, ich weiß, kommt von dem Abspecken der Variante.

  • Hallo Kaufner,

    herzlich Willkommen uin unserem Forum!

    Ersetze bitte mal alle externen Programm, die Du in Deinem Python-Skript aufrufen möchtest, durch absolute Pfade.
    Das gleiche machst Du auch mit Deinem Autostart.

    Wenn Dein Programm eine X-Server-Umgebung benötigt, dann kommen auch nur solche Autostart-Methoden in Frage, die erst aktiv werden, wenn der X-Server aktiv ist. Dazu hast Du leider nichts geschrieben - deshalb kann ich da nur spekulieren. Es ist aber sehr stark anzunehmen...


    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 (26. April 2016 um 21:13)

  • Hallo Andreas,

    danke für den Tipp. Ich weiß nur leider nicht ganz wie du das meinst. Ich habe mal die Zeile mit den gsettings und die letzte Zeile mit der Slideshow auskommentiert und einfach ein sleep(10) und print "Ende" eingefügt um KEIN externes Programm aufzurufen.
    Damit funktioniert dann tatsächlich der GPIO Ein- und Ausgang.

    Wenn ich jetzt mal die letzte Zeile mit dem ganzen Pfad angebe, so verstehe ich es:

    p = subprocess.Popen("(/usr/bin/eog --fullscreen --slide-show -s /home/pi/Test", shell=True)

    Dann läuft die Slideshow zwar, allerdings reagiert der GPIO dann wieder nicht.

    Wie gebe ich den vollständigen Pfad richtig an?

    @ Berlin_pi

    Danke auch für deine Antwort, das mit dem Autostart würde ich gerne dann ausprobieren, wenn grundsätzlich das Script ausführbar ist und die GPIOs funktionieren.

  • OK,
    ich habe jetzt die beiden Befehle für die Slideshow mit subprocess.call ersetzt. Jetzt kann ich das Script ausführbar machen mit chmod und mit Klick auf Execute wird alles so ausgeführt wie ich mir das vorstelle. Hier der gesamte Code:

    Allerdings habe ich es jetzt trotzdem noch auf keine Art und Weise hinbekommen, das Script automatisch beim Start/Boot/Reboot zu starten.
    Habe es in der rc.local und per crontab versucht - ohne Erfolg.

    Kann mir da jemand weiterhelfen?


  • Hi,
    mache mal den Autostart über rc.local rückgängig und Probier das mal http://www.raspberrypi-spy.co.uk/2014/05/how-to…n-lxde-desktop/

    Also grundsätzlich funktioniert jetzt wie gesagt das Python Script als Executable. Dann habe ich ein .sh Script geschrieben und das noch mal zum Testen in die rc.local mit eingebunden. Wenn ich einfach im Terminal die /etc/rc.local ausführe läuft das .py Script an und auch die GPIOs funktionieren. Allerdings wird bei einem Neustart des Pi zwar die rc.local ausgeführt, das .sh darin irgendwie auch aber das .py Script nicht...

    So wie ich verstanden habe liegt das daran, dass erst der XServer (?) gestartet werden muss.

    Wenn ich der Anleitung in dem Link von oben folge und Methode 1 durchführe komme ich über die

    Code
    sudo nano /etc/xdg/lxsession/LXDE-pi/autostart

    an einen Punkt, an dem ich folgendes sehe:

    Code
    @lxpanel --profile LXDE-pi
    @pcmanfm --desktop --profile LXDE-pi
    #mehrere andere Befehle
    @unclutter
    @/usr/bin/python /home/pi/script.py

    Ich habe also mein Script dort unten eingetragen. Wenn ich nun neu starte passiert wieder nichts. Wenn ich im Terminal "startx" eingebe (ich weiß nicht ob ich das überhaupt tun muss) komme ich an ein Loginfenster. Wenn ich dort Benutzername und Passwort eingebe wird der Bildschirm schwarz und dann geht es wieder zum Loginfenster.
    Aus der Nummer bin ich nur mit Strg+Alt+F1 und sudo chown pi:pi .Xauthority und sudo reboot wieder herausgekommen.

    Berlin_pi
    Den Test aus deinem letzten Beitrag habe ich auch gemacht, allerdings findet er diese Datei nicht und ich müsste sie neu erstellen. Da habe ich erstmal doch die Methode aus dem Link ausprobiert...

    Wie kann ich dieses Problem mit dem Autostart nun lösen?


  • Eine idee habe ich noch: Rufe mal den raspi config auf ubd Bei booteinstellungen gebe mal Desktop Autologin ein vielleichts hilfts

    Gesendet von meinem GT-I8190 mit Tapatalk

    Das hat leider auch nicht geholfen aber ich glaube ich habe jetzt die Lösung:

    per:

    Code
    sudo nano /etc/xdg/autostart/script.desktop

    eine neue Datei erstellen mit folgendem Inhalt:

    Code
    [Desktop Entry]
    Name=Script
    Exec=/home/pi/starter.sh
    Terminal=false
    Type=Application

    Die starter.sh muss ausführbar sein, genau wie das python script:

    starter.sh sieht wie folgt aus:

    Bash
    #!/bin/sh
    
    
    sudo /usr/bin/python /home/pi/script.py

    Ich vermute mal das ist eine Lösung von hinten durch den Rücken in die Brust aber es funktioniert erstmal so wie ich es brauche, falls jemand dazu Anmerkungen oder Verbesserungsvorschläge hat bin ich offen :)

Jetzt mitmachen!

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