🛠 Lire un capteur sur le bus I2C

Raspberry Pi 2 Model B (2015) — Fiche carte · 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

Objectifs

Activer le bus I2C0 du Raspberry Pi 2, scanner le bus pour trouver l'adresse d'un capteur, puis lire ses mesures depuis Python. L'I2C ne nécessite que deux fils (SDA, SCL) partagés entre plusieurs périphériques, chacun ayant une adresse — c'est la base de la majorité des capteurs du commerce.

Matériel

Code complet

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

Vérification attendue

i2cdetect -y 1 affiche une grille ; l'adresse du capteur apparaît en clair (jamais 0x03 ni 0x70, réservés). Le script Python affiche un chip id non nul (0x60 pour BME280, 0x50/0x51 pour BMP280) puis cinq lectures espacées d'une seconde. Un 0x00 partout signale un câblage ou une adresse erronés.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels