🛠 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

Objetivos

Activar el bus I2C del Raspberry Pi 5, detectar un sensor ambiental BME280 (temperatura, humedad, presión) y leer sus mediciones en Python. En el Pi 5, el I2C es proporcionado por el chip RP1; el bus principal I2C0 está en GPIO2 (SDA, pin físico 3) y GPIO3 (SCL, pin físico 5).

Material

Código completo

# 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)

Verificación esperada

i2cdetect -y 1 muestra una casilla en 76 (o 77). El script muestra cada 2 segundos los bytes crudos leídos del sensor; con la biblioteca adafruit-circuitpython-bme280 se obtienen directamente la temperatura en °C, la humedad en % y la presión en hPa.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales