🛠 Lire un capteur I2C (température)
Objetivos
Activar y utilizar un bus I2C del ODROID-XU4: el conector de 12 pines (junto al conector de 30 pines) se describe en la ficha técnica como proveedor de GPIO, I2S e I2C. Escanearás el bus con i2cdetect y luego leerás un pequeño sensor de temperatura en Python.
Material
- ODROID-XU4 con Armbian (kernel 6.6.x)
- Sensor I2C clásico (TMP102, BMP280, etc.) — alimentación de 3,3 V, nunca 5 V si el sensor no lo permite
sudo apt install i2c-tools python3-smbus
Código completo
# 1) Lister les bus puis balayer (adapter le numero, 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)
Verificación esperada
i2cdetect -y <bus> muestra la dirección del sensor (0x48 para un TMP102 por defecto). El script muestra una temperatura coherente con la del ambiente, que sube cuando pellizcas el sensor con el dedo.
Errores frecuentes
- Cablear en el conector equivocado: el I2C está en el conector de 12 pines (GPIO, I2S, I2C), no necesariamente donde conectaste el LED.
- Olvidar las resistencias de pull-up SDA/SCL: muchos módulos las incluyen, una placa casera sin pull-up nunca responde.
- Número de bus incorrecto en el script cuando i2cdetect funcionaba en otro.
- Alimentación de 5 V en un sensor de solo 3,3 V; verifica la hoja de datos del módulo.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash