• Guten Abend!

    Ich habe mir ein Programm (C++) geschrieben, welches mir den Zustand (0/1) der GPIO's am Raspberry ausgibt und in eine mysql Datenbank schreibt. Dies funktioniert auch alles schon sehr gut. Jetzt würde ich gern noch abfragen, ob der GPIOpin als Eingang oder als Ausgang definiert wurde.
    Was ich nicht möchte, ist die GPIO's im Programm als Ein- bzw. Ausgang definieren da dies beim Starten des RPi aus einem EEProm gelesen werden und sich je nach verwendetem Zusatzboard ändern.
    Gibt es da eine Lösung ? Wenn ja welche ?

    Für Hilfe wäre ich sehr Dankbar !
    pustewind

  • Hallo pustewind,

    herzlich Willkommen in unserem Forum!


    Wie soll dass denn gehen? Wenn Du einen GPIO auf 0 oder 1 setzt, dann musst Du ihn vorher auf Ausgang gesetzt haben.

    Und wenn Du einen GPIO abfragst, dann musst Du ihn vorher auf Eingang gesetzt haben.

    Es gibt zwar eine GPIO-Bibliothek, mit der man den gesetzten Wert nochmal abfragen kann. Aber so richtig mag sich der Sinn mir nicht erschließen.


    Üblicherweise setzt man einen GPIO auf Ausgang und 0 oder 1, um irgendwas zu schalten.

    Und man fragt einen Pin ab, um zu sehen, ob irgenwo was geschaltet wurde oder sich irgendein Schaltzustand geändert hat oder immer noch so ist, wie vorher.


    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 (30. Mai 2016 um 22:11)

  • Hallo Andreas,

    danke für die Antwort. Das ist richtig. Die GPIO's werden beim Start des Raspi aus einem EEProm gelesen und auf Ein- bzw. Ausgang gesetzt. Das funktioniert auch alles.
    Der EEprom wird einmalig programmiert und dabei werden die GPIO's als Eingang bzw. Ausgang festgelegt.
    Nun möchte ich mit C++ abfragen ob z.Bsp. GPIO 21 als Eingang oder als Ausgang konfiguriert wurde.
    Der Sinn dabei ist, dass ich mehrere Zusatzboards habe bei denen die GPIOs unterschiedlich gesetzt sind. Ziel ist, meherere Raspberry zu verbinden und die GPIO's zentral über meine Datenbank zu verwalten.

    Gruß
    pustewind


  • Der Broadcom 2835 (zum Beispiel) hat 5 (jeweils 32 Bit breite) Function Select Register (ein Register verarztet jeweils 10 GPIO's, 2 Bit sind reserved), welche gelesen und geschrieben werden können. Jeweils 3 Bit codieren den Typ des Pins 000=Input, 001=Output, 010=alternative function 5... Damit könntest Du auslesen, wie die IO's programmiert wurden. Device mem öffnen, mem-mapped File erzeugen... Aber schau' erst mal in ds' Link - das kann einfacher werden :)
    Zudem - wenn das EEprom den Raspi konfiguriert - kann es dann nicht seine Konfiguration auch Dir mitteilen? Die Information lümmelt doch sicher auch noch irgendwo im Filesystem rum - oder?

  • Hallo dreamshader,

    werd ich morgen gleich ausprobieren.

    Danke

    Gruß
    pustewind


    Servus,
    das sollte z.B. mit der -> pigpio-Library <- funktionieren ...

    cheers,
    -ds-


    Automatisch zusammengefügt:
    Hallo schnasseldag,

    irgendwo lümmelt die Info auch rum "gpio readall" an der Konsole eingegeben findet sie auch - nur ich noch nicht =(

    Gruß

    pustewind


    Der Broadcom 2835 (zum Beispiel) hat 5 (jeweils 32 Bit breite) Function Select Register (ein Register verarztet jeweils 10 GPIO's, 2 Bit sind reserved), welche gelesen und geschrieben werden können. Jeweils 3 Bit codieren den Typ des Pins 000=Input, 001=Output, 010=alternative function 5... Damit könntest Du auslesen, wie die IO's programmiert wurden. Device mem öffnen, mem-mapped File erzeugen... Aber schau' erst mal in ds' Link - das kann einfacher werden :)
    Zudem - wenn das EEprom den Raspi konfiguriert - kann es dann nicht seine Konfiguration auch Dir mitteilen? Die Information lümmelt doch sicher auch noch irgendwo im Filesystem rum - oder?

    Einmal editiert, zuletzt von pustewind (30. Mai 2016 um 23:01)

  • Hallo dreamshader,

    danke das war der richtige Hinweis. :bravo2:
    Damit funktioniert es perfekt. Danke auch an all die Anderen!

    Für alle die es interessiert:

    pigpio.h wie hier: pigpio-Library beschrieben installieren, dann funktioniert es mit folgendem Code:


    [c++]
    printf ("GPIO 21: %d", gpioGetMode(21));
    [/c++]

    gibt einen Wert von 0 - 7 aus (0 = INPUT, 1=OUTPUT, 2-7 = ALT0 - ALT5)

    Gruß pustewind

    Einmal editiert, zuletzt von pustewind (5. Juni 2016 um 19:14)

Jetzt mitmachen!

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