Benötige etwas Unterstützung mit GPIO und Python

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    Ich hab etliche Programme in Basic/VisualBasic geschrieben, auch PHP/MySQL/CSS/HTML sind mir nicht fremd.
    An Python und dem Pi verzweifele ich grad.

    Fernziel ist eine Anwendung um im möglichst hoher Frequenz über einen Eingang vom GPIO werte zu nehmen (Blitze / Gewitter - da gibts halt immer nur sehr kurze Inpulse). Die Messwerte sollen in eine Datenbank.

    Die Anwendung würde ich gern über VNC starten/stoppen können - WLAN-Zugriff.

    Zum Testen hab ich mal eine kleine Anwendung im IDLE3 unter Python geschrieben. Zuerst einmal nur eine Oberfläche gestaltet, welche ein Label regelmäßig umschreibt. Sobald ich das Programm starte, ist die Ereignisabfrage von den Buttons nicht mehr gegeben. Irgendwie bräuchte ich so was wie DoEvents in VisualBasic, welches mal kurz die wartenden Mausklicks oder Tastaturbefehle abfragt, und dann die Schleife fortsetzt.

    Ein zweites Problem hab ich mit GPIO. Kann ich als User über VNC anscheinend nicht nutzen, da der Zugriff auf den Speicher gesperrt ist.
    Das könnte aber evtl. über pigpio funktionieren, da probiere ich grad.

    Evtl. könnt ihr mir da helfen, wie ich die Schleife minimal lange unterbrechen kann um Tastatur/Maus/evtl. kommt noch ne Handy-App irgendwann dazu, abzufangen. Und, ob RPi.GPIO doch irgendwie nutzbar ist.

    Den Raspberry hab ich grad neu und mit Paspbian prepariert.

    Viele Grüße
    Stefan

  • Benötige etwas Unterstützung mit GPIO und Python? Schau mal ob du hier fündig wirst!

  • Normalerweise solltest Du auch mit vnc auf dem RasPi arbeiten können. Ich hatte auch erst vnc genutz, aber da ich hier auch Windowsrechner habe bin ich auf Remotedesktop umgestiegen. Funktioniert problemlos. Es ist schwierig ohne Deinen konkreten Code aussagen zu treffen. Aber ich kann Dich schon mal beruhigen, natürlich unterstützt RPi.GPIO auch das Eventhandling.

  • Hallo,
    zu dem GPIO Problem. Hast du bedacht, dass es für den Zugriff auf die GPIOs root-Rechte braucht?
    Wenn du in IDLE ein Script laufen lassen willst, dass auf die GPIOs zugreifen soll, musst du IDLE mit sudo starten.
    Gruß


  • Normalerweise solltest Du auch mit vnc auf dem RasPi arbeiten können. Ich hatte auch erst vnc genutz, aber da ich hier auch Windowsrechner habe bin ich auf Remotedesktop umgestiegen. Funktioniert problemlos. Es ist schwierig ohne Deinen konkreten Code aussagen zu treffen. Aber ich kann Dich schon mal beruhigen, natürlich unterstützt RPi.GPIO auch das Eventhandling.

    VNC funktioniert ja auch prima. Ich hab halt einen alten Monitor ohne HDMI und muss den RasPi immer an den Fernseher anklemmen, wenn ich den direkt ansprechen möchte. Daher habe ich VNC eingerichtet und nutze den nun Kabellos (nur Stromversorgung) über WLAN.

    RPi.GPIO funktioniert aber anscheinend über VNC nicht, da der Netzwerk-User nicht auf den Speicher zugreifen kann.

    Code gibts gleich - ich muss den mal eben irgendwie vom RasPi auf Windows rüberschaufeln.

  • zu dem GPIO Problem. Hast du bedacht, dass es für den Zugriff auf die GPIOs root-Rechte braucht?

    Das ist streng betrachtet nicht richtig :fies:

    Es verhält sich erst mal nur so das der Benutzer Mitglied in der Gruppe 'gpio' sein muss. root wäre das in jedem Fall da dies der Hauptbenutzer ist und quasi alles darf.

    Sofern der normale Benutzer Mitglied in der Gruppe 'gpio' ist, kann dieser auch ohne /dev/mem direkten Einfluss auf die GPIO's nehmen und zwar über die virtuellen Dateien in /sys/class/gpio/

    Eine Besonderheit stellt das Python-Module RPi.GPIO dar, welches eingebaut hat auf /dev/mem zugreifen zu wollen. Das ist also speziell in diesem Python-Module so festgelegt, da dies die Hardware-Register verwendet..
    Normale Benutzer dürfen halt nicht direkten Einfluss auf die Hardware nehmen, und diese möglicherweise negativ beeinflussen. Deshalb ist normalen Benutzern der Zugriff auf /dev/mem untersagt.

    Würde man den Dienst pigpiod verwenden, würde dieses Daemon Programm als root laufen und jeder normale Benutzer kann über sog. Sockets darauf zugreifen (also sogar auch über Netzwerk) und die GPIO's beeinflussen. pigpiod läuft dann also wie gesagt als root, die Scripts brauchen dann aber keine root Rechte mehr.

    Aber auch mit dem Python-Module RPi.GPIO kann man durch einen (quasi) Trick auf 'sudo' verzichten - einfach mit Sonderrechten: https://wiki.ubuntuusers.de/Rechte#Sonderrechte
    Die Beschreibung solltet ihr euch auf jeden Fall durch lesen - und auf keinen Fall ohne zu wissen was ihr tut auf irgendwelche Dateien oder gar Befehle anwenden !!!!

    Wer die Beschreibung gelesen hat, aber nicht weiß was er nun machen soll:

    Code
    sudo chown root /path/to/script.py
    sudo chmod 4775 /path/to/script.py
  • Ersteinmal einen Herzlichen Dank an Alle hier.

    habt mir sehr geholfen.
    Ich nutze nun pigpio und eine angepasstes Modul um ein LCD im 8-Bit Modus ansprechen zu können.
    Auch trigger ich eine ansteigende Flanke.

    Probleme hab ich immer noch reichlich.

    Ersteinmal Detailliert eine Zielbeschreibung:

    Der Raspi soll von speziellen Messgeräten Blitzimpulse zählen und das möglichst schnell (600-800 pro Minute).
    Da da System halt auch bei Gewitter ohne zutun des Users funktionieren soll, wird der Raspi über eine Powerbank mit Strom versorgt. Daß Messgerät selber hat eine Motorradbatterie mit 12V oder sowas, kann aber auch 9V oder 14V sein. Die Schaltung ist galvanisch über einen Optokoppler getrennt, welcher auf Masse schaltet, also hier eigendlich nicht relevant.
    Da man bei Gewitter nicht unbedingt seinen PC anmacht und die Oberfläche über VNC mit den meisten Handys gruselig ist, hab ich 3 Taster am Raspi direkt angebracht und ein 16x2 LCD.
    Damit kann man fast alles steuern. Die Daten gehen beim Raspberry in eine Datenbank (MySQL) - da muss ich noch einen Thread einbauen, damit ich möglichst wenig Werte verschlabbere.
    Für die Zukunft hab ich eine Android-App geplant, um die Steuerung des Raspi zu übernehmen.

    Nun hab ich ein Problem:
    Die VNC-Steuerung mag ich nicht komplett aufgeben, da ich hier deutlich mehr Fehler angezeigt bekomme, als über LCD möglich.
    Tkinter - bzw. X würde ich gern aber vom Projekt komplett abkoppeln und nur aktivieren, wenn wirklich über VNC gestartet.
    Genauso soll das LCD optional sein und ein Zugriff über Android auch.


    Aktuell läuft einiges, aber z.Zt. bekomme ich immer eine Fehlermeldung, daß mainloop ausserhalb von main läuft oder so.

    Der Code ist garantiert gruselig für eingefleischte, aber ich taste mich halt ran. Für Kritik bin ich sehr offen, also Ideen und Schimpfe immer ran damit. Ich hab halt mit GOTO usw. am C64 mal programmieren gelernt.

    Viele Grüße
    Stefan

    Evtl. könnt ihr mir ja helfen den Code zu optimieren und Fehler in Zukunft zu vermeiden.

    • Offizieller Beitrag

    Du hast ein Haufen "oder so" in deinem Post. Poste die Fehlermeldung so wie erscheint und nicht wie du sie dir zusammenfantasierst ;)

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.


  • Du hast ein Haufen "oder so" in deinem Post. Poste die Fehlermeldung so wie erscheint und nicht wie du sie dir zusammenfantasierst ;)

    Na ja, ein Haufen sieht anders aus.

    Hier die Fehlermeldungen:

Jetzt mitmachen!

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