RP2040 mit Relais-Erweiterung (MEGA-IO)
Verfasst: 09 Okt 2025, 21:06
Habe von früher noch mehrere Raspberry PI - Aufsätze mit Railais-Ausgängen (Mega-IO V3.1)
Damit dieses Board an einem RP2040 Mikrocontroller funktioniert müssen folgende Sachen beachtet werden.
1. Verbindungern vom 40-poligen Raspberry Pi - Steckers RP2040 -> Mega-IO
SDA (1) I²C Datenleitung -> (3)
SCL (2) I²C Taktleitung -> (5)
3V3 Versorgungsspannung -> (1)
GND Masse -> (6)
5V -> (2)
PS. Das Board Mega-IO kann auch mit einem externen Speisegerät 5VDC versorgt werden, es ist sogar empfohlen, wenn mehrere Relais gleichzeitig geschaltet werden, da sonst der RP2040 überlastet würde, aber Achtung, nur eine 5V-Speisung, entweder vom RP2040-Board oder extern.
2. main-Programm für Board-Ansteuerung
obiges Programm bitte mit Thonny als "main.py" auf RP2040 abspeichern
3. Jetzt kann das Board verwendet werden
exec(open('main.py').read())
io_board.set_relay(1, True) # Relais 1 EIN
io_board.set_relay(1, False) # Relais 1 AUS
io_board.all_off() # Alle Relais AUS
io_board.pulse(2, 2.5) # Relais 2 für 2.5 Sekunden einschalten
io_board.pulse(3) # Relais 3 default für 1 Sekunde einschalten
Blockdiagramm STM8L151C8: https://www.st.com/en/microcontrollers- ... 151c8.html
Pinbelegung von zweitem Stecker von Erweiterung:
1. Verbindungern vom 40-poligen Raspberry Pi - Steckers RP2040 -> Mega-IO
SDA (1) I²C Datenleitung -> (3)
SCL (2) I²C Taktleitung -> (5)
3V3 Versorgungsspannung -> (1)
GND Masse -> (6)
5V -> (2)
PS. Das Board Mega-IO kann auch mit einem externen Speisegerät 5VDC versorgt werden, es ist sogar empfohlen, wenn mehrere Relais gleichzeitig geschaltet werden, da sonst der RP2040 überlastet würde, aber Achtung, nur eine 5V-Speisung, entweder vom RP2040-Board oder extern.
2. main-Programm für Board-Ansteuerung
Code: Alles auswählen
from machine import Pin, I2C
import time
class MEGAIO_V3:
def __init__(self, i2c, address=0x31):
self.i2c = i2c
self.addr = address
self._configure()
def _configure(self):
"""Board konfigurieren"""
try:
self.i2c.writeto(self.addr, bytes([0x06, 0x00, 0x00])) # Config
self.i2c.writeto(self.addr, bytes([0x02, 0x00, 0x00])) # Polarity
time.sleep(0.1)
print("MEGA-IO V3.1 erfolgreich konfiguriert")
except Exception as e:
print(f"Konfigurationsfehler: {e}")
def set_relay(self, relay_num, state):
"""Setzt ein Relais (1-8)"""
if 1 <= relay_num <= 8:
register = 0x00 # Bank 0
bit = relay_num - 1
else:
raise ValueError("Relais muss zwischen 1-8 sein")
# Aktuellen Zustand lesen
self.i2c.writeto(self.addr, bytes([register]))
current = self.i2c.readfrom(self.addr, 1)[0]
# Bit setzen/löschen
if state:
new_state = current | (1 << bit)
else:
new_state = current & ~(1 << bit)
# Neuen Zustand schreiben
self.i2c.writeto(self.addr, bytes([register, new_state]))
print(f"Relais {relay_num} {'EIN' if state else 'AUS'}")
def all_off(self):
"""Alle Relais ausschalten"""
self.i2c.writeto(self.addr, bytes([0x00, 0x00])) # Bank 0
print("Alle Relais AUS")
def pulse(self, relay_num, duration=1.0):
"""Relais für eine bestimmte Zeit einschalten"""
self.set_relay(relay_num, True)
time.sleep(duration)
self.set_relay(relay_num, False)
# --- Globale Initialisierung ---
print("MEGA-IO V3.1 Initialisierung...")
i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=100000)
ADDR = 0x31
print("I2C Scan:", [hex(x) for x in i2c.scan()])
# Globales Board-Objekt erstellen
io_board = MEGAIO_V3(i2c)
print("Bereit! Verwende: io_board.set_relay(NUMMER, True/False)")
3. Jetzt kann das Board verwendet werden
exec(open('main.py').read())
io_board.set_relay(1, True) # Relais 1 EIN
io_board.set_relay(1, False) # Relais 1 AUS
io_board.all_off() # Alle Relais AUS
io_board.pulse(2, 2.5) # Relais 2 für 2.5 Sekunden einschalten
io_board.pulse(3) # Relais 3 default für 1 Sekunde einschalten
Blockdiagramm STM8L151C8: https://www.st.com/en/microcontrollers- ... 151c8.html
Pinbelegung von zweitem Stecker von Erweiterung: