🛠 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.

Objectifs

Connecter un capteur I2C classique (par ex. BME280 ou BMP280, température/humidité/pression) sur l'ODROID-N2 et lire ses mesures en Python. Le connecteur 40 broches expose 2 bus I2C (spécifications CNX) ; le RTC interne PCF8563 occupe déjà I2C3, ce qui sert de témoin de bus fonctionnel.

Matériel

Code complet

# 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)

Vérification attendue

i2cdetect -y 1 affiche 76 (ou 77) à la place du pointillés. Le script imprime une température cohérente avec la pièce (15–30 °C) toutes les 2 s. i2cdetect -y 0 montre 51 : le RTC PCF8563 embarqué, preuve que le contrôleur I2C fonctionne.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels