🛠 Interroger un capteur I2C (BME280) sur le bus du 40 broches
Objetivos
Activar el bus I2C del Model B+ (I2C0 está disponible de forma predeterminada en el conector de 40 pines), escanear el bus con i2cdetect y luego leer el número de identificación de un sensor BME280 en Python — la prueba de que la cadena hardware/software funciona antes de utilizar las mediciones.
Material
- Raspberry Pi Model B+ con Raspberry Pi OS legacy de 32 bits
- 1 módulo BME280 (o BMP280) con conector de 4 pines (VCC, GND, SCK/SCL, SDI/SDA)
- 4 cables Dupont; alimentación del módulo a 3,3 V (pin 1), nunca a 5 V si el módulo no es tolerante
Código completo
# Activer I2C : raspi-config > Interfaces de connexion > I2C, ou :
echo "dtparam=i2c_arm=on" | sudo tee -a /boot/config.txt
sudo reboot
sudo apt install -y i2c-tools python3-smbus
i2cdetect -y 1 # le BME280 doit répondre à 0x76 (ou 0x77)
#!/usr/bin/env python3
"""Lecture de l'ID du BME280 sur i2c-1 — Model B+."""
import smbus
ADDR = 0x76 # 0x77 si l'adresse SDO est montée
bus = smbus.SMBus(1)
chip_id = bus.read_byte_data(ADDR, 0xD0)
print(f"BME280 chip id: 0x{chip_id:02X}") # attendu 0x60 (BMP280 : 0x58)
Verificación esperada
i2cdetect -y 1 muestra una cuadrícula donde la casilla 76 está marcada. El script de Python imprime « BME280 chip id: 0x60 ». Con un BMP280, 0x58 confirma un sensor similar; 0x55 o 0xFF indican un problema de alimentación.
Errores frecuentes
- I2C no activado o reinicio olvidado: « Could not open bus: No such file or directory ».
- SDA/SCL invertidos: i2cdetect no muestra nada; en el B+ los pines 3/5 están fijados en I2C0.
- Módulo de 5 V no tolerante alimentado a 5 V con lógica de 3,3 V: lecturas de 0xFF, o incluso módulo dañado.
- Dirección 0x77 cableada pero script en 0x76: adaptar ADDR según el escaneo de i2cdetect.
- Ningún ADC a bordo: un sensor analógico bruto no se conecta directamente, necesita un convertidor I2C (PCF8591, ADS1115).
Otros tutoriales para esta placa
- Allumer une LED depuis la GPIO 17 avec libgpiod
- Lire un bouton et afficher les appuis dans la console
- Premier script Python : faire clignoter la LED
- Variation d'intensité d'une LED avec le PWM matériel (GPIO18)
- Mettre le B+ en réseau par Ethernet et piloter en SSH
- Amorçage microSD, pannes de boot 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