Browse Source

ledserver.py umgeschrieben.

master
Olli Graf 2 days ago
parent
commit
f4304e2459
  1. 2
      gpio-rpi5/.gitignore
  2. 20
      gpio-rpi5/button.py
  3. 9
      gpio-rpi5/led.py
  4. 57
      gpio-rpi5/ledserver.py
  5. 3
      gpio-rpi5/network/__init__.py
  6. 10
      gpio-rpi5/network/code.py
  7. 19
      gpio-rpi5/network/const.py

2
gpio-rpi5/.gitignore

@ -1,3 +1,3 @@
./__pycache__
__pycache__
./network/__pycache__/*
main.py

20
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

9
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

57
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 = '<html><body> <h3>LED-Server</h3><p> LED ist $ledstate_str</p></body></html>'
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

3
gpio-rpi5/network/__init__.py

@ -1,3 +0,0 @@
from .const import __ADDRESSLOCAL__
#from .const import __ADDRESSREMOTE__

10
gpio-rpi5/network/code.py

@ -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)

19
gpio-rpi5/network/const.py

@ -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__)
Loading…
Cancel
Save