Taster lesen.
This commit is contained in:
37
gpio/button.py
Executable file
37
gpio/button.py
Executable file
@@ -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
|
||||
|
@@ -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:
|
||||
#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')
|
||||
setLED(True)
|
||||
else:
|
||||
self.ledstate = True
|
||||
setLED(self.ledstate)
|
||||
elif 'off' in self.path:
|
||||
logging.debug('schalte LED aus')
|
||||
setLED(False)
|
||||
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)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user