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

Raspberry Pi 3 Model B+ (2018) — Ficha de placa · intermediaire · Schéma : IMG-model-3b-plus-intermediaire-2-model3bp-i2c-capteur.svg — Capteur I2C relié à SDA (broche 3) et SCL (broche 5), 3,3 V et GND, bus avec résistances de pull-up

Objetivos

Activar el bus I2C del conector de 40 pines, detectar un sensor conectado (por ejemplo, BME280 o BMP280, dirección 0x76 o 0x77), leer la temperatura y la humedad en Python, y comprender la función de las resistencias de pull-up y de la dirección de 7 bits. El I2C del conector utiliza SDA (pin 3) y SCL (pin 5), con lógica de 3,3 V.

Material

Código completo

# 1. Activer I2C : sudo raspi-config -> Interface Options -> I2C (ou config.txt)
echo 'dtparam=i2c_arm=on' | sudo tee -a /boot/firmware/config.txt
sudo reboot

# 2. Scanner le bus : le capteur doit répondre, p. ex. 0x76
sudo i2cdetect -y 1
#!/usr/bin/env python3
"""Lecture BMP280 en brut via smbus (adresse 0x76)."""
import smbus, time

BUS = smbus.SMBus(1)
ADDR = 0x76   # 0x77 si la broche SDO est au 3.3 V — voir i2cdetect

# Séquence simplifiée d'initialisation BMP280 (regs de configuration)
BUS.write_byte_data(ADDR, 0xF4, 0x27)   # oversampling x16/x1, mode forcé
BUS.write_byte_data(ADDR, 0xF5, 0x00)   # config, filtre off
time.sleep(0.05)

def lire_registre2(reg):
    hi, lo = BUS.read_i2c_block_data(ADDR, reg, 3)[1:3]
    return (hi << 8) | lo

while True:
    adc_t = lire_registre2(0xFA)        # température brute (MSB, LSB, XLSB)
    t_c = (adc_t / 16.0) / 100.0        # conversion indicative, non calibrée
    print(f"Temperature brute: {adc_t} (~{t_c:.1f} C)  Ctrl-C pour sortir")
    time.sleep(2)

> NO VERIFICADO: la secuencia de registros y la conversión anteriores son indicativas para BMP280; para una lectura fiable, utilice la biblioteca del fabricante (adafruit-circuitpython-bme280), que aplica los coeficientes de calibración grabados en el sensor.

Verificación esperada

i2cdetect -y 1 muestra una cuadrícula con la dirección del sensor (normalmente 0x76/0x77). El script muestra un valor que cambia cuando se calienta el sensor con el dedo. En caso de ver -- -- en todas partes: los cables SDA/SCL están invertidos o el I2C no está activado.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales