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.
Zeichkette in Variable übergeben
-
tutter -
23. November 2017 um 14:41 -
Erledigt
L
I
V
E
Stammtisch ab 20:30 Uhr im Chat
-
-
Zeichkette in Variable übergeben? Schau mal ob du hier fündig wirst!
-
Kanns mit jemand erklären ich verstehs einfach nicht
-
-
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?
Oder?
Oder nicht?
Nein!
Doch!
Oh!
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
-
Wo suchst du denn? In der offiziellen Moduldokumentation ist folgendes zu finden:
-
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.
schaltet einen GPIO-Pin p auf Ausgang und setzt den Wert v.
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
-
- Offizieller Beitrag
-
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:
Jedoch verstehe ich es nicht! wie kann ich denn den Status über print ausgeben lassen?
-
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
-
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.
GPIO.input(12) macht genau das was du quasi möchtest: Es fragt 12 ab und gibt den aktuellen Schaltstatus aus.
Beispiel:
Python
Alles anzeigen#!/usr/bin/python2 import time from RPi import GPIO PIN = 4 GPIO.setmode(GPIO.BCM) GPIO.setup(PIN, GPIO.OUT) def switch_state(): while True: # get current state current_state = GPIO.input(PIN) # switch state GPIO.output(PIN, not current_state) print 'switched GPIOpin {} from {} to {}' . format(PIN, current_state, (not current_state)) time.sleep(1) try: switch_state() except (KeyboardInterrupt, SystemExit): print 'Quit' GPIO.cleanup()
-
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
-
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.
-
-
Hallo,
du hast doch immer noch`GPIO.cleanup()` am Ende des Skripts, richtig?
Wenn ja kannst du dir die Frage eigentlich ganz einfach selber beantworten...
Gruß, noisefloor
-
Sorry es war nicht mein GPIO.cleanup() aber ich habe ja in einen alten Testversuch noch den Port auf In umgestellt! Damit ändert sich natürlich der Zustand des GPIO Ports!
Wieder was gelernt!
Danke dir
-
weiter geht's!
ich habe nun in in visudo dem Benutzer www-data folgende Rechte gegeben:
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:
PHP
Alles anzeigen<?php exec('python "/home/pi/Desktop/gpio/relayschaltung.py 2 1"', $output, $return_var); echo $test; // PYTHON OUTPUT echo "return value is: $return_var" . "\n"; echo "was ist Output: $output" . "\n"; echo "<br>"; var_dump($output); echo "<br>"."forschleife"; foreach ($output as $line) { echo $line."\n"; } ?>
Die Python Datei relayschaltung.pi wird mit den Parametern aufgerufen. Somit rufe ich in einer Konsole stets wie folgt auf
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?
-
Hallo,
mach' den Server-Teil auch via Python. Ist wesentlich einfacher und vor allem wesentlich einfacher zu debuggen.
Gruß, noisefloor -
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!