🛠 Lire un capteur I2C (BME280) sur le bus

Orange Pi PC (Allwinner H3) · intermediaire · Schéma : IMG-orangepi-pc-intermediaire-2-opipc-i2c-capteur.svg — Capteur BME280 relié aux lignes SDA/SCL du connecteur 40 broches de l'Orange Pi PC en 3.3 V, adresses I2C balayées par i2cdetect, température et pression remontées dans un terminal.

Objetivos

Implementar I2C en la Orange Pi PC: activar el bus, escanear las direcciones con i2cdetect y luego leer un sensor de temperatura/presión/humedad BME280 en Python. También descubrirá que la placa ya posee un dispositivo I2C interno: el regulador de voltaje de la CPU SY8106A, en el bus R_I2C (bus secundario) en la dirección 0x65 — prueba de que la pila I2C funciona incluso sin conectar nada.

Material

Código completo

  1. Activar I2C (armbian-config > Hardware > Overlays > i2c) y escanear:
sudo sed -i 's/^overlays=.*/& i2c0/' /boot/armbianEnv.txt && sudo reboot
i2cdetect -l                 # lister les bus
i2cdetect -y 0               # balayer le bus 0 : le BME280 répond 0x76 ou 0x77
  1. Lectura en Python (registro ID + datos brutos simplificados):
#!/usr/bin/env python3
"""bme280_lut.py — lecture bas niveau d'un BME280 sur Orange Pi PC."""
import smbus, time

BUS, ADDR = smbus.SMBus(0), 0x76     # 0x77 si ADDR du module câblé à VCC

def main -> None:
    chip_id = BUS.read_byte_data(ADDR, 0xD0)
    print(f"Chip ID : 0x{chip_id:02X} (attendu 0x52)")
    # Configuration forcée en mode capteur (datasheet BME280, registre 0xF4)
    BUS.write_byte_data(ADDR, 0xF4, 0x27)   # x1/x1 oversampling, mode normal
    time.sleep(0.1)
    for _ in range(5):
        # Température brute (registres 0xFA-0xFC) — conversion simplifiée
        msb, mid, lsb = BUS.read_i2c_block_data(ADDR, 0xFA, 3)
        adc_t = (msb << 12) | (mid << 4) | (lsb >> 4)
        t_c = (adc_t / 16384.0 - 50.0)       # approximation linéaire, hors compensation
        print(f"ADC temp : {adc_t:6d}  ->  ~{t_c:5.1f} °C (non compensé)")
        time.sleep(1)

if __name__ == "__main__":
    main

Para obtener valores compensados exactos, instale la biblioteca adafruit-circuitpython-bme280 (pip3).

Verificación esperada

i2cdetect muestra una cuadrícula con 76 (o 77) ocupado. El script imprime Chip ID: 0x52, seguido de 5 líneas de temperatura. En el bus R_I2C interno, un escaneo dedicado mostraría el regulador SY8106A en 0x65.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales