qwiic-bme280-reader.py

Placa base Xerxes Pi 2026 para módulos Raspberry Pi CM4/CM5 · Archivo : qwiic-bme280-reader.py · Lenguaje : python · Uso : Lire les données environnementales (température, pression, humidité) via un capteur BME280 connecté aux ports Qwiic.

Lectura en bruto de sensores BME280 a través del bus I2C expuesto por los conectores Qwiic de la Xerxes Pi.

Habilite el bus I2C mediante raspi-config. Conecte un sensor BME280 a un puerto Qwiic. El script utiliza smbus2. Las fórmulas de conversión completas se omiten por brevedad; use la biblioteca adafruit-bme280 para precisión.

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

← Volver a la ficha