Browse Source

Taster lesen.

develop
Olli Graf 1 year ago
parent
commit
c76aa08c83
  1. 37
      gpio/button.py
  2. 43
      gpio/ledserver.py

37
gpio/button.py

@ -0,0 +1,37 @@
#! /usr/bin/python3
import RPi.GPIO as GPIO
from time import sleep
import logging
__PIN__ = 16 # GPIO Pin, für den Taster
__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__':
GPIO.setwarnings(False)
# benutze Broadcom Pin Nummerierung
GPIO.setmode(GPIO.BCM)
# Pin 16 als Input mit Pull-Up-Widerstand schalten.
logging.debug(f'konfiguriere Pin ${__PIN__} als Input.')
GPIO.setup(__PIN__, GPIO.IN, pull_up_down=GPIO.PUD_UP)
pressed = False
logging.debug('Start der Schleife.')
try:
while True:
if not GPIO.input(__PIN__):
if not pressed:
logging.info('Button wurde gedrückt.')
pressed = True
else:
logging.debug('Button nicht gedrückt.')
pressed = False
sleep(__WAIT__)
except KeyboardInterrupt:
logging.debug('Abbruch durch Benutzer.')
finally:
pass

43
gpio/ledserver.py

@ -4,25 +4,41 @@ import socketserver
import logging
from led import setLED
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
# 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 do_GET(self):
logging.debug(f'path= {self.path}')
logging.debug('GET: empfangen')
logging.debug(f'Request: {self.request}')
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()
if 'led=on' in self.path:
logging.debug('schalte LED ein')
setLED(True)
else:
logging.debug('schalte LED aus')
setLED(False)
#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)
self.wfile.write('<p>LED geschaltet</p>'.encode())
logging.debug(f'ledstate={self.ledstate}')
response = responsehtml.replace('$ledstate_str',('aus','an')[self.ledstate])
self.wfile.write(response.encode())
@ -35,12 +51,19 @@ class http_server:
if __name__ == '__main__':
logging.debug('MAIN: start')
setLED(False) # Beim Start LED ausschalten
#Request-Handler aufbauen
handler = LEDHttpRequestHandler
with socketserver.TCPServer(('',9000),handler) as httpd:
handler.ledstate = False
#Socketserver mit unserem Handler starten
with socketserver.TCPServer(('',8080),handler) as httpd:
logging.info('SERVER: start')
try:
#Server läuft bis CTRL-C gedrückt wird.
httpd.serve_forever()
except KeyboardInterrupt:
pass
finally:
setLED(False)

Loading…
Cancel
Save