🛠 Lire un capteur sur le bus I2C
Objectifs
Activer le bus I2C du BCM2835, détecter un capteur (exemple : BME280 température/pression/humidité) sur I2C0 du connecteur P1, et lire une mesure depuis Python avec smbus.
Matériel
- Raspberry Pi Model B Rev 2, Raspbian legacy 32 bits
- Capteur I2C 3,3 V (BME280 ou équivalent), résistance de pull-up si le module n'en a pas
- SDA sur GPIO0 (P1-3), SCL sur GPIO1 (P1-5), 3,3 V et GND. I2C0 est bien sur GPIO0/1 sur cette carte ; pas d'adresse par défaut fiable sans
i2cdetect. sudo apt install i2c-tools python-smbus
Code complet
# 1) Activer I2C: dans /boot/config.txt ajouter la ligne puis redemarrer
sudo nano /boot/config.txt
# dtparam=i2c_arm=on
sudo reboot
# 2) Scanner le bus (adresse attendue: 76 ou 77 pour un BME280)
sudo i2cdetect -y 1
#!/usr/bin/env python
# lire_temp.py - lecture brute d'un registre via smbus
import smbus
bus = smbus.SMBus(1) # i2c-1 (le seul expose sur P1)
ADDR = 0x76 # adresse trouvee a l'etape i2cdetect
try:
who = bus.read_byte_data(ADDR, 0xD0)
print("chip id: 0x%02x" % who) # 0x60 pour un BME280
except IOError:
print("Pas de réponse sur l'adresse %02x" % ADDR)
Vérification attendue
i2cdetect -y 1 affiche l'adresse du capteur dans la grille ; le script Python imprime l'identifiant de puce (0x60 pour un BME280). Aucun XX partout ne doit rester dans la grille.
Erreurs fréquentes
dtparam=i2c_arm=onoublié ou redémarrage omis :i2cdetectrépond « Could not open file /dev/i2c-1 ».- SDA/SCL inversés : rien n'apparaît au scan, le capteur ne « répond » pas.
- Capteur 5 V alimenté en 3,3 V (ou l'inverse sur les lignes) : vérifier le niveau logique, la carte est en 3,3 V.
- Mauvaise adresse (0x76 contre 0x77 selon la broche SDO) : scanner avant de coder.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython