qwiic-bme280-reader.py

Carte porteuse Xerxes Pi 2026 pour modules Raspberry Pi CM4/CM5 · Fichier : qwiic-bme280-reader.py · Langage : python · Usage : Lire les données environnementales (température, pression, humidité) via un capteur BME280 connecté aux ports Qwiic.

Lecture brute des capteurs BME280 via le bus I2C exposé par les connecteurs Qwiic de la Xerxes Pi.

Activez le bus I2C via raspi-config. Connectez un capteur BME280 à un port Qwiic. Le script utilise smbus2. Les formules de conversion complètes sont omises pour la concision, utilisez la bibliothèque adafruit-bme280 pour la précision.

qwiic-bme280-reader.py

#!/usr/bin/env python3
import smbus2
import time

# Adresse I2C par défaut du BME280
BME280_ADDR = 0x76

# Registres
REG_CALIB_00 = 0x88
REG_CTRL_HUM = 0xF2
REG_CTRL_MEAS = 0xF4
REG_STATUS = 0xF3
REG_PRESS = 0xF7
REG_TEMP = 0xFA
REG_HUM = 0xFD

def read_calibration(bus):
    cal = {}
    cal['dig_T1'] = bus.read_word_data(BME280_ADDR, 0x88)
    cal['dig_T2'] = bus.read_s16_data(BME280_ADDR, 0x8A)
    cal['dig_T3'] = bus.read_s16_data(BME280_ADDR, 0x8C)
    cal['dig_P1'] = bus.read_word_data(BME280_ADDR, 0x8E)
    cal['dig_P2'] = bus.read_s16_data(BME280_ADDR, 0x90)
    cal['dig_P3'] = bus.read_s16_data(BME280_ADDR, 0x92)
    cal['dig_P4'] = bus.read_s16_data(BME280_ADDR, 0x94)
    cal['dig_P5'] = bus.read_s16_data(BME280_ADDR, 0x96)
    cal['dig_P6'] = bus.read_s16_data(BME280_ADDR, 0x98)
    cal['dig_P7'] = bus.read_s16_data(BME280_ADDR, 0x9A)
    cal['dig_P8'] = bus.read_s16_data(BME280_ADDR, 0x9C)
    cal['dig_P9'] = bus.read_s16_data(BME280_ADDR, 0x9E)
    cal['dig_H1'] = bus.read_byte_data(BME280_ADDR, 0xA1)
    cal['dig_H2'] = bus.read_s16_data(BME280_ADDR, 0xE1)
    cal['dig_H3'] = bus.read_byte_data(BME280_ADDR, 0xE3)
    cal['dig_H4'] = bus.read_s8_data(BME280_ADDR, 0xE4)
    cal['dig_H5'] = bus.read_s8_data(BME280_ADDR, 0xE5)
    cal['dig_H6'] = bus.read_s8_data(BME280_ADDR, 0xE7)
    return cal

def read_sensor(bus, cal):
    # Lecture brute
    p_raw = (bus.read_byte_data(BME280_ADDR, REG_PRESS) << 12) | (bus.read_byte_data(BME280_ADDR, REG_PRESS+1) << 4) | (bus.read_byte_data(BME280_ADDR, REG_PRESS+2) >> 4)
    t_raw = (bus.read_byte_data(BME280_ADDR, REG_TEMP) << 12) | (bus.read_byte_data(BME280_ADDR, REG_TEMP+1) << 4) | (bus.read_byte_data(BME280_ADDR, REG_TEMP+2) >> 4)
    h_raw = (bus.read_byte_data(BME280_ADDR, REG_HUM) << 8) | bus.read_byte_data(BME280_ADDR, REG_HUM+1)
    
    # Conversion simplifiée (référez-vous à la datasheet pour la formule complète)
    # Ici, nous affichons les bruts pour la démonstration
    return t_raw, p_raw, h_raw

try:
    bus = smbus2.SMBus(1) # Bus I2C de la Xerxes Pi
    cal = read_calibration(bus)
    print("Calibration lue.")
    
    while True:
        t, p, h = read_sensor(bus, cal)
        print(f"Temp Raw: {t} | Press Raw: {p} | Hum Raw: {h}")
        time.sleep(1)
except Exception as e:
    print(f"Erreur: {e}")

← Retour à la fiche