🛠 Interroger un capteur I2C (BME280) sur le bus du 40 broches
Objectifs
Activer le bus I2C du Model B+ (I2C0 disponible d'office sur le connecteur 40 broches), scanner le bus avec i2cdetect, puis lire le numéro d'identification d'un capteur BME280 en Python — la preuve que la chaîne matérielle/logicielle fonctionne avant d'exploiter les mesures.
Matériel
- Raspberry Pi Model B+ sous Raspberry Pi OS legacy 32 bits
- 1 module BME280 (ou BMP280) à connecteur 4 broches (VCC, GND, SCK/SCL, SDI/SDA)
- 4 fils Dupont ; alimentation du module en 3,3 V (broche 1), jamais en 5 V si le module n'est pas tolérant
Code complet
# Activer I2C : raspi-config > Interfaces de connexion > I2C, ou :
echo "dtparam=i2c_arm=on" | sudo tee -a /boot/config.txt
sudo reboot
sudo apt install -y i2c-tools python3-smbus
i2cdetect -y 1 # le BME280 doit répondre à 0x76 (ou 0x77)
#!/usr/bin/env python3
"""Lecture de l'ID du BME280 sur i2c-1 — Model B+."""
import smbus
ADDR = 0x76 # 0x77 si l'adresse SDO est montée
bus = smbus.SMBus(1)
chip_id = bus.read_byte_data(ADDR, 0xD0)
print(f"BME280 chip id: 0x{chip_id:02X}") # attendu 0x60 (BMP280 : 0x58)
Vérification attendue
i2cdetect -y 1 affiche une grille où la case 76 est marquée. Le script Python imprime « BME280 chip id: 0x60 ». Avec un BMP280, 0x58 confirme un capteur voisin ; 0x55 ou 0xFF signale un souci d'alimentation.
Erreurs fréquentes
- I2C non activé ou reboot oublié : « Could not open bus: No such file or directory ».
- SDA/SCL inversés : i2cdetect ne montre rien ; sur le B+ les broches 3/5 sont figées sur I2C0.
- Module 5 V non tolérant alimenté en 5 V avec logique 3,3 V : lectures à 0xFF, voire module HS.
- Adresse 0x77 câblée mais script en 0x76 : adapter ADDR au scan i2cdetect.
- Aucun ADC à bord : un capteur analogique brut ne se branche pas directement, il lui faut un convertisseur I2C (PCF8591, ADS1115).
Autres tutoriels pour cette carte
- Allumer une LED depuis la GPIO 17 avec libgpiod
- Lire un bouton et afficher les appuis dans la console
- Premier script Python : faire clignoter la LED
- Variation d'intensité d'une LED avec le PWM matériel (GPIO18)
- Mettre le B+ en réseau par Ethernet et piloter en SSH
- Amorçage microSD, pannes de boot et procédure de recouvrement
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython