// Bosch BME280 driver (temperature / humidity / pressure) over I2C. // // Implements the sensor_driver_t interface (see sensor_driver.h) so the // registry can init/read it generically. Register map and compensation // formulas are transcribed from Bosch's public BME280 datasheet (Rev 1.23, // section 4.2.3 "Compensation formulas", double-precision reference // implementation) — publicly documented, well-trodden territory, not // guesswork. What IS unverified: this has never talked to a real BME280 — // see README.md's honesty-policy section. // // Default wiring (override via `idf.py menuconfig` or by editing the pin // macros below before building) — see README.md's wiring section for the // full pinout table: // BME280 SDA -> GPIO8 (BME280_I2C_SDA_GPIO) // BME280 SCL -> GPIO9 (BME280_I2C_SCL_GPIO) // BME280 VCC -> 3V3, GND -> GND // BME280 CSB -> VCC (selects I2C mode, not SPI) // BME280 SDO -> GND selects address 0x76 (default assumed here); tie SDO // to VCC instead for address 0x77 and change // BME280_I2C_ADDR accordingly. #pragma once #include "esp_err.h" #include "sensor_driver.h" #ifdef __cplusplus extern "C" { #endif #ifndef BME280_I2C_PORT #define BME280_I2C_PORT 0 #endif #ifndef BME280_I2C_SDA_GPIO #define BME280_I2C_SDA_GPIO 8 #endif #ifndef BME280_I2C_SCL_GPIO #define BME280_I2C_SCL_GPIO 9 #endif #ifndef BME280_I2C_ADDR #define BME280_I2C_ADDR 0x76 // 0x77 if SDO is tied to VCC instead of GND #endif #ifndef BME280_I2C_CLK_HZ #define BME280_I2C_CLK_HZ 100000 // 100kHz standard mode; BME280 supports up to 3.4MHz #endif // sensor_driver_t-compatible entry points. esp_err_t bme280_init(void); esp_err_t bme280_read(sensor_reading_t *out, size_t max_out, size_t *out_count); #ifdef __cplusplus } #endif