🛠 Capteur I2C : température et pression avec BME280

Raspberry Pi 3 Model A+ (2018) — Ficha de placa · intermediaire · Schéma : IMG-model-3a-plus-intermediaire-2-model3a-i2c-capteur.svg — Raspberry Pi 3 A+ relié en I2C (SDA GPIO2 broche 3, SCL GPIO3 broche 5, 3,3 V, GND) à un module BME280

Objetivos

Activar el bus I2C de la Raspberry Pi 3 A+, detectar un sensor BME280 (temperatura/humedad/presión) y leerlo en Python. El conector de 40 pines expone I2C0: SDA = GPIO2 (pin 3), SCL = GPIO3 (pin 5), alimentación de 3,3 V — lógica de 3,3 V únicamente, no dispone de ADC integrado.

Material

Código completo

# 1) Activer I2C : sudo raspi-config -> Interface Interfacing Options -> I2C
#    ou sans menu :
sudo sed -i 's/^#*dtparam=i2c_arm=on/dtparam=i2c_arm=on/' /boot/firmware/config.txt
sudo apt install -y i2c-tools python3-smbus
sudo reboot
i2cdetect -y 1        # le capteur doit répondre (0x76 ou 0x77)
#!/usr/bin/env python3
# lire_bme280.py — lecture brute des registres (adresse 0x76)
import smbus, time

BUS, ADDR = smbus.SMBus(1), 0x76

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

# configuration capteur (oversampling x2, mode forcé)
BUS.write_byte_data(ADDR, 0xF2, 0x01)          # ctrl_hum
BUS.write_byte_data(ADDR, 0xF4, 0x27)          # ctrl_meas
BUS.write_byte_data(ADDR, 0xF8, 0x00)          # config
while BUS.read_byte_data(ADDR, 0xF3) & 0x08:   # busying ?
    time.sleep(0.01)

t = read_regs(0xFA, 3)
temp = ((t[0] << 16 | t[1] << 8 | t[2]) >> 4) / 100.0
print(f"Temperature : {temp:.2f} C")

Verificación esperada

i2cdetect -y 1 muestra una dirección (0x76 o 0x77) en la cuadrícula; el script muestra una temperatura coherente con la habitación (20–30 °C). En una cámara térmica, el valor sigue la consigna.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales