🛠 Lire un capteur sur le bus I2C

ODROID-N2 / ODROID-N2+ (Hardkernel) · intermediaire · Schéma : IMG-odroid-n2-intermediaire-2-odroidn2-i2c-capteur.svg — Capteur température/humidité I2C relié aux lignes SDA et SCL du connecteur 40 broches de l'ODROID-N2 avec résistances de pull-up, adresses listées par i2cdetect.

Objetivos

Conectar un sensor I2C clásico (por ejemplo, BME280 o BMP280, temperatura/humedad/presión) al ODROID-N2 y leer sus medidas en Python. El conector de 40 pines expone 2 buses I2C (especificaciones CNX); el RTC interno PCF8563 ya ocupa I2C3, lo que sirve como indicador de un bus funcional.

Material

Código completo

# 1. Activer I2C (Armbian : armbian-config > System > Hardware, ou overlays=
#    i2c0/i2c1 dans le config). 2. Scanner le bus :
sudo i2cdetect -y 0     # bus 0 — le RTC PCF8563 doit apparaître en 51
sudo i2cdetect -y 1     # bus 1 — le capteur doit apparaître en 76 ou 77
#!/usr/bin/env python3
"""bme280.py — lecture brute des registres température/pression (bus 1)."""
import smbus, time

BUS = smbus.SMBus(1); ADDR = 0x76
BUS.write_byte_data(ADDR, 0xD0, 0x00)          # soft reset
BUS.write_byte_data(ADDR, 0xF4, 0x27)          # capteur forcé, x16/x1
BUS.write_byte_data(ADDR, 0xF5, 0xA0)          # mode forcé

def read2(reg):
    l, h = BUS.read_i2c_block_data(ADDR, reg, 2)
    return (h << 8) | l

# Calibration (registres 0x88..0xA1, tronqué pour l'exemple)
t1 = read2(0x88); p1 = read2(0x8E)
while True:
    BUS.write_byte_data(ADDR, 0xF4, 0x27)
    time.sleep(0.1)
    adc_t = int.from_bytes(BUS.read_i2c_block_data(ADDR, 0xFA, 3), 'big') >> 6
    temp = adc_t / 5120.0 - 50.0               # approximation datasheet
    print(f"T ≈ {temp:5.1f} °C  (adc_t={adc_t}, t1={t1}, p1={p1})")
    time.sleep(2)

Verificación esperada

i2cdetect -y 1 muestra 76 (o 77) en lugar de puntos suspensivos. El script imprime una temperatura coherente con la habitación (15–30 °C) cada 2 s. i2cdetect -y 0 muestra 51: el RTC PCF8563 integrado, prueba de que el controlador I2C funciona.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales