🛠 BME280 sur I2C0 (GPIO2/3) : activer i2c_arm et lire l'ID 0x60

Raspberry Pi Compute Module 1 (CM1) · intermediaire · Schéma : IMG-cm1-intermediaire-2-bme280-i2c0-cm1.svg — Un capteur BME280 adresse 0x76 relié aux broches GPIO2 (SDA) et GPIO3 (SCL) du Compute Module 1, avec la ligne dtparam=i2c_arm=on dans config.txt et le registre 0xD0 renvoyant 0x60

Objetivos

Conectar un sensor de temperatura/humedad/presión BME280 al I2C del CM1. El bus I2C « user » es I2C0, cableado en GPIO2 (SDA) y GPIO3 (SCL); es necesario activarlo con dtparam=i2c_arm=on en config.txt. El BME280 se presenta en la dirección 0x76 (o 0x77 según el pin SDO) y su registro de identificación 0xD0 debe devolver 0x60. Tenga cuidado con las costumbres heredadas del RPi 3/4: el CM1 no tiene ningún convertidor ADC integrado, un sensor analógico requiere un ADC externo (MCP3008 por SPI, por ejemplo).

Material

Código completo

# Activer I2C (config.txt du CM1, redémarrage requis)
echo 'dtparam=i2c_arm=on' | sudo tee -a /boot/config.txt
sudo reboot

# Scanner le bus
sudo apt install -y i2c-tools
sudo i2cdetect -y 0        # le BME280 apparaît en 76

# Lire l'ID : registre 0xD0 -> 0x60
sudo i2cget -y 0 0x76 0xD0

# Température brute (registres 0xFA..0xFC, format 20 bits signé)
T=$(sudo i2cget -y 0 0x76 0xFA; sudo i2cget -y 0 0x76 0xFB; sudo i2cget -y 0 0x76 0xFC)
# pip install smbus2
import smbus2
b = smbus2.SMBus(0)
print(hex(b.read_byte_data(0x76, 0xD0)))   # 0x60

Verificación esperada

i2cdetect -y 0 muestra 76; i2cget sobre 0xD0 devuelve 0x60, la firma del BME280 (el BMP280 devuelve 0x58, el BME680 0x61). Al inicializar el sensor (modo forzado), los registros de medición cambian con la temperatura del dedo. El bus se llama correctamente /dev/i2c-0 en el CM1 — no /dev/i2c-1 como en los RPi recientes.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales