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: | ||||
|           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) | ||||
|  | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user