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
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.
- LCD-1602-Display mit I2C-Modul programmieren
- 4-fach 7-Segment-Anzeige programmieren (TM1637)
- Digitales Thermometer mit Display
- Display-Steuerung mit Anwesenheitserkennung
Weitere verwandte Themen:
- Raspberry Pi Pico: Grundlagen zum I2C
- Raspberry Pi Pico
- Raspberry Pi Pico: Erste Schritte
- Raspberry Pi Pico: Anschlüsse und Schnittstellen
- Raspberry Pi Pico: GPIO-Belegung (Pinout)
Teilen:
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
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
Online-Workshop: 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.
Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)