Zeichkette in Variable übergeben

L I V E Stammtisch ab 20:30 Uhr im Chat
  • aktuell will ich erst mal nur wissen welchen Status mein Port 2 am Pi hat. Das muss man doch abfragen können. Ist der Status 1 oder 0. Nur wie? ich finde einfach nichts passendes und ich will das eben nicht über wiring machen.

  • Linus vielleicht will ich auch etwas was nicht geht?! ich weiß es nicht ich versuche es aber noch mal zu beschreiben.

    Nehmen wir an wir schalten einen GPIO Port am Raspberry pi. Ich verwende für die Pins das Schema BCM. Das müsste also auf dem Pi Pin 3 sein. Nun schalte ich also den Pin auf 1 sprich auf High. Das macht er auch alles. Nun will ich aber wissen ob der Pin 3 auch wirklich auf High steht. So zu sagen eine Überprüfung! Ich will also den Pin 3 auslesen und der müsste mir 1 wiedergeben.

    Das sollte doch gehen? Ich bin mir sicher das ich das schon irgendwo gesehen habe aber ich finde nichts brauchbares.

    Was ich nicht will ist es den Pin anstatt auf Out auf In zu setzen. Ich weiß, wenn ich das tue, könnte ich den Pin 3 als Eingang nutzen. Aber nein das will ich nicht! Ich möchte nur den Status von Pin 3 wissen

    Ich hoffe es ist jetzt klarer was ich will

  • BTW: Muss man in Icon die GPIOs nicht auf Ein- oder Ausgabe schalten?

    Das macht die von Andreas erstellte Lib... Deshalb sind so pauschale Aussagen "ich brauch in Icon weniger Zeilen" auch ne große Grauzone, aber egal... Ist sowieso sinnfrei bei Python relevanten Fragen mit Codebeispielen von ICON anzukommen.

  • Hallo tutter,

    Deine Idee bringt Dich meiner Meinung nach nicht weiter.

    Du kannst einen GPIO-Port setzen, wenn er als Ausgang geschaltet ist.

    Und Du kannst ihn abfragen, wenn er als Eingang geschaltet ist.

    Warum sollte ein GPIO-Pin, den Du auf irgendeinen Wert gesetzt hast, danach einen anderen Wert annehmen?

    :conf:

    Oder?

    :conf:

    Oder nicht?

    :conf:

    Nein!

    :no_sad:

    Doch!

    :cool:

    Oh!

    :denker:


    Du kannst über filesys sicherlich irgendwas abfragen. Wahrscheinlich gibt es auch irgendwelche Bibliotheken, die Dir die Umsetzung Deiner Idee vorgaukeln. Aber was immer Du abfragst, wird das sein, was Du gesetzt hast. Wenn es anders wäre, wäre das Ganze mit den GPIOs ja Humbug. Weil nicht reproduzierbar.


    Die GPIO-Library, die ich mal programmiert habe, speichert den Status aller benutzten GPIO-Pins in einer Tabellen-Datenstruktur und aktualisiert dies Tabelle bei jeder Änderung. Diese Tabelle kann man theoretisch auch auslesen, ohne den GPIO-Pin auf Eingang zu setzen. Da stellt sich mir aber auch die Frage wieso und wozu?


    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.

    2 Mal editiert, zuletzt von Andreas (24. November 2017 um 20:13)

  • Hallo Manul,

    BTW: Muss man in Icon die GPIOs nicht auf Ein- oder Ausgabe schalten?

    Nö. Warum sollte man?

    Das ist das geniale an Icon und der Umsetzung des GPIO-Befehls.

    Code
    GPIO(p, v)

    schaltet einen GPIO-Pin p auf Ausgang und setzt den Wert v.

    Code
    v := GPIO(p)

    setzt einen GPIO-Pin auf Eingang, liest diesen GPIO-Pin p aus und überträgt den Wert in die Variable v.

    Somit entscheidet Funktion GPIO() anhand der übergebenen Parameter, ob die angegebenen Pins auf Eingang oder Ausgang gesetzt werden. Und deswegen kommt man auch nur mit dieser einen GPIO()-Funktion aus, um beliebige Protokolle abzubilden, wie sie in den Datenblättern irgendwelcher ICs angedeutet werden.

    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.

  • Hofei das sieht doch gut aus

    Note that you can read the current state of a channel set up as an output using the input() function. For example to toggle an output:

    Code
    GPIO.output(12, not GPIO.input(12))

    Jedoch verstehe ich es nicht! wie kann ich denn den Status über print ausgeben lassen?

  • :@:wallbash:

    IMHO sollte hier demnächst zugemacht werden. Der TE ignoriert alle Ratschläge und will etwas völlig sinnfreies erreichen: einen GPIO toggeln und testen, ob er auch wirklich getoggelt wurde.

    Was scheinbar schwer zu verstehen ist: könnte man nicht darauf vertrauen, dass auch wirklich getoggelt wurde, sollte kein Fehler aufgetreten sein, könnte man auch nicht darauf vertrauen, dass er korrekt ausliest.

    Um das hier hoffentlich abzuschließen: du kannst problemlos annehmen, dass ein fehlerfrei auf HIGH gesetzter GPIO auch auf HIGH gesetzt wurde, wenn nicht, hast du deinen Pi geschrottet oder eine Lib in der pre pre alpha Version verwendet.

  • Hallo tutter,

    wenn Du einen GPIO-Pin dazu bringst,. dass dort ein HIGH-Pegel anliegt, dann kannst Du dort 3,3 V messen.

    Was meinst Du, welches Ereignis sollte sich da zutragen, dass diese Spannung plötzlich nicht mehr anliegen sollte? Was gleichbedeutend damit ist, dass die Spannung auf unter 1,3 V (also 2 V weniger) abgefallen ist?

    Analoges gilt für LOW-Pegel, also 0 V. Wenn das plötzlich nicht mehr LOW wäre, also auf mehr als 0,8 V ansteigen sollte, hey! Dann hättest Du eine Energiequelle geschaffen!

    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 (24. November 2017 um 21:23)

  • Natürlich sollte in einem Script bekannt sein ob ein GPIO auf HIGH oder LOW geschaltet wurde - man kann das aber auch abfragen. Das ist keine Hexerei oder so... Keine Ahnung was die Grundsatzdiskussion schon wieder soll. :wallbash:


    GPIO.input(12) macht genau das was du quasi möchtest: Es fragt 12 ab und gibt den aktuellen Schaltstatus aus.

    Beispiel:

  • Hallo linusg,

    Was scheinbar schwer zu verstehen ist: könnte man nicht darauf vertrauen, dass auch wirklich getoggelt wurde, sollte kein Fehler aufgetreten sein, könnte man auch nicht darauf vertrauen, dass er korrekt ausliest.

    Da kenne ich sogar Codes, die genau das machen. Der Code ist definitiv abgearbeitet. Aber das, was der Code machen sollte, passiert erst noch. Auch schwer zu verstehen.

    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.

  • meigrafd genau das habe ich gesucht! vielen vielen danke!

    Noch kurz zu linusg, natürlich nehme ich hier jeden Post ernst und versuche darauf zu reagieren. Ich schreibe bewußt versuche!, da ich manches manchmal nicht verstehe. Ich versuche doch stets die Ratschläge in meiner Reise der WIssensbereicherung einfließen zu lassen.

  • weiter geht's!

    ich habe nun in in visudo dem Benutzer www-data folgende Rechte gegeben:

    Code
    www-data ALL=(ALL) NOPASSWD: /usr/bin/python /home/pi/Desktop/gpio/relayschaltung.py * *

    So viel ich weiß zeigen die 2 Sterne in der Python-Datei an das ich zwei Parameter übergeben will.

    Dazu habe ich noch die test.php geschrieben die wie folgt aussieht:

    Die Python Datei relayschaltung.pi wird mit den Parametern aufgerufen. Somit rufe ich in einer Konsole stets wie folgt auf

    Code
    sudo python relayschaltung.py 2 1

    Jedoch wird bei Aufruf der Webseite kein Aktion am Py ausgeführt. Rufe ich das ganze über die Konsole auf dann klappt es.

    Hat jemand eine Idee warum das ganze nicht geht? Was mach ich falsch?

Jetzt mitmachen!

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