Flipper Zero app that reads four I2C sensors on the GPIO header and shows them on an overview page plus one detail page per sensor.
| Sensor | Address | Measures |
|---|---|---|
| BME680 | 0x77 or 0x76 | temperature, humidity, pressure, gas resistance |
| SCD40 | 0x62 | CO2, temperature, humidity |
| SGP40 | 0x59 | VOC index (via Sensirion's algorithm) |
| VEML7700 | 0x10 | ambient light, auto-ranging |
All four sensors in parallel:
| Flipper pin | Signal |
|---|---|
| 9 | 3V3 |
| 8, 11 or 18 | GND |
| 15 (C1) | SDA |
| 16 (C0) | SCL |
pip install ufbt
ufbt update --index-url=https://up.momentum-fw.dev/firmware/directory.json
ufbt launch
ufbt launch builds, uploads over USB and starts the app. The app installs
under Apps > GPIO. Rebuild whenever the firmware is updated.
Left/Right (or Up/Down) change page. Back exits.
- Sensors are polled once a second. The BME680 is sampled every third second so its gas heater does not warm the chip.
- CO2 appears about 5 s after start and updates every 5 s.
- VOC shows a 46 s warm-up, then climbs toward 100 over a minute or two. 100 means "this room's recent average"; higher is more VOCs.
- The SGP40 is given the BME680's temperature and humidity, and the SCD40 is given the BME680's pressure. If the BME680 is missing, the SGP40 falls back to the SCD40's values, then to 25 C / 50 %.
- A sensor that stops answering shows "not found" and is retried every 5 s.
- Temperature follows the unit chosen in the Flipper's system settings.
- Debug output:
login the Flipper CLI, tagFlipperSense.
flipper_sense.c app loop, polling, UI
i2c_bus.c/.h external I2C bus wrapper
sensors/ one driver per sensor, plus Sensirion framing
vendor/ third-party code, unmodified
vendor/sensirion_gas_index/ is Sensirion's Gas Index Algorithm v3.2.0,
copyright (c) 2022 Sensirion AG, BSD 3-Clause. The licence text is at the top
of each file.
Licensed under the GNU Affero General Public License v3.0 or later. See LICENSE. The vendored Sensirion code keeps its own BSD 3-Clause licence, as noted above.