🛠 Lire un capteur I2C (BME680)

Raspberry Pi 3 Model B (model-3b) · intermediaire · Schéma : IMG-model-3b-intermediaire-2-model3b-i2c-capteur.svg — capteur BME680 relié à I2C1 : SDA broche 3, SCL broche 5, 3V3 broche 1, GND broche 9, adresses 0x76/0x77 selon broche SDO

Objetivos

Activar el bus I2C por hardware del Raspberry Pi 3 Model B, detectar un sensor ambiental BME680 (temperatura, humedad, presión) y leer una medición en bruto en Python con smbus2. Comprender el papel de las direcciones I2C (fijadas por el chip: 0x76 o 0x77 según el pin SDO), del bus i2c-1 y de las resistencias de pull-up.

Material

Código completo

# 1) Activer I2C (ou via raspi-config : Interface Options > I2C)
sudo raspi-config nonint do_i2c 0
sudo reboot

# 2) Détecter le capteur sur le bus i2c-1
sudo apt install -y i2c-tools
i2cdetect -y 1        # doit afficher 76 ou 77
#!/usr/bin/env python3
"""bme680_brut.py — lecture brute de température sur BME680 (i2c-1).
   Séquence minimale en mode forced ; conversion complète : datasheet Bosch."""
import smbus2, time

BUS, ADDR = 1, 0x77          # vérifier avec i2cdetect -y 1
b = smbus2.SMBus(BUS)

b.write_byte_data(ADDR, 0xE8, 0x2C)  # ctrl_hum : suréchantillonnage x1
b.write_byte_data(ADDR, 0xF4, 0x24)  # config : t_sb=1000 ms, filtre off
b.write_byte_data(ADDR, 0xF2, 0x01)  # ctrl_meas : temp x1, pression off
time.sleep(1.0)

msb, lsb, xlsb = b.read_i2c_block_data(ADDR, 0xFA, 3)
adc_t = (msb << 12) | (lsb << 4) | (xlsb >> 4)   # ADC 20 bits
print(f"ADC brut température : {adc_t}")          # convertir via datasheet

Verificación esperada

i2cdetect -y 1 muestra una celda 76 o 77 (el resto en --). El script de Python muestra un valor ADC en bruto coherente (aumenta cuando se calienta el sensor con el dedo). Con i2cdump -y 1 0x77, los registros de calibración (0x88–0xA1) no están todos en 0x00 — prueba de que el chip responde. Para obtener valores físicos listos para usar, utilizar después la biblioteca bme680 o adafruit-circuitpython-bme680.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales