🛠 Premier capteur I2C sur GPIO0/GPIO1
Objectifs
- Activer le bus I2C0 (GPIO0 = SDA broche 3, GPIO1 = SCL broche 5) via raspi-config ou config.txt.
- Balayer le bus avec i2cdetect pour trouver l'adresse d'un capteur.
- Lire une mesure (température/pression) en Python.
Matériel
- Raspberry Pi Model A + capteur I2C courant (BME280, BMP280, MPU6050...). >
- Le module doit être en niveau 3,3 V ; le bus I2C appelle des pull-up (souvent déjà sur le module).
Code complet
# 1) Activer I2C : sudo raspi-config > Interface I2C
# ou à la main dans /boot/config.txt :
echo "dtparam=i2c_arm=on" | sudo tee -a /boot/config.txt
echo "i2c-dev" | sudo tee /etc/modules-load.d/i2c.conf
sudo apt-get install -y i2c-tools python3-smbus && sudo reboot
# 2) Balayer le bus (bus 1)
sudo i2cdetect -y 1
#!/usr/bin/env python3
import smbus, time
bus = smbus.SMBus(1)
ADDR = 0x76 # adresse vue avec i2cdetect
WHO = bus.read_byte_data(ADDR, 0xD0)
print("chip id:", hex(WHO))
while True:
t = bus.read_word_data(ADDR, 0x22) # registre d'exemple
print("brut température:", t, flush=True)
time.sleep(1)
Vérification attendue
i2cdetect -y 1 affiche l'adresse du capteur (par ex. 76) dans la grille ; le script Python lit des valeurs qui varient quand on réchauffe le capteur du doigt. >
Erreurs fréquentes
- Oublier le reboot après l'activation d'I2C :
/dev/i2c-1inexistant, « Permission denied ». - Inverser SDA/SCL : rien n'apparaît dans i2cdetect, adresse 0x00 fantôme.
- Alimenter le module en 5 V alors que le bus est lu en 3,3 V : risque sur les broches.
- Mauvaise adresse (0x77 au lieu de 0x76) : sélecteur ADDR du module non lu sur la datasheet.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython