🛠 Lire un capteur I2C (BME280 température/humidité)

Raspberry Pi 5 (model-5) · intermediaire · Schéma : IMG-model-5-intermediaire-2-model5-i2-i2c-capteur.svg — Capteur BME280 sur le bus I2C0 : SDA sur GPIO2 (broche 3), SCL sur GPIO3 (broche 5), 3V3 et GND

Objectifs

Activer le bus I2C du Raspberry Pi 5, détecter un capteur d'ambiance BME280 (température, humidité, pression) et lire ses mesures en Python. Sur le Pi 5, l'I2C est apporté par la puce RP1 ; le bus principal I2C0 est sur GPIO2 (SDA, broche physique 3) et GPIO3 (SCL, broche physique 5).

Matériel

Code complet

# 1) Activer I2C : sudo raspi-config -> Interface Interfacing Options -> I2C
#    ou dans /boot/firmware/config.txt : dtparam=i2c_arm=on
sudo apt install -y i2c-tools python3-smbus
sudo reboot

# 2) Vérifier la présence du capteur (0x76 ou 0x77 attendu)
i2cdetect -y 1
#!/usr/bin/env python3
# lire_bme280.py — lecture brute des registres du BME280 sur I2C bus 1
import smbus, time

BUS = smbus.SMBus(1)
ADDR = 0x76   # 0x77 si les broches SD0/AD0 sont câblées autrement

def read_regs(reg, n):
    return BUS.read_i2c_block_data(ADDR, reg, n)

# Calibration (une seule fois au démarrage)
dig = read_regs(0x88, 24) + read_regs(0xE0, 7)
BUS.write_byte_data(ADDR, 0xF2, 0x01)              # oversampling humidité
BUS.write_byte_data(ADDR, 0xF4, 0x27)              # mode normal
BUS.write_byte_data(ADDR, 0xF5, 0x00)
time.sleep(0.5)

while True:
    data = read_regs(0xF7, 8)                       # T, P, H bruts
    print("octets bruts T/P/H :", [hex(b) for b in data])
    time.sleep(2)

Vérification attendue

i2cdetect -y 1 affiche une case à 76 (ou 77). Le script affiche toutes les 2 secondes les octets bruts lus sur le capteur ; avec la bibliothèque adafruit-circuitpython-bme280 on obtient directement température en °C, humidité en % et pression en hPa.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels