🛠 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.

Objectifs

Mettre en œuvre l'I2C sur l'Orange Pi PC : activer le bus, balayer les adresses avec i2cdetect, puis lire un capteur de température/pression/humidité BME280 en Python. Vous découvrirez aussi que la carte possède déjà un périphérique I2C interne : le régulateur de tension CPU SY8106A, sur le bus R_I2C (bus secondaire) à l'adresse 0x65 — preuve que la pile I2C fonctionne même sans rien brancher.

Matériel

Code complet

  1. Activer I2C (armbian-config > Hardware > Overlays > i2c) et scanner :
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. Lecture Python (registre ID + données brutes simplifiées) :
#!/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

Pour des valeurs compensées exactes, installez la bibliothèque adafruit-circuitpython-bme280 (pip3).

Vérification attendue

i2cdetect affiche une grille avec 76 (ou 77) occupé. Le script imprime Chip ID : 0x52, puis 5 lignes de température. Sur le bus R_I2C interne, un scan dédié montrerait le régulateur SY8106A en 0x65.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels