🛠 Capteur I2C : température et pression avec BME280
Objectifs
Activer le bus I2C du Raspberry Pi 3 A+, détecter un capteur BME280 (température/humidité/pression) et le lire en Python. Le connecteur 40 broches expose I2C0 : SDA = GPIO2 (broche 3), SCL = GPIO3 (broche 5), alimentation 3,3 V — logique 3,3 V uniquement, pas d'ADC à bord.
Matériel
- Raspberry Pi 3 A+ sous Raspberry Pi OS Bookworm
- Module BME280 (I2C, adresse 0x76 ou 0x77 selon le brochage ADDR)
- 4 Dupont : SDA→broche 3, SCL→broche 5, VCC→3,3 V (broche 17), GND→broche 25
- >
Code complet
# 1) Activer I2C : sudo raspi-config -> Interface Interfacing Options -> I2C
# ou sans menu :
sudo sed -i 's/^#*dtparam=i2c_arm=on/dtparam=i2c_arm=on/' /boot/firmware/config.txt
sudo apt install -y i2c-tools python3-smbus
sudo reboot
i2cdetect -y 1 # le capteur doit répondre (0x76 ou 0x77)
#!/usr/bin/env python3
# lire_bme280.py — lecture brute des registres (adresse 0x76)
import smbus, time
BUS, ADDR = smbus.SMBus(1), 0x76
def read_regs(reg, n):
return BUS.read_i2c_block_data(ADDR, reg, n)
# configuration capteur (oversampling x2, mode forcé)
BUS.write_byte_data(ADDR, 0xF2, 0x01) # ctrl_hum
BUS.write_byte_data(ADDR, 0xF4, 0x27) # ctrl_meas
BUS.write_byte_data(ADDR, 0xF8, 0x00) # config
while BUS.read_byte_data(ADDR, 0xF3) & 0x08: # busying ?
time.sleep(0.01)
t = read_regs(0xFA, 3)
temp = ((t[0] << 16 | t[1] << 8 | t[2]) >> 4) / 100.0
print(f"Temperature : {temp:.2f} C")
Vérification attendue
i2cdetect -y 1 affiche une adresse (0x76 ou 0x77) dans la grille ; le script affiche une température cohérente avec la pièce (20–30 °C). En chambre thermique, la valeur suit la consigne.
Erreurs fréquentes
- I2C non activé :
i2cdetect -lne liste rien → activerdtparam=i2c_arm=onet redémarrer. - Capteur à 0x77 alors que le script suppose 0x76 : vérifier la broche ADDR du module.
- SDA/SCL inversés :
i2cdetectne trouve rien et le bus reste bloqué. - Rester en 3,3 V côté alimentation comme côté logique sur le 3 A+.
Autres tutoriels pour cette carte
- Allumer une LED en C avec libgpiod sur le GPIO 40 broches
- Bouton poussoir et retour console avec gpiozero
- Premier script Python : inventaire du système
- Variation d'intensité d'une LED avec le PWM matériel
- Connexion WiFi station et administration en SSH
- Démarrage SD/USB et récupération d'une carte qui ne boot plus
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython