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

Objectifs

Activer le bus I2C de l'ODROID-C4 sous Armbian mainline et lire un capteur environnemental de type BME680 (Weather Board Zero Hardkernel, ~2 $) : détection d'adresse avec i2cdetect, lecture de registres en Python via smbus, et activation déclarative des overlays dans armbianEnv.txt.

Matériel

Code complet

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

Vérification attendue

i2cdetect -y 0 affiche une grille avec une case non vide à 0x76 ou 0x77. Le script Python imprime toutes les 2 secondes une ligne de température et le CHIP_ID 0x61 ; Ctrl+C l'arrête proprement. La valeur brute est approximative (démonstration sans table de calibration BME680) mais doit bouger quand vous réchauffez le capteur du doigt.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels