Context
The current BME280 driver (src/sensors/BME280Driver.h) uses the RP2040's hardware I2C peripheral via Wire/Wire1. This has two limitations:
- GPIO constraints — Hardware I2C0/I2C1 only work on specific GPIO pairs (I2C0: 0/1, 4/5, 8/9, 12/13, 16/17, 20/21; I2C1: 2/3, 6/7, 10/11, 14/15, 18/19, 26/27). A PIO-based implementation would work on any GPIO 0-15, keeping the universal slot promise.
- Library dependency — Uses
<Wire.h> which pulls in the Arduino I2C stack. A custom PIO driver would be self-contained and potentially smaller.
Proposal
Implement a PIO-based I2C bit-bang driver for BME280 that:
- Works on any GPIO pair (not just hardware I2C pins)
- Follows the existing driver pattern (async state machine like DS18B20/DHT22)
- Uses the same compensation formulas already implemented
- Has no external library dependency
References
Acceptance
Context
The current BME280 driver (
src/sensors/BME280Driver.h) uses the RP2040's hardware I2C peripheral viaWire/Wire1. This has two limitations:<Wire.h>which pulls in the Arduino I2C stack. A custom PIO driver would be self-contained and potentially smaller.Proposal
Implement a PIO-based I2C bit-bang driver for BME280 that:
References
src/sensors/BME280Driver.hsrc/sensors/SensorHelpers.h(SensorFormat::forType())Acceptance
SIMUT_SENSOR_BME280=1<Wire.h>dependency