diff --git a/gpio-rpi5/.gitignore b/gpio-rpi5/.gitignore index 63ebb7a..9fa61b6 100644 --- a/gpio-rpi5/.gitignore +++ b/gpio-rpi5/.gitignore @@ -1,3 +1,3 @@ -./__pycache__ +__pycache__ ./network/__pycache__/* main.py diff --git a/gpio-rpi5/button.py b/gpio-rpi5/button.py index 22362cf..37b2496 100755 --- a/gpio-rpi5/button.py +++ b/gpio-rpi5/button.py @@ -1,3 +1,4 @@ +# button.py mit lgpio für den Raspberry Pi 5 #! /usr/bin/python3 import lgpio from time import sleep @@ -9,25 +10,26 @@ __WAIT__ = 0.5 # Warten für 0,5 Sekunden logging.basicConfig( format='%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG) if __name__ =='__main__': - h = lgpio.gpiochip_open(0) - lgpio.gpio_claim_input(h, __PIN__) + handle = lgpio.gpiochip_open(0) + lgpio.gpio_claim_input(handle, __PIN__,lgpio.SET_PULL_UP) # Pin ist Input mit PullUp pressed = False logging.debug('Start der Schleife.') try: while True: - pressed = lgpio.gpio_read(h, __PIN__) != 0 - if not pressed: - logging.info('Button wurde gedrückt.') - pressed = True + value = lgpio.gpio_read(handle, __PIN__) + + pressed = value != 1 + if pressed: + logging.info(f'Button wurde gedrückt {value}->{pressed}.') else: - logging.debug('Button nicht gedrückt.') - pressed = False + logging.debug(f'Button nicht gedrückt {value}->{pressed}.') sleep(__WAIT__) except KeyboardInterrupt: logging.debug('Abbruch durch Benutzer.') finally: - pass + logging.debug('handle wird geschlossen.') + lgpio.gpiochip_close(handle) # Handle schließen diff --git a/gpio-rpi5/led.py b/gpio-rpi5/led.py index 631013d..9cd4f85 100755 --- a/gpio-rpi5/led.py +++ b/gpio-rpi5/led.py @@ -1,3 +1,4 @@ +# led.py mit lgpio für den Raspberry Pi 5 #! /usr/bin/python3 import lgpio @@ -7,14 +8,14 @@ __PIN__ = 17 # GPIO Pin, den wir nutzen (BCM Nummerierung) __WAIT__ = 0.5 # Warten für 0,5 Sekunden # Handle auf den GPIO-Chip (meist 0 für /dev/gpiochip0) -h = lgpio.gpiochip_open(0) +handle = lgpio.gpiochip_open(0) # Pin als Output setzen -lgpio.gpio_claim_output(h, __PIN__, 0) +lgpio.gpio_claim_output(handle, __PIN__, 0) #Zustand der LED setzen def setLED(state): - lgpio.gpio_write(h, __PIN__, state) + lgpio.gpio_write(handle, __PIN__, state) # Dauerschleife, die die LED im Wechsel ein- und ausschaltet. @@ -41,7 +42,7 @@ def blinkloop(): if __name__ =='__main__': blinkloop() - lgpio.gpiochip_close(h) # Handle schließen + lgpio.gpiochip_close(handle) # Handle schließen diff --git a/gpio-rpi5/ledserver.py b/gpio-rpi5/ledserver.py index 27b8e2b..5a8a617 100755 --- a/gpio-rpi5/ledserver.py +++ b/gpio-rpi5/ledserver.py @@ -1,38 +1,54 @@ +# ledserver.py mit lgpio für den Raspberry Pi 5 #! /usr/bin/python3 +from time import sleep + +__PIN__ = 17 # GPIO Pin, den wir nutzen (BCM Nummerierung) +__WAIT__ = 0.5 # Warten für 0,5 Sekunden + from http.server import SimpleHTTPRequestHandler import socketserver +import lgpio import logging -from led import setLED + +# Handle auf den GPIO-Chip (meist 0 für /dev/gpiochip0) +handle = lgpio.gpiochip_open(0) + +# Pin als Output setzen +lgpio.gpio_claim_output(handle, __PIN__, 0) responsehtml = '

LED-Server

LED ist $ledstate_str

' logging.basicConfig( format='%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG) # Da http ein stateless Protokoll ist, wird der Handler bei jedem Request neu +def setLED(state): + lgpio.gpio_write(handle, __PIN__, state) + # aufgebaut! Deswegen benutzen wir hier setup() statt __init__() class LEDHttpRequestHandler(SimpleHTTPRequestHandler): - def setup(self): - logging.debug('setting up Handler') - self.ledstate = False - super().setup() + def setup(self): + logging.debug('setting up Handler') + self.ledstate = False + super().setup() - def do_GET(self): - logging.debug(f'path= {self.path}') - logging.debug('GET: empfangen') - self.send_response(200) - self.send_header('Content-Type:','text/html') + + def do_GET(self): + logging.debug(f'path= {self.path}') + logging.debug('GET: empfangen') + self.send_response(200) + self.send_header('Content-Type:','text/html') # Ende der Header markieren, dass ist wichtig, sonst kommt der Response nicht zurück! - self.end_headers() + self.end_headers() #Wenn im Requestpath 'led='on'enthalten ist, schalten wir die LED ein. Bei off aus - if '?led=' in self.path: - if 'on' in self.path: - logging.debug('schalte LED ein') - self.ledstate = True - setLED(self.ledstate) - elif 'off' in self.path: - logging.debug('schalte LED aus') - self.ledstate = False - setLED(self.ledstate) + if '?led=' in self.path: + if 'on' in self.path: + logging.debug('schalte LED ein') + self.ledstate = True + setLED(self.ledstate) + elif 'off' in self.path: + logging.debug('schalte LED aus') + self.ledstate = False + setLED(self.ledstate) logging.debug(f'ledstate={self.ledstate}') @@ -65,5 +81,6 @@ if __name__ == '__main__': pass finally: setLED(False) + lgpio.gpiochip_close(handle) # Handle schließen diff --git a/gpio-rpi5/network/__init__.py b/gpio-rpi5/network/__init__.py deleted file mode 100644 index 55552da..0000000 --- a/gpio-rpi5/network/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .const import __ADDRESSLOCAL__ -#from .const import __ADDRESSREMOTE__ - diff --git a/gpio-rpi5/network/code.py b/gpio-rpi5/network/code.py deleted file mode 100644 index 2264e1a..0000000 --- a/gpio-rpi5/network/code.py +++ /dev/null @@ -1,10 +0,0 @@ -def receive(conn): - msg = conn.recv(64).decode('utf-8') - - return msg - -def send(client, msg): - message = msg.encode('utf-8') - client.send(message) - - diff --git a/gpio-rpi5/network/const.py b/gpio-rpi5/network/const.py deleted file mode 100644 index b3a410c..0000000 --- a/gpio-rpi5/network/const.py +++ /dev/null @@ -1,19 +0,0 @@ -#network/const.py - -import socket - -# TCP Port -__PORT__ = 6554 - -#Server-IP -# für den Server (immer localhost) -__SERVERLOCAL__ = socket.gethostbyname(socket.gethostname()) - -#für Server auf einem Remote-Pi -#__SERVERREMOTE__ = socket.gethostbyname('gabbo') - -# Server-Adresse (IP,Port) -#lokal -__ADDRESSLOCAL__ = (__SERVERLOCAL__,__PORT__) -#remote -#__ADDRESSREMOTE__ = (__SERVERREMOTE__,__PORT__)