🛠 Lire un capteur sur le bus I2C

Raspberry Pi 2 Model B (2015) — Ficha de la placa · intermediaire · Schéma : IMG-model-2b-intermediaire-2-model2b-i2c-capteur.svg — bus I2C0 du connecteur J8 (SDA/SCL) relié à un capteur de température avec adresses 0x76/0x77 détectées par i2cdetect

Objetivos

Activar el bus I2C0 de la Raspberry Pi 2, escanear el bus para encontrar la dirección de un sensor y luego leer sus mediciones desde Python. I2C solo requiere dos hilos (SDA, SCL) compartidos entre varios dispositivos, cada uno con una dirección; esta es la base de la mayoría de los sensores comerciales.

Material

Código completo

# 1. Activer I2C : sudo raspi-config -> Interface -> I2C, ou :
sudo sed -i 's/^#*dtparam=i2c_arm=.*/dtparam=i2c_arm=on/' /boot/config.txt
sudo reboot

# 2. Scanner le bus : le capteur doit apparaitre (ex. 0x76 ou 0x77)
i2cdetect -y 1
#!/usr/bin/env python3
"""lire_capteur.py — lecture brute d'un registre I2C."""
import smbus
import time

BUS = smbus.SMBus(1)
ADRESSE = 0x76            # adresse renvoyee par i2cdetect
REG_ID = 0xD0             # registre « chip id » (BMP/BME280)

chip_id = BUS.read_byte_data(ADRESSE, REG_ID)
print(f"Chip ID lu a 0x{ADRESSE:02X} : 0x{chip_id:02X}")
for _ in range(5):
    t = BUS.read_byte_data(ADRESSE, 0xFA)  # octet haut de temperature
    print(f"Brut temperature (octet haut) : {t}")
    time.sleep(1)

Verificación esperada

i2cdetect -y 1 muestra una cuadrícula; la dirección del sensor aparece claramente (nunca 0x03 ni 0x70, reservadas). El script de Python muestra un chip id distinto de cero (0x60 para BME280, 0x50/0x51 para BMP280) y luego cinco lecturas separadas por un segundo. Un 0x00 en todas partes indica un cableado o una dirección incorrectos.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales