Hilfe bei Bash Programmierung / GPIOs abfragen

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
  • 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?

  • 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.

    :no_sad: Kein Backup - kein Mitleid :no_sad:
    :) Nutze lieber raspiBackup bevor Du in die Luft gehst :)
  • 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?

    :no_sad: Kein Backup - kein Mitleid :no_sad:
    :) Nutze lieber raspiBackup bevor Du in die Luft gehst :)
  • 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.

  • 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: