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