🛠 Lire un capteur I2C (température/humidité)
Objectifs
Activer et utiliser le bus I2C de l'ODROID-M1 pour lire un capteur environnemental. Le device tree mainline rk3568-odroid-m1.dts (compatible « hardkernel,odroid-m1 », « rockchip,rk3568 ») active i2c0 et i2c3 ; le contrôleur est celui du RK3568B2.
Matériel
- ODROID-M1 sous Armbian (noyau mainline ou vendor 4.19)
- 1 capteur I2C classique (BME280, BMP280, AHT20...) + 4 jumpers
- >
Code complet
# Activer l'overlay I2C (Armbian) : éditer /boot/armbianEnv.txt
# overlays=i2c3
sudo reboot
# Inventaire des contrôleurs et détection du capteur
ls /dev/i2c-*
sudo apt-get install -y i2c-tools
sudo i2cdetect -y 3 # le capteur apparaît p. ex. à l'adresse 0x76
#!/usr/bin/env python3
"""Lecture brute d'un registre de capteur via /dev/i2c-N (smbus)."""
import smbus
bus = smbus.SMBus(3) # /dev/i2c-3
ADDR = 0x76 # adresse révélée par i2cdetect
who = bus.read_byte_data(ADDR, 0xD0) # ID puce BME280 : 0x60
print(f"Chip ID : 0x{who:02x}")
msb, lsb, xlsb = (bus.read_byte_data(ADDR, 0xFA + i) for i in range(3))
print("ADC brut température :", (msb << 12) | (lsb << 4) | (xlsb >> 4))
Vérification attendue
i2cdetect affiche l'adresse du capteur ; le script Python lit un ID de puce cohérent (0x60 pour un BME280) et des conversions ADC qui varient quand on réchauffe le capteur au doigt.
Erreurs fréquentes
- Overlay I2C non activé : aucun /dev/i2c-* n'apparaît.
- Mauvais bus : essayer i2cdetect sur chaque numéro (0 et 3 selon l'overlay).
- Capteur alimenté en 5 V sur un bus prévu en 3,3 V : vérifier la tension des pull-up.
- SDA/SCL inversés : i2cdetect ne montre rien, aucun composant ne répond.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash