qwiic-bme280-reader.py

Xerxes Pi 2026 Carrier Board for Raspberry Pi CM4/CM5 Modules · File : qwiic-bme280-reader.py · Language : python · Use case : Lire les données environnementales (température, pression, humidité) via un capteur BME280 connecté aux ports Qwiic.

Raw reading of BME280 sensors via the I2C bus exposed by the Xerxes Pi's Qwiic connectors.

Enable the I2C bus via raspi-config. Connect a BME280 sensor to a Qwiic port. The script uses smbus2. Full conversion formulas are omitted for brevity; use the adafruit-bme280 library for precision.

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}")

← Back to the board