🛠 Premier capteur sur le bus I2C
Objetivos
Activar el bus I2C, escanear el bus con i2cdetect y luego leer un sensor de entorno desde Python con smbus2. El BCM2711 expone hasta 6 controladores I2C; i2c-1 (pines 3 y 5) es el bus de usuario estándar.
Material
- Raspberry Pi 4B + sensor BME680 (o BME280) en breakout
- Resistencias de pull-up de 4,7 kOhms si el breakout no las incluye
- sudo apt install i2c-tools python3-smbus2
Código completo
# Activer I2C : sudo raspi-config -> Interface Options -> I2C (ou dtoverlay=i2c-rtc en plus)
sudo i2cdetect -y 1 # balayage du bus i2c-1
#!/usr/bin/env python3
# lecture_i2c.py - lire l'identifiant de puce du BME680
import smbus2
ADDR = 0x76 # 0x76 ou 0x77 selon la broche SDO du module
#
bus = smbus2.SMBus(1)
chip_id = bus.read_byte_data(ADDR, 0xD0)
print(f"Chip ID 0x{chip_id:02X} (BME680 attendu : 0x61)")
Verificación esperada
i2cdetect -y 1 muestra una tabla; aparece una celda (a menudo 76 o 77): es el sensor. El script muestra Chip ID 0x61 para un BME680 auténtico. Si no aparece ninguna celda: bus inactivo, cableado SDA/SCL invertido o módulo sin alimentación.
Errores frecuentes
- Olvidar activar I2C en raspi-config y luego reiniciar: i2cdetect responde Could not open bus.
- Invertir SDA (pin 3) y SCL (pin 5): no aparece nada en el escaneo.
- Alimentar el sensor con 5 V en un bus esperado en 3,3 V: verificar la documentación del breakout.
- Dirección incorrecta (0x76 frente a 0x77): el escaneo i2cdetect proporciona la correcta.
- Falta de pull-up en cables largos: las líneas no suben, lectura aleatoria.
Otros tutoriales para esta placa
- Allumer une LED via le GPIO avec libgpiod
- Bouton poussoir et messages dans la console
- Premier script Python : rapport d'information système
- Variateur d'intensité : faire varier une LED en PWM matériel
- Gigabit Ethernet natif et administration à distance en SSH
- Booter sur NVMe/USB et procédure de recouvrement
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython