🛠 Lire un capteur I2C (température/pression)
Objectifs
Activer le bus I2C de l'ODROID-C2 (le contrôleur i2c_A est présent et nommé « I2C A SDA/SCK » sur le connecteur J2 dans la DTS mainline meson-gxbb-odroidc2), détecter un capteur avec i2cdetect, puis lire température et pression en Python.
Matériel
- ODROID-C2 sous Armbian/mainline
- Capteur I2C 3,3 V (BME280 ou BMP280), modules à pull-up intégrés
- Câblage SDA/SCL vers les broches I2C A du connecteur J2 + 3,3 V + GND (jamais 5 V sur I2C)
- Paquets i2c-tools et python3-smbus
- >
Code complet
# 1) activer I2C (armbian-config > overlays > i2c) puis :
sudo i2cdetect -y 1 # le bus I2C A ; lister d'abord : ls /dev/i2c-*
#!/usr/bin/env python3
"""bme280.py — lecture brute registre temperature (python3-smbus)."""
import smbus, time
BUS = smbus.SMBus(1) # /dev/i2c-1 — ajuster selon i2cdetect
ADDR = 0x76 # 0x77 si PSB lié à VDD
# configuration capteur BMP280/BME280 (mode force)
BUS.write_byte_data(ADDR, 0xF4, 0x2E)
time.sleep(0.1)
msb = BUS.read_byte_data(ADDR, 0xFA) # press_msb — enchaîne LSB/XLSB
lsb = BUS.read_byte_data(ADDR, 0xFB)
xlsb = BUS.read_byte_data(ADDR, 0xFC)
t_raw = ((msb << 12) | (lsb << 4) | (xlsb >> 4))
temp_c = (t_raw / 100.0) - 50.0 # approximation lineaire simplifiee
print(f"registre brut temperature: {t_raw} (~{temp_c:.1f} C)")
Vérification attendue
i2cdetect affiche l'adresse du capteur (76 ou 77) sur le bus. Le script imprime une valeur plausible ; pour une lecture physique exacte, utiliser la bibliothèque calibrée (adafruit-bme280 ou le driver noyau /sys/bus/iio/devices) plutôt que l'approximation brute.
Erreurs fréquentes
- Bus erroné : le numéro I2C A n'est pas toujours /dev/i2c-1 ; vérifier avec ls /dev/i2c-* et i2cdetect -l.
- Pull-up manquants : sans résistances vers 3,3 V (beaucoup de modules les ont), le bus ne monte jamais.
- Alimenter le capteur en 5 V puis câbler SDA/SCL vers la carte : risque sur les broches 3,3 V si le module n'est pas level-shifted.
- Adresse 0x76/0x77 inversée selon la broche SDO.
- Overlay I2C non activé : /dev/i2c-* absent au départ sur Armbian.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash