Raspberry Pi Pico: I2C verbinden und programmieren

Der I2C ist ein synchroner serieller Zweidraht-Bus. Er verwendet jeweils eine bidirektionale Daten- und Taktleitung und wird typischerweise für die Kommunikation zwischen unterschiedlichen Komponenten benutzt.

Geräte mit dem I2C verbinden

Raspberry Pi Pico GPIO Belegung

Der Raspberry Pi Pico bzw. der Mikrocontroller RP2040 hat insgesamt 2 I2C-Schnittstellen, die auf mehreren GPIO-Pins ausgegeben werden können. Hierbei ist bei der Initialisierung im Programmcode zu beachten, dass es Doppelbelegungen mit SPI, UART und ADCs gibt.

Der I2C kennt zwei Leitungen. Eine für die Daten, SDA genannt. Die andere ist die Taktleitung, SCL genannt. Desweiteren benötigen die beteiligten Geräte eine Betriebsspannung (VCC: 3,3 oder 5 Volt) und eine Verbindung zu Ground (GND).

I2C scannen

Der folgende Programmcode zum Testen bzw. Scannen des I2C ist sehr einfach. Zuerst werden die GPIO-Pins für I2C und der I2C initialisiert. Und dann wird der I2C-Scan gestartet und das Ergebnis auf dem Display ausgegeben.

# Bibliotheken laden
from machine import Pin, I2C

# Initialisierung I2C
i2c = I2C(0, sda=Pin(20), scl=Pin(21))

# I2C-Bus-Scan ausgeben
print(i2c.scan())

Das Ergebnis ist ein Array mit den Adressen (dezimale Schreibweise) der Geräte, die mit diesem I2C-Bus verbunden sind.

I2C-Geräte mit Adresse anzeigen

Der folgende Programmcode zum Testen bzw. Scannen des I2C-Busses ein wenig komplexer. Allerdings liefert er zusätzliche Informationen.
Zuerst werden die GPIO-Pins für I2C und der I2C initialisiert. Und dann wird der I2C-Scan gestartet und das Ergebnis auf dem Display ausgegeben.

# Bibliotheken laden
from machine import Pin, I2C

# Initialisierung I2C-Pins
i2c_sda = Pin(20)
i2c_scl = Pin(21)

# Initialisierung I2C
i2c = I2C(0,sda=i2c_sda,scl=i2c_scl,freq=100000)

# I2C-Bus-Scan
print('Scan I2C Bus...')
devices = i2c.scan()

# Scanergebnis ausgeben
if len(devices) == 0:
    print('Kein I2C-Gerät gefunden!')
else:
    print('I2C-Geräte gefunden:', len(devices))
    for device in devices:
        print('Dezimale Adresse:', device, '| Hexadezimale Adresse:', hex(device))

Das eigentliche Scan-Ergebnis ist ein Array mit den Adressen der Geräte, die mit diesem I2C-Bus verbunden sind. Die dezimale Schreibweise der Adresse ist bei der Initialisierung der I2C-Geräte selten hilfreich. Deshalb wird zusätzlich noch in die hexadezimale Schreibweise umgerechnet.

Hinweis: Die hexadezimale Adresse wird benötigt, wenn man das Gerät am I2C initialisieren will.

Für was wird die I2C-Adresse benötigt?

Die hexadezimale Adresse wird bei der Initialisierung des Geräts durch eine Bibliothek benötigt. Mit dieser Adresse fühlt sich das Gerät angesprochen. Oft ist diese Adresse in einer Bibliothek hinterlegt.
Zu beachten ist, dass man zwei Geräte, die die gleiche Adresse haben, nicht gemeinsam am gleichen I2C betrieben werden können.

Troubleshooting I2C - Fehler, Probleme und Lösungen

Wenn nach dem Aufbau und der Programmausführung etwas nicht funktioniert, dann muss Du Dich auf die Fehlersuche begeben.

Beliebte Fehler sind:

  • Die Leitungen für SDA und SCL sind vertauscht.
  • Im Programmcode wurden für SDA und SCL die hardwareseitigen GPIO-Pins und nicht die logischen GPIO-Nummern angegeben.

Probleme mit dem I2C sind immer mit Fehlermeldungen in der Kommandozeile verbunden. Die sind nicht immer einfach zu interpretieren.

Anwendungen mit dem I2C

Was kann man mit dem I2C alles machen? Grundsätzlich geht es immer darum, externe Komponenten mit dem Raspberry Pi Pico zu verbinden.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren