🛠 Lire un capteur I2C (température/humidité) sur le bus 1
Objetivos
Activar el bus I2C del BCM2835 (solo un bus físico expuesto en P1: I2C0 en GPIO0/1), escanear el bus con i2cdetect y leer un sensor digital en Python. Las primeras revisiones no tienen resistencias de pull-up I2C cableadas — tema discutido en los foros oficiales — por lo que se añaden pull-up externas de 4,7 kΩ por seguridad.
Material
- Raspberry Pi Model B Rev 1, imagen legacy de 32 bits (Buster)
- Sensor I2C de 3,3 V (por ejemplo, BMP180, dirección 0x77)
- 2 resistencias de pull-up de 4,7 kΩ hacia 3,3 V (SDA y SCL)
sudo apt install -y i2c-tools python3-smbus- Recordatorios: GPIO0 = pin 3 (SDA0), GPIO1 = pin 5 (SCL0), 3,3 V = pin 1, GND = pin 6.
Código completo
# 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))
Verificación esperada
i2cdetect -y 1 muestra una cuadrícula con la dirección del sensor (nunca 00, ni las direcciones reservadas). El script de Python imprime un valor no nulo que cambia si calientas el sensor entre los dedos.
Errores frecuentes
- Olvidar
dtparam=i2c_arm=ony reiniciar:/dev/i2c-1no existe. - Bus 0 vs bus 1: en BCM2835, el bus expuesto en P1 es el bus 1 desde el punto de vista de Linux;
i2cdetect -y 0suele devolver vacío. - Sensor de 5 V en un bus de 3,3 V: elegir un módulo de 3,3 V o un convertidor de nivel.
- Pull-up ausentes: el bus permanece bloqueado en estado bajo, i2cdetect no muestra nada o muestra
UU. Permission denieden /dev/i2c-1: añadir el usuario al grupoi2co ejecutar con sudo.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython