qwiic-bme280-reader.py
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}")