🛠 Lire un capteur I2C (température/humidité) sur le bus 1
Objectifs
Activer le bus I2C du BCM2835 (un seul bus matériel exposé sur P1 : I2C0 sur GPIO0/1), scanner le bus avec i2cdetect et lire un capteur numérique en Python. Les premières révisions n'ont pas de pull-up I2C câblés — sujet discuté sur les forums officiels — on ajoute donc des pull-up externes 4,7 kΩ par sécurité.
Matériel
- Raspberry Pi Model B Rev 1, image legacy 32 bits (Buster)
- Capteur I2C 3,3 V (par ex. BMP180, adresse 0x77)
- 2 résistances pull-up 4,7 kΩ vers 3,3 V (SDA et SCL)
sudo apt install -y i2c-tools python3-smbus- Rappels : GPIO0 = broche 3 (SDA0), GPIO1 = broche 5 (SCL0), 3,3 V = broche 1, GND = broche 6.
Code complet
# 1) Activer I2C : sudo raspi-config > Interfacing > I2C
# ou manuellement dans /boot/config.txt :
# dtparam=i2c_arm=on
sudo reboot
# 2) Scanner le bus (le capteur doit apparaître, ici 0x77)
sudo i2cdetect -y 1
#!/usr/bin/env python3
"""Lecture brute d'un registre capteur via SMBus (adaptez l'adresse)."""
import smbus
BUS = smbus.SMBus(1) # bus I2C1 cote linux (peripherique i2c-bcm2708)
ADDR = 0x77 # sortie de i2cdetect -y 1
val = BUS.read_byte_data(ADDR, 0x10) # exemple de registre
print("registre 0x10 =", hex(val))
Vérification attendue
i2cdetect -y 1 affiche une grille avec l'adresse du capteur (jamais 00, ni les adresses réservées). Le script Python imprime une valeur non nulle qui évolue si vous réchauffez le capteur entre les doigts.
Erreurs fréquentes
- Oublier
dtparam=i2c_arm=onet le redémarrage :/dev/i2c-1n'existe pas. - Bus 0 vs bus 1 : sur BCM2835, le bus exposé sur P1 est le bus 1 côté Linux ;
i2cdetect -y 0renvoie souvent vide. - Capteur 5 V sur un bus 3,3 V : choisir un module 3,3 V ou un convertisseur de niveau.
- Pull-up absentes : le bus reste bloqué à l'état bas, i2cdetect n'affiche rien ou des
UU. Permission deniedsur /dev/i2c-1 : ajouter l'utilisateur au groupei2cou lancer en sudo.
Autres tutoriels pour cette carte
- Allumer une LED via le GPIO avec libgpiod
- Lire un bouton poussoir et afficher l'état dans la console
- Premier script Python : faire clignoter la LED
- Variation d'intensité LED avec le PWM matériel (et son piège)
- Configurer l'Ethernet 10/100 et piloter le Pi en SSH
- Boot sur SD, partitions et procédure de recouvrement
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython