Browse Source

Anpassungen an lgpio

master
Olli Graf 2 days ago
parent
commit
e5e476adde
  1. 3
      gpio-rpi5/.gitignore
  2. 1
      gpio-rpi5/.python-version
  3. 0
      gpio-rpi5/README.md
  4. 33
      gpio-rpi5/button.py
  5. 48
      gpio-rpi5/led.py
  6. 69
      gpio-rpi5/ledserver.py
  7. 6
      gpio-rpi5/main.py
  8. 3
      gpio-rpi5/network/__init__.py
  9. 10
      gpio-rpi5/network/code.py
  10. 19
      gpio-rpi5/network/const.py
  11. 9
      gpio-rpi5/pyproject.toml
  12. 28
      gpio-rpi5/uv.lock
  13. 6
      teil13/fib.py

3
gpio-rpi5/.gitignore

@ -0,0 +1,3 @@
./__pycache__
./network/__pycache__/*
main.py

1
gpio-rpi5/.python-version

@ -0,0 +1 @@
3.11

0
gpio-rpi5/README.md

33
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

48
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

69
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 = '<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')
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)

6
gpio-rpi5/main.py

@ -0,0 +1,6 @@
def main():
print("Hello from gpio-rpi5!")
if __name__ == "__main__":
main()

3
gpio-rpi5/network/__init__.py

@ -0,0 +1,3 @@
from .const import __ADDRESSLOCAL__
#from .const import __ADDRESSREMOTE__

10
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)

19
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__)

9
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",
]

28
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" },
]

6
teil13/fib.py

@ -5,10 +5,8 @@ import sys
def fib(n): def fib(n):
# Rekursionsbedingung # Rekursionsbedingung
if n == 0: if n in [0,1]:
return 0 return n
elif n == 1:
return 1
else: else:
# Rekursionsaufruf # Rekursionsaufruf
return fib(n-1) + fib(n-2) return fib(n-1) + fib(n-2)

Loading…
Cancel
Save