Hilfe bei Bash Programmierung / GPIOs abfragen

  • Hallo Zusammen,

    ich möchte gerne abhängig vom Zustand eines GPIOs eine Aufnahme per FFMPEG starten und dann beim High werden des GPIOs wieder stoppen. Soweit so gut, aber es scheitert leider an der If Abfrage vom Zustand des GPIOs. Es gibt da anscheinend mehrere Möglichkeiten für eine funktionierende Syntax aber ich blicke das jetzt nach mehreren Versuchen leider nicht mehr. Aktuell sieht der Code wie folgt aus:

    Momentan bekomme ich dies als Fehlermeldung:

    sh: 0: unknown operand

    sh: /sys/class/gpio/gpio68/value: unknown operand

    while


    Hätte hier irgendwer noch eine Idee?

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

  • Musst Du die sh nutzen? Nimm bash und da gibt es auch [[ ]]

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect."

    Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :fies: Bei mir tut das raspiBackup automatisch :shy:

  • Ich wuerde das ganze wie folgt Implementieren:


    Die ganze Sache hat aber noch den Haken dass man bis zu 10 Sekunden den GPIO auf einen neuen Level bringen muss um einen Wechsel zu erkennen. Aber ohne sleep hast Du eine Busyloop die nicht angeraten ist. Man kann bei den GPIOs auch auf Flankenwechsel reagieren. Wie man das in bash bewerkstelligen kann weiss ich aber nicht. In C geht das.

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect."

    Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :fies: Bei mir tut das raspiBackup automatisch :shy:

  • Bash kann Funktionen und damit auch eine Art Callback. So blickt doch keiner durch was wann pasiert. :conf:


    Vor allem jedes mal das USB-Laufwerk mounten für eine Aufnahme sehe ich kritisch, ob das in ausreichender Zeit passiert (das Laufwerk wacht erst auf und daaaaan wird das initialisiert und gemountet) wenn es denn dann auch den richtigen Buchstaben vom System bekommt und danach wird das wieder ausgehangen und geht schlafen.... usw.


    In C geht das

    Und in Python natürlich auch. https://gpiozero.readthedocs.i…table/recipes.html#button

  • Hallo framp,

    Die ganze Sache hat aber noch den Haken dass man bis zu 10 Sekunden den GPIO auf einen neuen Level bringen muss um einen Wechsel zu erkennen. Aber ohne sleep hast Du eine Busyloop die nicht angeraten ist. Man kann bei den GPIOs auch auf Flankenwechsel reagieren. Wie man das in bash bewerkstelligen kann weiss ich aber nicht. In C geht das.

    wo hast Du das mit den 10 Sekunden her?


    Ich habe meine erste GPIO-Library in Icon ja auch rein sysfs-basiert programmiert. Da kann ich diese Zeitspanne nicht annähernd bestätigen. Weder beim Lesen noch beim Setzen eines Pegels.


    In meiner letzten Version (in Assembler geschrieben) habe ich ganz andere Werte. Mehrere 100 MHz beim Toggeln eines Pins oder bis zu 31 Pins gleichzeitig ebenfalls mehrere 100 MHz.


    Flankenwechsel sind in Bash auch kein Hexenwerk. Du musst nur den Pegel (high, low oder Wechsel) eintragen. Das sysfs reagiert dann, wenn der definierte Pegel erkannt wird.


    Beispiel:

    Code
    ...
    echo 6 > /sys/class/gpio/export
    echo "in" > /sys/class/gpio/gpio6/direction
    echo "rising" > /sys/class/gpio/gpio6/edge

    Bei rising werden dann steigende Flanken (von low nach high) erkannt. Andere Möglichkeiten sind "falling", "both" und "none".




    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

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    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.

    Edited once, last by Andreas ().

  • Und in Python natürlich auch.

    Ich weiss :) Python ist aber nicht so ganz meine favorit Programmiersprache :no_sad:

    wo hast Du das mit den 10 Sekunden her?

    Aus dem Code des TEs ;) . Ich muss gestehen dass ich da nicht gross drueber nachgedacht habe :blush:

    Flankenwechsel sind in Bash auch kein Hexenwerk. Du musst nur den Pegel (high, low oder Wechsel) eintragen.

    Ich glaube zu wissen was Du sagen willst. Hast Du noch ein kleines Code Sample fuer die Detektion eines Flankenwechsels in bash fuer den TE?

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect."

    Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :fies: Bei mir tut das raspiBackup automatisch :shy:

  • Hallo framp,


    ja, sleep 10 erklärt dann das dösige Verhalten des bash-Skriptes. Ohne wäre es flotter unterwegs.


    Code-Beispiel zum Pegel-Setzen siehe Beitrag #5.



    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

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    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 petit_miner,




    Was spricht gegen die Verwendung eines existenten GPIO?


    Welcher Pin soll 68 sein?


    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

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    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.

  • Code-Beispiel zum Pegel-Setzen siehe Beitrag #5.

    Danke. Aber ich haette irgendeinen Callback erwartet :conf: Oder kann man in bash nur pollen?

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect."

    Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :fies: Bei mir tut das raspiBackup automatisch :shy:

  • Man kann inotifywait nutzen, um dann auf eine Flanke zu warten.

    Eigentlich soll man das sysfs-Interface nicht mehr nutzen, da es veraltet ist und seit 2020 nicht mehr im Kernel vorhanden sein soll.


    Man soll stattdessen gpiod verwenden, welches der neue Standard für gpio ist.




    Anfassen sieht dann so aus: