🛠 Lire un capteur sur le bus I2C
Objetivos
Activar el bus I2C del BCM2835, detectar un sensor (ejemplo: BME280 temperatura/presión/humedad) en I2C0 del conector P1, y leer una medición desde Python con smbus.
Material
- Raspberry Pi Model B Rev 2, Raspbian legacy 32 bits
- Sensor I2C 3,3 V (BME280 o equivalente), resistencia de pull-up si el módulo no la incluye
- SDA en GPIO0 (P1-3), SCL en GPIO1 (P1-5), 3,3 V y GND. I2C0 está en GPIO0/1 en esta placa; no hay una dirección predeterminada fiable sin
i2cdetect. sudo apt install i2c-tools python-smbus
Código completo
# 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 reponse sur l'adresse %02x" % ADDR)
Verificación esperada
i2cdetect -y 1 muestra la dirección del sensor en la cuadrícula; el script de Python imprime el identificador del chip (0x60 para un BME280). No deben quedar XX en la cuadrícula.
Errores frecuentes
- Olvidar
dtparam=i2c_arm=ono no reiniciar:i2cdetectresponde « Could not open file /dev/i2c-1 ». - SDA/SCL intercambiados: no aparece nada en el escaneo, el sensor no « responde ».
- Sensor de 5 V alimentado con 3,3 V (o viceversa en las líneas): verificar el nivel lógico, la placa es de 3,3 V.
- Dirección incorrecta (0x76 frente a 0x77 según el pin SDO): escanear antes de programar.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython