🛠 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

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

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

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels