diff --git a/gpio-rpi5/.gitignore b/gpio-rpi5/.gitignore new file mode 100644 index 0000000..63ebb7a --- /dev/null +++ b/gpio-rpi5/.gitignore @@ -0,0 +1,3 @@ +./__pycache__ +./network/__pycache__/* +main.py diff --git a/gpio-rpi5/.python-version b/gpio-rpi5/.python-version new file mode 100644 index 0000000..2c07333 --- /dev/null +++ b/gpio-rpi5/.python-version @@ -0,0 +1 @@ +3.11 diff --git a/gpio-rpi5/README.md b/gpio-rpi5/README.md new file mode 100644 index 0000000..e69de29 diff --git a/gpio-rpi5/button.py b/gpio-rpi5/button.py new file mode 100755 index 0000000..22362cf --- /dev/null +++ b/gpio-rpi5/button.py @@ -0,0 +1,33 @@ +#! /usr/bin/python3 +import lgpio +from time import sleep +import logging + + +__PIN__ = 23 # 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__': + h = lgpio.gpiochip_open(0) + lgpio.gpio_claim_input(h, __PIN__) + + 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 + else: + logging.debug('Button nicht gedrückt.') + pressed = False + + sleep(__WAIT__) + except KeyboardInterrupt: + logging.debug('Abbruch durch Benutzer.') + finally: + pass + diff --git a/gpio-rpi5/led.py b/gpio-rpi5/led.py new file mode 100755 index 0000000..631013d --- /dev/null +++ b/gpio-rpi5/led.py @@ -0,0 +1,48 @@ +#! /usr/bin/python3 + +import lgpio +from time import sleep + +__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) + +# Pin als Output setzen +lgpio.gpio_claim_output(h, __PIN__, 0) + +#Zustand der LED setzen +def setLED(state): + lgpio.gpio_write(h, __PIN__, state) + + +# Dauerschleife, die die LED im Wechsel ein- und ausschaltet. +# Wird gestoppt mit CTRL-C +def blinkloop(): + try: + while True: + +# Pin auf HIGH setzen schaltet die LED ein + setLED(1) + print('LED ein') + + sleep(__WAIT__) + +# Pin auf LOW setzen schaltet die LED aus + setLED(0) + print('LED aus') + sleep(__WAIT__) + except KeyboardInterrupt: + pass + finally: + # Zum schluss immer die LED ausschalten. + setLED(0) + +if __name__ =='__main__': + blinkloop() + lgpio.gpiochip_close(h) # Handle schließen + + + + diff --git a/gpio-rpi5/ledserver.py b/gpio-rpi5/ledserver.py new file mode 100755 index 0000000..27b8e2b --- /dev/null +++ b/gpio-rpi5/ledserver.py @@ -0,0 +1,69 @@ +#! /usr/bin/python3 +from http.server import SimpleHTTPRequestHandler +import socketserver +import logging +from led import setLED + +responsehtml = '

LED-Server

LED ist $ledstate_str

' +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') + 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() + +#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) + + logging.debug(f'ledstate={self.ledstate}') + + response = responsehtml.replace('$ledstate_str',('aus','an')[self.ledstate]) + + self.wfile.write(response.encode()) + + + +class http_server: + def __init__(self): + def handler(*args): + myHandler(*args) + server = HTTPServer(('', 8080), handler) + + +if __name__ == '__main__': + logging.debug('MAIN: start') + setLED(False) # Beim Start LED ausschalten +#Request-Handler aufbauen + handler = LEDHttpRequestHandler + 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) + + diff --git a/gpio-rpi5/main.py b/gpio-rpi5/main.py new file mode 100644 index 0000000..34d8366 --- /dev/null +++ b/gpio-rpi5/main.py @@ -0,0 +1,6 @@ +def main(): + print("Hello from gpio-rpi5!") + + +if __name__ == "__main__": + main() diff --git a/gpio-rpi5/network/__init__.py b/gpio-rpi5/network/__init__.py new file mode 100644 index 0000000..55552da --- /dev/null +++ b/gpio-rpi5/network/__init__.py @@ -0,0 +1,3 @@ +from .const import __ADDRESSLOCAL__ +#from .const import __ADDRESSREMOTE__ + diff --git a/gpio-rpi5/network/code.py b/gpio-rpi5/network/code.py new file mode 100644 index 0000000..2264e1a --- /dev/null +++ b/gpio-rpi5/network/code.py @@ -0,0 +1,10 @@ +def receive(conn): + msg = conn.recv(64).decode('utf-8') + + return msg + +def send(client, msg): + message = msg.encode('utf-8') + client.send(message) + + diff --git a/gpio-rpi5/network/const.py b/gpio-rpi5/network/const.py new file mode 100644 index 0000000..b3a410c --- /dev/null +++ b/gpio-rpi5/network/const.py @@ -0,0 +1,19 @@ +#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__) diff --git a/gpio-rpi5/pyproject.toml b/gpio-rpi5/pyproject.toml new file mode 100644 index 0000000..507fc68 --- /dev/null +++ b/gpio-rpi5/pyproject.toml @@ -0,0 +1,9 @@ +[project] +name = "gpio-rpi5" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.11" +dependencies = [ + "lgpio>=0.2.2.0", +] diff --git a/gpio-rpi5/uv.lock b/gpio-rpi5/uv.lock new file mode 100644 index 0000000..3e327c3 --- /dev/null +++ b/gpio-rpi5/uv.lock @@ -0,0 +1,28 @@ +version = 1 +revision = 2 +requires-python = ">=3.11" + +[[package]] +name = "gpio-rpi5" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "lgpio" }, +] + +[package.metadata] +requires-dist = [{ name = "lgpio", specifier = ">=0.2.2.0" }] + +[[package]] +name = "lgpio" +version = "0.2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/33/26ec2e8049eaa2f077bf23a12dc61ca559fbfa7bea0516bf263d657ae275/lgpio-0.2.2.0.tar.gz", hash = "sha256:11372e653b200f76a0b3ef8a23a0735c85ec678a9f8550b9893151ed0f863fff", size = 90087, upload-time = "2024-03-29T21:59:55.901Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/4e/5721ae44b29e4fe9175f68c881694e3713066590739a7c87f8cee2835c25/lgpio-0.2.2.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:5b3c403e1fba9c17d178f1bde102726c548fc5c4fc1ccf5ec3e18f3c08e07e04", size = 382992, upload-time = "2024-03-29T22:00:45.039Z" }, + { url = "https://files.pythonhosted.org/packages/88/53/e57a22fe815fc68d0991655c1105b8ed872a68491d32e4e0e7d10ffb5c4d/lgpio-0.2.2.0-cp311-cp311-manylinux_2_34_aarch64.whl", hash = "sha256:a2f71fb95b149d8ac82c7c6bae70f054f6dc42a006ad35c90c7d8e54921fbcf4", size = 364848, upload-time = "2024-04-01T22:49:45.889Z" }, + { url = "https://files.pythonhosted.org/packages/a4/71/11f4e3d76400e4ca43f9f9b014f5a86d9a265340c0bea45cce037277eb34/lgpio-0.2.2.0-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:e9f4f3915abe5ae0ffdb4b96f485076d80a663876d839e2d3fd9218a71b9873e", size = 370183, upload-time = "2024-04-13T14:08:14.139Z" }, + { url = "https://files.pythonhosted.org/packages/fe/73/e56c9afb845df53492d42bdea01df9895272bccfdd5128f34719c3a07990/lgpio-0.2.2.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:6c65ac42e878764d04a71ed12fe6d46089b36e9e8127722bf29bb2e4bc91de22", size = 383956, upload-time = "2024-03-29T22:00:47.315Z" }, + { url = "https://files.pythonhosted.org/packages/3b/1c/becd00f66d2c65feed9a668ff9d91732394cb6baba7bec505d55de0e30c9/lgpio-0.2.2.0-cp312-cp312-manylinux_2_34_aarch64.whl", hash = "sha256:d907db79292c721c605af08187385ddb3b7af09907e1ffca56cf0cd6558ace0a", size = 366058, upload-time = "2024-04-01T22:49:47.615Z" }, + { url = "https://files.pythonhosted.org/packages/4c/7a/e3b4e5225c9792c4092b2cc07504746acbe62d0a8e4cb023bdf65f6430cf/lgpio-0.2.2.0-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:2aadff092f642fcdada8457c158f87259dfda3a89ec19bae0b99ff22b34aac4b", size = 372103, upload-time = "2024-04-13T14:08:16.351Z" }, +] diff --git a/teil13/fib.py b/teil13/fib.py index 41e2527..529ad07 100644 --- a/teil13/fib.py +++ b/teil13/fib.py @@ -5,10 +5,8 @@ import sys def fib(n): # Rekursionsbedingung - if n == 0: - return 0 - elif n == 1: - return 1 + if n in [0,1]: + return n else: # Rekursionsaufruf return fib(n-1) + fib(n-2)