BME680
Bosch BME680 temperature / pressure / humidity sensor (gas channel not modelled).
Live catalog
Prefer labwired_describe with the catalog id over guessing pins or addresses.
Status at a glance
| Aspect | Status |
|---|---|
| Catalog id | bme680 |
| Bus | I²C |
| Address | 0x76 (SDO low); 0x77 (SDO high) |
| Source | configs/devices/bme680.yaml (declarative, no Rust model) |
| Datasheet | Bosch BST-BME680-DS001 §5.2 memory map (Table 20); calibration layout and integer compensation from Bosch BME68x_SensorAPI bme68x.c |
| Tier | smoke-proven (register-level tests: crates/core/tests/everyday_sensor_set.rs) |
Pins / attachment
| Pin / net | Role |
|---|---|
| SDA | I²C SDA |
| SCL | I²C SCL |
| VDD/GND | Power (digital twin) |
Support matrix
| Behavior | Status | Notes |
|---|---|---|
| CHIP_ID 0xD0 = 0x61, VARIANT_ID 0xF0 = 0x00 | ✅ | |
| Calibration block (0x8A / 0xE1 / 0x00) | ✅ | One plausible unit; see the YAML header |
| T / P / H ADC words | ✅ | Exact inverse of Bosch's integer compensation: T exact, P ≤ 1 Pa, H ≤ 3 milli-%RH, 300–1100 hPa at −40…85 °C |
| Forced mode + new_data_0 | ✅ | new_data_0 7256 µs after mode = 01 (Bosch's shortest-cycle duration); mode returns to sleep |
| Soft reset (0xE0 ← 0xB6) | ✅ | Control registers restored |
| Gas resistance | ❌ | gas_r reads 0 with gas_valid_r / heat_stab_r clear; heater registers are storage |
| Oversampling / IIR filter / noise | ❌ | Readings are the stimulus, exact |
| Analog / power | ❌ | Bench |
Stimulus
Host inputs: temperature (°C), pressure (hPa), humidity (%RH).
How to run
- Place the part and an MCU in Playground, or add it to a system YAML:
- Agent:
labwired_list→labwired_describe id=bme680→ wire →labwired_validate→labwired_run/labwired_verify. - Register-level smoke:
cargo test -p labwired-core --test everyday_sensor_set— CHIP_ID 0x61; Bosch init + forced cycle compensates to 25.00 °C / 101325 Pa / 50.000 %RH (±2 milli-%); 480-point sweep against a line-for-line port of Bosch's integer code. The same file's negative control proves the check fails against a part that answers only 0x00 or only 0xFF.
Limitations
- The gas channel is not modelled — a driver that checks gas_valid reports no gas reading.
- The float build of the Bosch API uses different formulas and lands within its own rounding.
See the YAML header for the full datasheet trace and every named approximation.