🛠 Lire un capteur I2C (Weather Board Zero)

ODROID-C4 (Hardkernel) · intermediaire · Schéma : IMG-odroid-c4-intermediaire-2-odroidc4-i2c-capteur.svg — Weather Board Zero Hardkernel emboîtée sur le connecteur 40 broches, bus SDA/SCL (3,3 V) reliant le capteur BME-class au SoC S905X3.

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

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

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales