Verzeiht mir dass ich wieder Hilfe suche, weil ich Code schreibe von dem ich zuwenig Ahnung habe.
Um Gpio´s von einem Orangepi Zero auszulessen nutze ich die Bibliothek OPi.GPIO, funktioniert soweit ganz gut.
Ich erfasse die steigende flanke , mit "Threaded Callbacks", zweier Eingänge, der erste wird von einem Bewegungsmelder Betätigt der zweite von einem Reedkontakt.
Mein Problem bei Programm start ist der Reedkontakt schon auf High und die steigende flanke wird nur erfasst wenn der zustand einmal "Low" ist.
Da das irgendwann passieren kann , habe ich bis dahin eine Falsche Ausgabe und ich finde einfach kein Workaround das Funktioniert.
Ich habs mit einem Thread probiert aber dann funktioniert mein main nicht richtig.
hier mal der Code gekürzt auf das wesentliche:
Code: Alles auswählen
#!/usr/bin/env python3
import socket
import os
import datetime
from time import sleep
import OPi.GPIO as GPIO
import threading
BUFFER_SIZE = 8192
SERVER = ("", 8008)
TARGET_HOST = ("10.10.10.4", 8007)
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(SERVER)
GPIO.cleanup()
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(10, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
def eingang_1(channel):
while( GPIO.input(8) == 1):
GPIO.output(23, True)
sleep(2)
udp_socket.sendto(b"eingang_1", TARGET_HOST)
else:
GPIO.output(23, False)
def eingang_2(channel):
while( GPIO.input(10) == 1):
udp_socket.sendto(b"eingang_2", TARGET_HOST)
sleep(2)
GPIO.add_event_detect(8, GPIO.RISING)
GPIO.add_event_callback(8, callback=eingang_1, bouncetime=50)
GPIO.add_event_detect(10, GPIO.RISING)
GPIO.add_event_callback(10, callback=eingang_2, bouncetime=50)
def main():
eingang2_startup = threading.Thread(target=eingang_2(10))
eingang2_startup.start()
print("UDPServer Waiting for client on port", SERVER)
while True:
data, addr = udp_socket.recvfrom(BUFFER_SIZE)
print(data)
try:
options[data](udp_socket, TARGET_HOST)
except KeyError:
print("KeyError")
print(data)
udp_socket.sendto(b"KeyError",TARGET_HOST)
if __name__ == '__main__':
main()
Mein Versuch war einen Thread zu starten der die Funktion eingang_2 einmal ausführt.
die Funktion wird richtig ausgeführt, mein Programm stoppt aber bei den Thread und ich komm nicht weiter.
Code: Alles auswählen
print("UDPServer Waiting for client on port", SERVER)
wie könnte ich das lösen, bzw was mache ich falsch?
grüsse Gerhard