🛠 Lire un capteur I2C (Weather Board Zero)
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
- ODROID-C4 sous Armbian current (kernel 6.6)
- Weather Board Zero (ou tout capteur BME-class en module I2C) — connecteur 40 broches, logique 3,3 V
sudo apt install -y i2c-tools python3-smbus device-tree-compiler- >
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
OSError: [Errno 121] Remote I/O Error: mauvaise adresse ou bus — relire la sortie dei2cdetect, tester-y 1.- Aucun bus listé : l'overlay
i2c0n'est pas activé dans/boot/armbianEnv.txtou la machine n'a pas redémarré. - Vouloir lire les ADC du connecteur en même temps : les entrées ADC sont limitées à 1,8 V maximum, pas 3,3 V !
- Emboîter la Weather Board à chaud : éteindre l'alimentation avant de brancher un module sur le connecteur 40 broches.
- >
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash