🛠 Capteur BME280 (I2C) sur Le Potato : overlay et lecture
Objectifs
Activer l'I2C du connecteur 40 broches du Le Potato (désactivé par défaut) puis lire un capteur BME280 (température, humidité, pression) en Python.
Matériel
- Le Potato AML-S905X-CC sous Armbian mainline
- Module BME280 (adresse 0x76 par défaut, 0x77 si ADDR=1)
- Câblage 3,3 V / GND / SDA / SCL sur les broches I2C de l'en-tête (aucune broche 5 V)
sudo apt install i2c-tools python3-smbus
Code complet
# 1) Activer l'I2C : sudo armbian-config -> System > Options > HW interfaces
# (ou overlay dédié, cf. « How to Enable I2C on AML-S905X-CC » sur hub.libre.computer)
sudo reboot
sudo i2cdetect -y 0 # le bus peut être i2c-0 ou i2c-1 : ls /dev/i2c-*
#!/usr/bin/env python3
# bme280.py — lecture brute des registres (bus 0, adresse 0x76)
import smbus, time
bus = smbus.SMBus(0); ADDR = 0x76
bus.write_byte_data(ADDR, 0xD0, 0x00) # soft reset
reg = bus.read_byte_data(ADDR, 0xD0)
print("chip id:", hex(reg)) # attendu 0x60
bus.write_byte_data(ADDR, 0xF4, 0x27) # t+p oversampling x1
bus.write_byte_data(ADDR, 0xF5, 0x00) # mode forcé
def lire(reg): # 24 bits signé, format BME280
v = (bus.read_byte_data(ADDR, reg) << 12) | \
(bus.read_byte_data(ADDR, reg+1) << 4) | \
(bus.read_byte_data(ADDR, reg+2) >> 4)
return v - 16777216 if v > 8388607 else v
time.sleep(0.1)
print("temp brute:", lire(0xFA) / 100.0, "degres")
Vérification attendue
i2cdetect -y 0 affiche 0x76 ; le script imprime chip id: 0x60 et une température cohérente (le champ brut calibré suffit pour un test ; pour la précision, utilisez la bibliothèque bme280/adafruit-circuitpython-bme280 avec le bus passé explicitement).
Erreurs fréquentes
- Overlay I2C non activé : « Could not open device » — l'I2C n'est PAS actif par défaut sur cette carte.
- Mauvais numéro de bus : essayer
i2cdetect -y 1; CircuitPython exige le bus explicite. - Bus 5 V ou module 5 V tiré en 5 V : les broches n'acceptent que 3,3 V.
chip id: 0x00: câblage SDA/SCL inversés ou adresse 0x77.
Autres tutoriels pour cette carte
- Faire clignoter une LED en C avec libgpiod sur Le Potato
- Lire un bouton poussoir avec libgpiod (pull-up interne)
- GPIO en Python avec python3-libgpiod sur Le Potato
- Fondu LED progressif avec PWM sous sysfs (meson)
- Console série (ttyAML0) et SSH sur Le Potato
- Boot SD/eMMC et récupération (pyamlboot) sur Amlogic S905X
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash