Raspberry Pi IO-Erweiterung (IO Pi Plus)
Verfasst: 16 Okt 2025, 17:43
Das Erweiterungsboard kann einfach auf den Raspberry Pi gesteckt werden, max 4St.
und hat 32 Ein/Ausgänge.
Die Erweiterung funktioniert auch am RPi Nano, RP2040 oder ESP32 Benötigte Verbindungen
Folgende 5 Leitungen habe ich zwischen RP2040-USB und IO-Pi-Plus verbunden
RP2040-USB <-> IO-Pi-Plus
--------------------------------
Testprogramm als main.py auf RP2040 gespeichert
Da ich das Programm als Main gespeichert habe, wird das Mainprogramm beim Booten automatisch geladen und der Ausgang 17 (1 auf Bus2) beginnt sofort zu Blinken.
Testprogramm erweitert, dass sowohl interne LED von RP2040 als auch externer Ausgang blinken
Main-Programm auf RP2040 löschen und ein Setup-Programm laden
setup-io.py
jetzt kann man z.B. direkt im Eingabefenster Testbefehle ausgeben nachdem man das Programm setup_io.py ausgeführt hat (lädt die Klasse und initialisiert beide Boards, rp2040 und iopiplus)
Die Erweiterung funktioniert auch am RPi Nano, RP2040 oder ESP32 Benötigte Verbindungen
- SDA I²C Datenleitung
- SCL I²C Taktleitung
- 3V3 Versorgungsspannung
- GND Masse
- 5V
Folgende 5 Leitungen habe ich zwischen RP2040-USB und IO-Pi-Plus verbunden
RP2040-USB <-> IO-Pi-Plus
--------------------------------
- SDA (1) I²C Datenleitung -> (3)
- SCL (2) I²C Taktleitung -> (5)
- 3V3 Versorgungsspannung -> (1)
- GND Masse -> (6)
- 5V -> (2)
- Thonny installiert und das IO-Pi-Plus -Board in Betrieb genommen
- Mit Hilfe von DeepSeek eine Klasse ippi_plus.py geschrieben und dies auf dem RP2040 gespeichert
- ein Erstes Testprogramm als main.py gesichert (wird beim Booten automatisch gestartet)
Code: Alles auswählen
from iopi_plus import IOPiPlusimport time
print("TESTMODUS - main.py wurde überschrieben")
io = IOPiPlus()Code: Alles auswählen
io.set_pin_direction(1, 0)
while True:
io.write_pin(17, 1)
time.sleep(0.5)
io.write_pin(17, 0)
time.sleep(0.5)Testprogramm erweitert, dass sowohl interne LED von RP2040 als auch externer Ausgang blinken
Code: Alles auswählen
from iopi_plus import IOPiPlus
from machine import Pin, PWM
import time
try:
io = IOPiPlus()
print("IO-Pi-Plus erfolgreich initialisiert")
# Warte kurz damit alles bereit ist
time.sleep(0.1)
# interne LED auf RP2040
led = PWM(Pin(22))
led.freq(1000)
HELL = 245 # ~96%
AUS = 255 # 100% (invertierte Logik)
# Pin 17 konfigurieren
io.set_pin_direction(17, 0) # Output
print("Pin 17 als Output konfiguriert")
# Sicherheitshalber erstmal ausschalten
io.write_pin(17, 0)
time.sleep(0.1)
print("Starte Blink-Programm...")
while True:
io.write_pin(17, 1)
led.duty_u16(int(HELL / 255 * 65535))
print("✓ LED AN")
time.sleep(1)
io.write_pin(17, 0)
led.duty_u16(int(AUS / 255 * 65535))
print("✗ LED AUS")
time.sleep(1)
except Exception as e:
print(f"Fehler: {e}")
# Programm läuft weiter aber ohne Fehlersetup-io.py
Code: Alles auswählen
# setup_io.py
# ------------------------------------
# Lädt die IOPiPlus-Klasse und erstellt ein Testobjekt
# für interaktive Eingabe in Thonny.
# ------------------------------------
from iopi_plus import IOPiPlus
from machine import Pin, PWM
import time
io = IOPiPlus()
print("IO-Pi-Plus erfolgreich initialisiert")
# Warte kurz damit alles bereit ist
time.sleep(0.1)
# interne LED auf RP2040
led = PWM(Pin(22))
led.freq(1000)
ON = 245 # ein / nicht so hell, 0 = sehr Hell (invertierte Logik)
OFF = 255 # aus / 255 = Aus
# Pin 17 konfigurieren
io.set_pin_direction(17, 0) # Output
print("Pin 17 als Output konfiguriert")
# Sicherheitshalber erstmal ausschalten
io.write_pin(17, 0)
led.duty_u16(int(ON / 255 * 65535))
time.sleep(0.1)
print("✅ IOPiPlus bereit – du kannst jetzt im REPL z. B. eingeben:")
print(" io.set_pin_direction(17, 0)")
print(" io.write_pin(17, 1)")
print(" io.read_pin(17)")
print(" led.duty_u16(int(ON / 255 * 65535))")
print(" led.duty_u16(int(OFF / 255 * 65535))") Code: Alles auswählen
>>> io.write_pin(17, 1)Code: Alles auswählen
>>> led.duty_u16(int(ON / 255 * 65535))