# \*\*BMV080 readSensor() returns 0 indefinitely after brief working period — dedicated I2C bus, ESP32-WROOM\*\*

**URL:** <https://community.sparkfun.com/t/bmv080-readsensor-returns-0-indefinitely-after-brief-working-period-dedicated-i2c-bus-esp32-wroom/68235>\
**Category:** Sensors\
**Created:** [March 5, 2026, 12:27am UTC](https://community.sparkfun.com/t/bmv080-readsensor-returns-0-indefinitely-after-brief-working-period-dedicated-i2c-bus-esp32-wroom/68235 "2026-03-05T00:27:59Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![rh54321](https://avatars.discourse-cdn.com/v4/letter/r/e99b99/32.png) [@rh54321](https://community.sparkfun.com/u/rh54321)\
**Post date:** [March 5, 2026, 12:27am UTC](https://community.sparkfun.com/t/bmv080-readsensor-returns-0-indefinitely-after-brief-working-period-dedicated-i2c-bus-esp32-wroom/68235/1 "2026-03-05T00:27:59Z")

</div>

Hi all — posting a detailed report hoping someone has seen this behavior before.

**Setup:**

- SparkFun BMV080 breakout (I2C pull-up jumper cut)
- ESP32-WROOM
- BMV080 on its own dedicated I2C bus (Wire1, SDA=14, SCL=15) — no other sensors sharing the bus
- Runs on a dedicated FreeRTOS task pinned to Core 1
- SparkFun BMV080 library v1.0.4, Bosch SDK v11.2.0
- Local decoupling caps (100nF + 10µF) added directly at sensor VCC/GND
- I2C clock: 100kHz, timeout: 50ms

**Behavior:**  
The sensor initializes successfully every time (`begin()` OK, `init()` OK on first attempt). It then produces valid frames for a short period — we see `readSensor()` returning 1 with real PM values. Then, without any obvious trigger, `readSensor()` starts returning 0 indefinitely.

Key observations:

- FreeRTOS task heartbeat keeps incrementing throughout — task is alive, not deadlocked
- I2C bus shows no errors, no hangs
- `begin()` + `init()` succeeds again after bus recovery, but `readSensor()` continues returning 0 immediately after reinit
- This happens in clean air at rest — not just during high-particulate events
- During dense aerosol exposure (cooking smoke) the dropout happens faster and more reliably, but it also occurs spontaneously in clean air after 2-5 minutes
- Once in this state, only a full power cycle (not software reinit) reliably restores normal operation

**What we’ve tried:**

- Cutting I2C pull-up jumper on SparkFun board
- Dedicated I2C bus with no other devices
- Local decoupling capacitors
- `setDoObstructionDetection(false)` and `true` — both exhibit the same dropout behavior
- Full `begin()` + `init()` reinit sequence — init reports success but readSensor() still returns 0
- I2C bus clock-out recovery (toggling SCL 16 times + STOP condition + Wire1.begin()) before reinit
- Reducing I2C clock to 50kHz

**Questions:**

1. Has anyone encountered this and found a reliable solution?
2. Is spontaneous cessation of frame output (`readSensor()=0` in a loop) with successful `init()` a known failure mode? What typically causes it?
3. Is there an internal sensor state or protection mode that can activate in clean air conditions, and if so is there a reset sequence beyond `begin()` + `init()` that reliably clears it?
4. Does the BMV080 have any hardware reset pin or power-cycle requirement that the SparkFun breakout exposes?
5. Are there known issues with the BMV080 in environments with airflow turbulence, fan vibration, or PWM noise on the power rail?

Any insight appreciated — this sensor has been the hardest part of an otherwise solid prototype build.

---

<div class="post-metadata">

**Author:** ![TS-Russell](https://yyz1.discourse-cdn.com/sparkfun/user_avatar/community.sparkfun.com/ts-russell/32/6092_2.png) [@TS-Russell](https://community.sparkfun.com/u/TS-Russell)\
**Post date:** [March 5, 2026, 6:36am UTC](https://community.sparkfun.com/t/bmv080-readsensor-returns-0-indefinitely-after-brief-working-period-dedicated-i2c-bus-esp32-wroom/68235/2 "2026-03-05T06:36:04Z")

</div>

Before delving into the FreeRTOS: Does the default arduino sketch here work? [Setting Up Arduino - SparkFun Air Quality PM1/PM2.5/PM10 Sensor - BMV080 (Qwiic) Hookup Guide](https://docs.sparkfun.com/SparkFun_Particulate_Matter_Sensor_Breakout_BMV080/setting_up_arduino/) (setup)

Sketch [1 — Basic Readings - SparkFun Air Quality PM1/PM2.5/PM10 Sensor - BMV080 (Qwiic) Hookup Guide](https://docs.sparkfun.com/SparkFun_Particulate_Matter_Sensor_Breakout_BMV080/ex1_basic_readings/)

---

<div class="post-metadata">

**Author:** ![John\_Myers](https://yyz1.discourse-cdn.com/sparkfun/user_avatar/community.sparkfun.com/john_myers/32/12510_2.png) [@John\_Myers](https://community.sparkfun.com/u/John_Myers)\
**Post date:** [April 23, 2026, 4:56pm UTC](https://community.sparkfun.com/t/bmv080-readsensor-returns-0-indefinitely-after-brief-working-period-dedicated-i2c-bus-esp32-wroom/68235/3 "2026-04-23T16:56:02Z")

</div>

I’m having the same issue, using a Pi 5. Did you ever figure out what was causing this?

---

<div class="post-metadata">

**Author:** ![TS-Russell](https://yyz1.discourse-cdn.com/sparkfun/user_avatar/community.sparkfun.com/ts-russell/32/6092_2.png) [@TS-Russell](https://community.sparkfun.com/u/TS-Russell)\
**Post date:** [April 23, 2026, 6:27pm UTC](https://community.sparkfun.com/t/bmv080-readsensor-returns-0-indefinitely-after-brief-working-period-dedicated-i2c-bus-esp32-wroom/68235/4 "2026-04-23T18:27:49Z")

</div>

Is anything showing on i2cdetect after? How long are the wires? How long until does it work until it fails?

---

<div class="post-metadata">

**Author:** ![John\_Myers](https://yyz1.discourse-cdn.com/sparkfun/user_avatar/community.sparkfun.com/john_myers/32/12510_2.png) [@John\_Myers](https://community.sparkfun.com/u/John_Myers)\
**Post date:** [May 5, 2026, 12:57pm UTC](https://community.sparkfun.com/t/bmv080-readsensor-returns-0-indefinitely-after-brief-working-period-dedicated-i2c-bus-esp32-wroom/68235/5 "2026-05-05T12:57:31Z")

</div>

It’s the only thing connected (via the sparkfun i2c connector with dupont connectors on the other end), I’ve tried two pis. This is my second BMV080 unit, the previous one was working fine for a week or so then started pulling 1 amp. I assumed I’d damaged that one in some way cutting the pull up pad so I bought another, which I can’t get to work.

---

<div class="post-metadata">

**Author:** ![TS-Russell](https://yyz1.discourse-cdn.com/sparkfun/user_avatar/community.sparkfun.com/ts-russell/32/6092_2.png) [@TS-Russell](https://community.sparkfun.com/u/TS-Russell)\
**Post date:** [May 5, 2026, 9:04pm UTC](https://community.sparkfun.com/t/bmv080-readsensor-returns-0-indefinitely-after-brief-working-period-dedicated-i2c-bus-esp32-wroom/68235/6 "2026-05-05T21:04:14Z")

</div>

Can you share a photo of the wiring? The dupont side in particular and a peek any modifications made to the BMV
