🛠 Lire un capteur I2C (température/pression)
Objetivos
Activar el bus I2C del ODROID-C2 (el controlador i2c_A está presente y se denomina « I2C A SDA/SCK » en el conector J2 del DTS mainline meson-gxbb-odroidc2), detectar un sensor con i2cdetect y luego leer la temperatura y la presión en Python.
Material
- ODROID-C2 con Armbian/mainline
- Sensor I2C de 3,3 V (BME280 o BMP280), módulos con pull-ups integrados
- Cableado SDA/SCL hacia los pines I2C A del conector J2 + 3,3 V + GND (nunca 5 V en I2C)
- Paquetes i2c-tools y python3-smbus
- >
Código completo
# 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)")
Verificación esperada
i2cdetect muestra la dirección del sensor (76 o 77) en el bus. El script imprime un valor plausible; para una lectura física exacta, utilizar la biblioteca calibrada (adafruit-bme280 o el driver del kernel /sys/bus/iio/devices) en lugar de la aproximación bruta.
Errores frecuentes
- Bus incorrecto: el número de I2C A no siempre es /dev/i2c-1; verificar con ls /dev/i2c-* e i2cdetect -l.
- Pull-ups ausentes: sin resistencias hacia 3,3 V (muchos módulos las tienen), el bus nunca sube.
- Alimentar el sensor con 5 V y luego cablear SDA/SCL hacia la placa: riesgo para los pines de 3,3 V si el módulo no tiene shift de nivel.
- Dirección 0x76/0x77 invertida según el pin SDO.
- Overlay I2C no activado: /dev/i2c-* ausente inicialmente en Armbian.
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