🛠 BME280 sur I2C0 (GPIO2/3) : activer i2c_arm et lire l'ID 0x60
Objectifs
Brancher un capteur de température/humidité/pression BME280 sur l'I2C du CM1. Le bus I2C « user » est I2C0, câblé sur GPIO2 (SDA) et GPIO3 (SCL) ; il faut l'activer avec dtparam=i2c_arm=on dans config.txt. Le BME280 se présente en 0x76 (ou 0x77 selon la broche SDO) et son registre d'identification 0xD0 doit renvoyer 0x60. Attention aux habitudes venues du RPi 3/4 : le CM1 n'a aucun convertisseur ADC intégré, un capteur analogique exige un ADC externe (MCP3008 en SPI, par exemple).
Matériel
- Un Compute Module 1 sur IO Board
- Un module BME280 (I2C, adresse 0x76 par défaut)
- Câblage : VCC 3V3, GND, GPIO2=SDA, GPIO3=SCL (pull-ups présents sur le module)
Code complet
# 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
Vérification attendue
i2cdetect -y 0 affiche 76 ; i2cget sur 0xD0 renvoie 0x60, signature du BME280 (le BMP280 renvoie 0x58, le BME680 0x61). En initialisant le capteur (mode forcé), les registres de mesure évoluent avec la température du doigt. Le bus s'appelle bien /dev/i2c-0 sur le CM1 — pas /dev/i2c-1 comme sur les RPi récents.
Erreurs fréquentes
- Chercher
/dev/i2c-1: sur CM1/BCM2835 le bus user est le 0 ; les scripts RPi 3/4 à recopier cassent ici. - Oublier
dtparam=i2c_arm=onou le reboot :i2cdetect -lne liste aucun bus. - Attendre une entrée analogique sur un GPIO : le CM1 n'a pas d'ADC, c'est une erreur classique de migration depuis Arduino ; ajouter un MCP3008/ADS1115.
- SDO laissé flottant sur un module nu : l'adresse peut basculer entre 0x76 et 0x77, scanner les deux.
- Alimenter en 5 V un module BME280 non régulé : dépassement des niveaux logiques 3,3 V, capteur fragile.
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash