13 changed files with 231 additions and 4 deletions
@ -0,0 +1,3 @@ |
|||||
|
./__pycache__ |
||||
|
./network/__pycache__/* |
||||
|
main.py |
@ -0,0 +1 @@ |
|||||
|
3.11 |
@ -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 |
||||
|
|
@ -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 |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
@ -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) |
||||
|
|
||||
|
|
@ -0,0 +1,6 @@ |
|||||
|
def main(): |
||||
|
print("Hello from gpio-rpi5!") |
||||
|
|
||||
|
|
||||
|
if __name__ == "__main__": |
||||
|
main() |
@ -0,0 +1,3 @@ |
|||||
|
from .const import __ADDRESSLOCAL__ |
||||
|
#from .const import __ADDRESSREMOTE__ |
||||
|
|
@ -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) |
||||
|
|
||||
|
|
@ -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__) |
@ -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", |
||||
|
] |
@ -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" }, |
||||
|
] |
Loading…
Reference in new issue