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

Raspberry Pi 3 Model B+ (2018) — Fiche carte · 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

Objectifs

Activer le bus I2C du connecteur 40 broches, détecter un capteur connecté (par exemple BME280 ou BMP280, adresse 0x76 ou 0x77), lire température et humidité en Python, et comprendre le rôle des résistances de pull-up et de l'adresse 7 bits. L'I2C du connecteur utilise SDA (broche 3) et SCL (broche 5), en logique 3,3 V.

Matériel

Code complet

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

Vérification attendue

i2cdetect -y 1 affiche une grille avec l'adresse du capteur (plutôt 0x76/0x77). Le script affiche une valeur qui bouge quand on réchauffe le capteur du doigt. En cas de -- -- partout : câblage SDA/SCL inversés ou I2C non activé.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels