Skip to main content

I2C-Bus scannen

Dieses Beispiel zeigt, wie der I2C-Bus des Lernboards gescannt wird, um alle angeschlossenen Geräte zu finden und anzuzeigen.

#Funktionsübersicht

  • I2C-Bus initialisieren
  • Alle Adressen von 0x00 bis 0x77 scannen
  • Gefundene Geräte mit Adresse anzeigen
  • Bekannte Sensoren des Lernboards identifizieren

#Voraussetzungen

  • Lernboard mit MicroPython

#I2C-Adressen auf dem Lernboard

Das Lernboard hat folgende I2C-Geräte mit festen Adressen:

Gerät Adresse Funktion
TCA6408A 0x20 GPIO-Expander (Joystick, Taster)
BH1750 0x23 Lichtsensor
BMI270 0x68 Beschleunigung / Gyroskop
BME280 0x76 Temperatur / Luftfeuchtigkeit / Druck

#Code

"""
Lernboard Beispiel: I2C-Bus scannen
===================================
Dieses Beispiel zeigt:
- Initialisierung des I2C-Bus
- Scannen aller I2C-Adressen
- Identifikation bekannter Geräte
"""
from machine import Pin, I2C
import time
# I2C-Konfiguration für das Lernboard
I2C_SDA_PIN = 6
I2C_SCL_PIN = 7
I2C_FREQUENCY = 400000 # 400 kHz
# Bekannte I2C-Adressen auf dem Lernboard
KNOWN_DEVICES = {
0x20: "TCA6408A (GPIO-Expander)",
0x23: "BH1750 (Lichtsensor)",
0x68: "BMI270 (Beschleunigung/Gyroskop)",
0x76: "BME280 (Temperatur/Feuchte/Druck)",
}
def scan_i2c():
"""Scannt den I2C-Bus und gibt alle gefundenen Geräte aus."""
# I2C initialisieren
print("Initialisiere I2C-Bus...")
print(f" SDA: GPIO{I2C_SDA_PIN}")
print(f" SCL: GPIO{I2C_SCL_PIN}")
print(f" Frequenz: {I2C_FREQUENCY // 1000} kHz")
print()
i2c = I2C(0, sda=Pin(I2C_SDA_PIN), scl=Pin(I2C_SCL_PIN), freq=I2C_FREQUENCY)
# Bus scannen
print("Scanne I2C-Bus...")
devices = i2c.scan()
print("-" * 50)
if not devices:
print("Keine I2C-Geräte gefunden!")
return
print(f"{len(devices)} Gerät(e) gefunden:\n")
# Gefundene Geräte ausgeben
for addr in devices:
device_name = KNOWN_DEVICES.get(addr, "Unbekanntes Gerät")
print(f" Adresse: 0x{addr:02X} ({addr:3d}) - {device_name}")
print("-" * 50)
# Prüfen ob alle Lernboard-Sensoren gefunden wurden
print("\nStatus der Lernboard-Sensoren:")
for addr, name in KNOWN_DEVICES.items():
status = "OK" if addr in devices else "NICHT GEFUNDEN"
symbol = "+" if addr in devices else "!"
print(f" [{symbol}] {name}: {status}")
return devices
def main():
"""Hauptprogramm."""
print("=" * 50)
print("Lernboard - I2C Scanner")
print("=" * 50)
print()
scan_i2c()
print()
print("Scan abgeschlossen.")
# Programm starten
if __name__ == "__main__":
main()

#Konsolenausgabe

Bei korrekter Funktion aller Sensoren erscheint folgende Ausgabe:

==================================================
Lernboard - I2C Scanner
==================================================
Initialisiere I2C-Bus...
SDA: GPIO6
SCL: GPIO7
Frequenz: 400 kHz
Scanne I2C-Bus...
--------------------------------------------------
4 Gerät(e) gefunden:
Adresse: 0x20 ( 32) - TCA6408A (GPIO-Expander)
Adresse: 0x23 ( 35) - BH1750 (Lichtsensor)
Adresse: 0x68 (104) - BMI270 (Beschleunigung/Gyroskop)
Adresse: 0x76 (118) - BME280 (Temperatur/Feuchte/Druck)
--------------------------------------------------
Status der Lernboard-Sensoren:
[+] TCA6408A (GPIO-Expander): OK
[+] BH1750 (Lichtsensor): OK
[+] BMI270 (Beschleunigung/Gyroskop): OK
[+] BME280 (Temperatur/Feuchte/Druck): OK
Scan abgeschlossen.

#Hinweise

  • I2C-Pins: Das Lernboard verwendet GPIO6 (SDA) und GPIO7 (SCL) für den I2C-Bus.
  • Frequenz: 400 kHz (Fast Mode) wird von allen Sensoren unterstützt.
  • Fehlende Geräte: Falls ein Sensor nicht gefunden wird, könnte ein Hardwaredefekt oder eine kalte Lötstelle vorliegen.

#Fehlerbehebung

Problem Mögliche Ursache
Keine Geräte gefunden Falsche Pin-Konfiguration oder I2C-Bus nicht richtig initialisiert
Gerät fehlt Kalte Lötstelle, defekter Sensor
Falsche Adresse Adresskonflikte mit externen I2C-Geräten

#Erweiterungsmöglichkeiten

  • Zyklischer Scan zur Überwachung
  • Detaillierte Diagnose einzelner Sensoren
  • Integration in ein Selbsttest-Programm