🛠 BME280 sur I2C0 (GPIO2/3) : activer i2c_arm et lire l'ID 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
- Un Compute Module 1 sobre una IO Board
- Un módulo BME280 (I2C, dirección 0x76 por defecto)
- Cableado: VCC 3V3, GND, GPIO2=SDA, GPIO3=SCL (pull-ups presentes en el módulo)
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
- Buscar
/dev/i2c-1: en CM1/BCM2835 el bus user es el 0; los scripts de RPi 3/4 que se copian fallan aquí. - Olvidar
dtparam=i2c_arm=ono el reinicio:i2cdetect -lno lista ningún bus. - Esperar una entrada analógica en un GPIO: el CM1 no tiene ADC, es un error clásico de migración desde Arduino; añada un MCP3008/ADS1115.
- Dejar SDO flotante en un módulo sin regular: la dirección puede cambiar entre 0x76 y 0x77, escanee ambas.
- Alimentar con 5 V un módulo BME280 no regulado: supera los niveles lógicos de 3,3 V, sensor frágil.
Otros tutoriales para esta placa
- Flasher l'eMMC du CM1 avec rpiboot et le jumper J4
- Premier boot : Bullseye legacy, rails 3,3 V et ordre des alimentations
- Première LED sur GPIO17 : banques, courants et broches réservées
- Servo moteur sur PWM0 (GPIO18) : 50 Hz et 2,5 à 12,5 %
- Caméra officielle sur le connecteur FPC CSI du CM1
- Boot sans EEPROM : fallback USB et bootcode.bin sur eMMC
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash