🛠 Lire un capteur I2C (température)
Objectifs
Activer et exploiter un bus I2C de l'ODROID-XU4 : le header 12 broches (à côté du header 30 broches) est décrit par la fiche technique comme apportant GPIO, I2S et I2C. Vous balayerez le bus avec i2cdetect puis lirez un petit capteur de température en Python.
Matériel
- ODROID-XU4 sous Armbian (kernel 6.6.x)
- Capteur I2C classique (TMP102, BMP280, etc.) — alimentation 3,3 V, jamais 5 V si le capteur ne le permet pas
sudo apt install i2c-tools python3-smbus
Code complet
# 1) Lister les bus puis balayer (adapter le numéro, p. ex. i2c-1)
i2cdetect -l
i2cdetect -y 1
#!/usr/bin/env python3
"""temp_i2c.py — lire un TMP102 (adresse 0x48) sur le XU4."""
import smbus, time
BUS, ADDR = 1, 0x48 # bus/adresse confirmes par i2cdetect
bus = smbus.SMBus(BUS)
while True:
msb, lsb = bus.read_i2c_block_data(ADDR, 0x00, 2)
raw = (msb << 8) | (lsb & 0xF0) # 12 bits, LSB = 0,0625 C
if raw >= 0x800: # complement a deux
raw -= 0x1000
print(f"Temperature : {raw * 0.0625:.2f} C")
time.sleep(2)
Vérification attendue
i2cdetect -y <bus> affiche l'adresse du capteur (0x48 pour un TMP102 par défaut). Le script affiche une température cohérente avec la pièce, qui monte quand on pince le capteur du doigt.
Erreurs fréquentes
- Câbler sur le mauvais header : l'I2C est sur le header 12 broches (GPIO, I2S, I2C), pas forcément là où vous avez branché la LED.
- Oublier les pull-up SDA/SCL : beaucoup de modules les embarquent, une platine maison sans pull-up ne répond jamais.
- Mauvais numéro de bus dans le script alors que i2cdetect marchait sur un autre.
- Alimentation 5 V sur un capteur 3,3 V only ; vérifier la datasheet du module.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash