🛠 Capteur I2C : température et pression avec BME280
Objetivos
Activar el bus I2C de la Raspberry Pi 3 A+, detectar un sensor BME280 (temperatura/humedad/presión) y leerlo en Python. El conector de 40 pines expone I2C0: SDA = GPIO2 (pin 3), SCL = GPIO3 (pin 5), alimentación de 3,3 V — lógica de 3,3 V únicamente, no dispone de ADC integrado.
Material
- Raspberry Pi 3 A+ con Raspberry Pi OS Bookworm
- Módulo BME280 (I2C, dirección 0x76 o 0x77 según el cableado del pin ADDR)
- 4 cables Dupont: SDA→pin 3, SCL→pin 5, VCC→3,3 V (pin 17), GND→pin 25
- >
Código completo
# 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")
Verificación esperada
i2cdetect -y 1 muestra una dirección (0x76 o 0x77) en la cuadrícula; el script muestra una temperatura coherente con la habitación (20–30 °C). En una cámara térmica, el valor sigue la consigna.
Errores frecuentes
- I2C no activado:
i2cdetect -lno lista nada → activardtparam=i2c_arm=ony reiniciar. - Sensor en 0x77 mientras que el script asume 0x76: verificar el pin ADDR del módulo.
- SDA/SCL invertidos:
i2cdetectno encuentra nada y el bus queda bloqueado. - Mantener 3,3 V tanto en la alimentación como en la lógica en la 3 A+.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython