🛠 Lire un capteur I2C (Weather Board Zero)
Objetivos
Activar el bus I2C del ODROID-C4 bajo Armbian mainline y leer un sensor ambiental tipo BME680 (Weather Board Zero de Hardkernel, ~2 $): detección de dirección con i2cdetect, lectura de registros en Python mediante smbus, y activación declarativa de los overlays en armbianEnv.txt.
Hardware
- ODROID-C4 bajo Armbian current (kernel 6.6)
- Weather Board Zero (o cualquier sensor de la familia BME en módulo I2C) — conector de 40 pines, lógica de 3,3 V
sudo apt install -y i2c-tools python3-smbus device-tree-compiler- > SIN VERIFICAR: el número de controlador I2C mapeado al conector (0 o 1) y la dirección exacta del sensor (0x76/0x77): confirmar con
i2cdetect -lyi2cdetect -y Nantes de ejecutar el script.
Código completo
# 1) Activer I2C (Armbian) puis redémarrer
sudo sed -i 's/^#*overlay_add=.*/overlay_add=i2c0/' /boot/armbianEnv.txt
sudo reboot
# 2) Détecter le capteur
i2cdetect -l # lister les bus
i2cdetect -y 0 # le capteur répond à 0x76 ou 0x77
#!/usr/bin/env python3
# lecture_bme.py - CHIP_ID + température brute (démo non calibrée)
import smbus, time
BUS, ADDR = 0, 0x77 # adapter selon i2cdetect
bus = smbus.SMBus(BUS)
chip_id = bus.read_byte_data(ADDR, 0xD0)
assert chip_id == 0x61, f"chip id inattendu {chip_id:#x}"
def read_reg24(reg):
msb, lsb, xlsb = bus.read_i2c_block_data(ADDR, reg, 3)
return (msb << 12) | (lsb << 4) | (xlsb >> 4)
while True:
t = read_reg24(0x24) / 16384.0 - 50.0
print(f"température brute ≈ {t:6.2f} °C (CHIP_ID={chip_id:#04x})")
time.sleep(2)
Verificación esperada
i2cdetect -y 0 muestra una cuadrícula con una celda no vacía en 0x76 o 0x77. El script Python imprime cada 2 segundos una línea con la temperatura y el CHIP_ID 0x61; Ctrl+C lo detiene correctamente. El valor bruto es aproximado (demostración sin tabla de calibración BME680) pero debe cambiar cuando se caliente el sensor con el dedo.
Errores frecuentes
OSError: [Errno 121] Remote I/O Error: dirección o bus incorrectos — revisar la salida dei2cdetect, probar con-y 1.- Ningún bus listado: el overlay
i2c0no está activado en/boot/armbianEnv.txto la máquina no se ha reiniciado. - Querer leer los ADC del conector al mismo tiempo: las entradas ADC están limitadas a un máximo de 1,8 V, ¡no 3,3 V!
- Conectar la Weather Board en caliente: apagar la alimentación antes de conectar un módulo al conector de 40 pines.
- > SIN VERIFICAR: número de instancia I2C por pin, no confirmado (wiki inaccesible); confiar en i2cdetect.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash