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
|
import logging
|
||||||
from led import setLED
|
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)
|
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):
|
class LEDHttpRequestHandler(SimpleHTTPRequestHandler):
|
||||||
|
def setup(self):
|
||||||
|
logging.debug('setting up Handler')
|
||||||
|
self.ledstate = False
|
||||||
|
super().setup()
|
||||||
|
|
||||||
def do_GET(self):
|
def do_GET(self):
|
||||||
logging.debug(f'path= {self.path}')
|
logging.debug(f'path= {self.path}')
|
||||||
logging.debug('GET: empfangen')
|
logging.debug('GET: empfangen')
|
||||||
logging.debug(f'Request: {self.request}')
|
|
||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
self.send_header('Content-Type:','text/html')
|
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
|
||||||
logging.debug('schalte LED ein')
|
if '?led=' in self.path:
|
||||||
setLED(True)
|
if 'on' in self.path:
|
||||||
else:
|
logging.debug('schalte LED ein')
|
||||||
logging.debug('schalte LED aus')
|
self.ledstate = True
|
||||||
setLED(False)
|
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__':
|
if __name__ == '__main__':
|
||||||
logging.debug('MAIN: start')
|
logging.debug('MAIN: start')
|
||||||
|
setLED(False) # Beim Start LED ausschalten
|
||||||
|
#Request-Handler aufbauen
|
||||||
handler = LEDHttpRequestHandler
|
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')
|
logging.info('SERVER: start')
|
||||||
try:
|
try:
|
||||||
|
#Server läuft bis CTRL-C gedrückt wird.
|
||||||
httpd.serve_forever()
|
httpd.serve_forever()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
pass
|
pass
|
||||||
|
finally:
|
||||||
|
setLED(False)
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user