Add initial project files and implement LED control via UART commands

This commit is contained in:
rxf
2025-07-31 17:00:59 +02:00
commit 670eafefa2
7 changed files with 189 additions and 0 deletions

3
.micropico Normal file
View File

@@ -0,0 +1,3 @@
{
"info": "This file is just used to identify a project folder."
}

8
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,8 @@
{
"recommendations": [
"ms-python.python",
"visualstudioexptteam.vscodeintellicode",
"ms-python.vscode-pylance",
"paulober.pico-w-go"
]
}

15
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,15 @@
{
"python.languageServer": "Pylance",
"python.analysis.typeCheckingMode": "basic",
"python.analysis.diagnosticSeverityOverrides": {
"reportMissingModuleSource": "none"
},
"python.terminal.activateEnvironment": false,
"micropico.openOnStart": true,
"python.analysis.typeshedPaths": [
"~/.micropico-stubs/included"
],
"python.analysis.extraPaths": [
"~/.micropico-stubs/included"
]
}

9
blink.py Normal file
View File

@@ -0,0 +1,9 @@
from machine import Pin
from time import sleep
led = Pin('LED', Pin.OUT)
print('Blinking LED Example')
while True:
led.value(not led.value())
sleep(0.5)

29
myws2812.py Normal file
View File

@@ -0,0 +1,29 @@
# Bibliotheken laden
from machine import Pin
from neopixel import NeoPixel
from time import sleep_ms
# GPIO-Pin für WS2812
pin_np = 28
# Anzahl der LEDs
leds = 3
# Helligkeit: 0 bis 255
brightness = 128
# Geschwindigkeit (Millisekunden)
speed = 200
# Initialisierung WS2812/NeoPixel
np = NeoPixel(Pin(pin_np, Pin.OUT), leds)
# Wiederholung (Endlos-Schleife)
while True:
for i in range (leds):
# Nächste LED einschalten
np[i] = (brightness, brightness, 0)
np.write()
sleep_ms(speed)
# LED zurücksetzen
np[i] = (0, 0, 0)

16
uart.py Normal file
View File

@@ -0,0 +1,16 @@
import machine
import utime
uart = machine.UART(1)
uart.write("hello") # Send "hello" over UART
utime.sleep(0.5)
while True:
if uart.any():
line = uart.readline()
print(line)

109
usrttst.py Normal file
View File

@@ -0,0 +1,109 @@
import machine
import time
uart = machine.UART(1)
led = machine.Pin(25, machine.Pin.OUT)
running = True
last_cmd_time = time.ticks_ms()
# Beispiel-Parameterwerte
breite_wert = 0
strom_wert = 0.0
# Funktionstabelle (Name → Funktionsobjekt)
def handle_led_on(args):
led.value(1)
uart.write("LED ist jetzt AN\r\n")
def handle_led_off(args):
led.value(0)
uart.write("LED ist jetzt AUS\r\n")
def handle_status(args):
status = "AN" if led.value() else "AUS"
uart.write(f"LED-Status: {status}\r\n")
uart.write(f"Breite: {breite_wert}, Strom: {strom_wert}\r\n")
def handle_go(args):
global running
uart.write(">> Kommando 'go' empfangen starte Hauptprogramm.\r\n")
running = False
def handle_pause(args):
try:
sek = float(args[0])
uart.write(f"Pausiere {sek} Sekunden...\r\n")
time.sleep(sek)
except (IndexError, ValueError):
uart.write("Fehler: 'pause' erwartet eine Zahl\r\n")
def handle_breite(args):
global breite_wert
try:
breite_wert = int(args[0])
uart.write(f"Breite gesetzt auf {breite_wert}\r\n")
except (IndexError, ValueError):
uart.write("Fehler: 'breite' erwartet eine Ganzzahl\r\n")
def handle_strom(args):
global strom_wert
try:
strom_wert = float(args[0])
uart.write(f"Strom gesetzt auf {strom_wert} A\r\n")
except (IndexError, ValueError):
uart.write("Fehler: 'strom' erwartet eine Zahl\r\n")
# Funktionstabelle (Befehl → Handlerfunktion)
command_table = {
"led_on": handle_led_on,
"led_off": handle_led_off,
"status": handle_status,
"go": handle_go,
"pause": handle_pause,
"breite": handle_breite,
"strom": handle_strom
}
# Allgemeine Eingabe-Verarbeitung
buffer = ""
def process_input():
global buffer, last_cmd_time
while uart.any():
char = uart.read(1)
if char:
c = char.decode('utf-8')
if c in ('\n', '\r'):
cmdline = buffer.strip()
if cmdline:
last_cmd_time = time.ticks_ms()
parts = cmdline.split()
cmd = parts[0]
args = parts[1:]
handler = command_table.get(cmd)
if handler:
handler(args)
else:
uart.write(f"Unbekanntes Kommando: {cmd}\r\n")
buffer = ""
else:
buffer += c
# Eingabeschleife mit Timeout
uart.write("Bereit für Kommandos (led_on, pause 1.5, go, ...)\r\n")
while running:
process_input()
if time.ticks_diff(time.ticks_ms(), last_cmd_time) > 10000:
uart.write(">> Timeout starte Hauptprogramm.\r\n")
break
time.sleep(0.05)
# Hauptprogramm
uart.write(">> Hauptprogramm gestartet\r\n")
while True:
led.toggle()
time.sleep(0.5)