🛠 Premier capteur sur le bus I2C
Objectifs
Activer le bus I2C, scanner le bus avec i2cdetect, puis lire un capteur d'environnement depuis Python avec smbus2. Le BCM2711 expose jusqu'à 6 contrôleurs I2C ; i2c-1 (broches 3 et 5) est le bus utilisateur standard.
Materiel
- Raspberry Pi 4B + capteur BME680 (ou BME280) sur breakout
- Resistances de pull-up 4.7 kOhms si le breakout n'en a pas
- sudo apt install i2c-tools python3-smbus2
Code complet
# Activer I2C : sudo raspi-config -> Interface Options -> I2C (ou dtoverlay=i2c-rtc en plus)
sudo i2cdetect -y 1 # balayage du bus i2c-1
#!/usr/bin/env python3
# lecture_i2c.py - lire l'identifiant de puce du BME680
import smbus2
ADDR = 0x76 # 0x76 ou 0x77 selon la broche SDO du module
#
bus = smbus2.SMBus(1)
chip_id = bus.read_byte_data(ADDR, 0xD0)
print(f"Chip ID 0x{chip_id:02X} (BME680 attendu : 0x61)")
Verification attendue
i2cdetect -y 1 affiche une table ; une case (souvent 76 ou 77) apparait : c'est le capteur. Le script affiche Chip ID 0x61 pour un BME680 authentique. Aucune case : bus inactive, cablage SDA/SCL inverse ou module non alimente.
Erreurs frequentes
- Oublier d'activer I2C dans raspi-config puis rebooter : i2cdetect repond Could not open bus.
- Inverser SDA (broche 3) et SCL (broche 5) : rien n'apparait au scan.
- Alimenter le capteur en 5 V sur un bus attendu en 3.3 V : vérifier la doc du breakout.
- Mauvaise adresse (0x76 contre 0x77) : le scan i2cdetect donne la bonne.
- Pas de pull-up sur des cables longs : lignes qui ne remontent pas, lecture aléatoire.
Autres tutoriels pour cette carte
- Allumer une LED via le GPIO avec libgpiod
- Bouton poussoir et messages dans la console
- Premier script Python : rapport d'information système
- Variateur d'intensité : faire varier une LED en PWM matériel
- Gigabit Ethernet natif et administration à distance en SSH
- Booter sur NVMe/USB et procédure de recouvrement
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython