🛠 Lire un capteur BME280 en I2C sur le CM3

Raspberry Pi Compute Module 3 (CM3 / CM3L) · intermediaire · Schéma : capteur BME280 relié au bus I2C1 du CM3 sur carte CMIO3 — SDA sur GPIO2, SCL sur GPIO3, VCC 3,3 V, GND.

Objectifs

Activer et utiliser le bus I2C du CM3 (le BCM2837 en expose deux sur le SODIMM) pour lire un capteur de température/humidité/pression BME280. Vous apprendrez à activer le bus via config.txt, à scanner le bus avec i2cdetect, et à lire des registres en Python avec smbus. Attention : le CM3 n'a aucun ADC interne (datasheet RP-008161-DS §2) — tout capteur analogique passe par un convertisseur externe en I2C ou SPI.

Matériel

Code complet

# 1. Activer I2C : ajouter dans /boot/firmware/config.txt (ou via raspi-config)
#    dtparam=i2c_arm=on
sudo reboot
# 2. Outils et scan du bus
sudo apt install -y i2c-tools python3-smbus
sudo i2cdetect -y 1        # doit afficher 76 (ou 77)
#!/usr/bin/env python3
# bme280.py — lecture brute des registres
import time, smbus

BUS = smbus.SMBus(1)          # /dev/i2c-1 (contrôleur « arm »)
ADDR = 0x76

BUS.write_byte_data(ADDR, 0xF4, 0x2F)   # ctrl_meas : temp+pression, oversampling x16
time.sleep(0.1)
hi, lo = BUS.read_i2c_block_data(ADDR, 0xFA, 2)   # regs 0xFA/0xFB : température 20 bits
print('code brut température :', ((hi << 8) | lo) >> 4)

# En pratique, utiliser la couche haute niveau (paquet pip bmp280 par exemple).

Vérification attendue

sudo i2cdetect -y 1 affiche l'adresse 76 (ou 77) du capteur. Le script imprime un code brut qui évolue quand on réchauffe le capteur du doigt. Avec la bibliothèque haute niveau, température, pression et humidité s'affichent en unités physiques.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels