Raspberry Pi IO-Erweiterung (IO Pi Plus)

z.B. WebServer, Docker, VirtualBox, VMware, Azure, etc.
Antworten
Benutzeravatar
asp
Site Admin
Beiträge: 64
Registriert: 22 Feb 2025, 19:44
Wohnort: Lohn-Ammannsegg
Kontaktdaten:

Raspberry Pi IO-Erweiterung (IO Pi Plus)

Beitrag von asp »

Das Erweiterungsboard kann einfach auf den Raspberry Pi gesteckt werden, max 4St.
IO-Pi-Plus-kl.png
IO-Pi-Plus-kl.png (85.4 KiB) 7043 mal betrachtet
und hat 32 Ein/Ausgänge.
Die Erweiterung funktioniert auch am RPi Nano, RP2040 oder ESP32
IO-Pi-Plus-Pin.png
IO-Pi-Plus-Pin.png (80.72 KiB) 7021 mal betrachtet
pi-giop2l.png
pi-giop2l.png (115.77 KiB) 1707 mal betrachtet
Benötigte Verbindungen
  • SDA I²C Datenleitung
  • SCL I²C Taktleitung
  • 3V3 Versorgungsspannung
  • GND Masse
  • 5V
IO pi Plus hat folgende Steckerbelegungen
40pol-RPi-Stecker.jpg
40pol-RPi-Stecker.jpg (47.44 KiB) 7034 mal betrachtet
IO-Expansion-Bus-1.jpg
IO-Expansion-Bus-1.jpg (99.42 KiB) 7034 mal betrachtet
IO-Expansion-Bus-2.jpg
IO-Expansion-Bus-2.jpg (99.46 KiB) 7034 mal betrachtet
Mein Messaufbau
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)
RP2040-mit-IO-Pi-Plus.png
RP2040-mit-IO-Pi-Plus.png (191.79 KiB) 6897 mal betrachtet
Erste Testprogramme schreiben
  • 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()
Testprogramm als main.py auf RP2040 gespeichert

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

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 Fehler
Main-Programm auf RP2040 löschen und ein Setup-Programm laden

setup-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))") 
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)

Code: Alles auswählen

>>> io.write_pin(17, 1)

Code: Alles auswählen

>>> led.duty_u16(int(ON / 255 * 65535))
Antworten