🛠 Lire un capteur I2C (température/humidité)
Objetivos
Activar y utilizar el bus I2C del ODROID-M1 para leer un sensor ambiental. El device tree mainline rk3568-odroid-m1.dts (compatible « hardkernel,odroid-m1 », « rockchip,rk3568 ») activa i2c0 e i2c3; el controlador es el del RK3568B2.
Material
- ODROID-M1 con Armbian (kernel mainline o vendor 4.19)
- 1 sensor I2C clásico (BME280, BMP280, AHT20...) + 4 jumpers
- >
Código completo
# 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))
Verificación esperada
i2cdetect muestra la dirección del sensor; el script Python lee un ID de chip coherente (0x60 para un BME280) y conversiones ADC que varían cuando se calienta el sensor con el dedo.
Errores frecuentes
- Overlay I2C no activado: no aparece ningún /dev/i2c-*.
- Bus incorrecto: probar i2cdetect en cada número (0 y 3 según el overlay).
- Sensor alimentado a 5 V en un bus previsto para 3,3 V: verificar la tensión de las resistencias pull-up.
- SDA/SCL invertidos: i2cdetect no muestra nada, ningún componente responde.
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