<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/air-particle-measurement-mspo7ckpr" -->

---
title: Air Particle Measurement | daily.dev
description: A DIY air quality sensor build using a Plantower PMS7003, Bosch BME680, and CCS811 sensors connected to an Olimex ESP32-PoE board with wired Ethernet. The...
canonical: https://daily.dev/posts/air-particle-measurement-mspo7ckpr
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Air Particle Measurement | daily.dev
og:description: A DIY air quality sensor build using a Plantower PMS7003, Bosch BME680, and CCS811 sensors connected to an Olimex ESP32-PoE board with wired Ethernet. The...
og:url: https://daily.dev/posts/air-particle-measurement-mspo7ckpr
og:image: https://api.daily.dev/og/posts/msPO7cKPr.png
og:image:alt: Air Particle Measurement
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Air Particle Measurement

**[apalrd's adventures](https://daily.dev/sources/apalrd)** · 4 min read · 0 upvotes · 0 comments

## Summary

A DIY air quality sensor build using a Plantower PMS7003, Bosch BME680, and CCS811 sensors connected to an Olimex ESP32-PoE board with wired Ethernet. The project covers hardware assembly challenges (fragile PMS7003 connector pins), software development using Arduino IDE with Adafruit libraries, and MQTT data publishing. Notable issues include the BME680 binary-only Bosch library failing to persist calibration data across resets, and the PMS7003 wired connections eventually failing. The author reflects on Arduino's limitations for ESP32 projects and plans to move away from it.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.apalrd.net/projects/2020/air_quality_sensor>

## Questions this post answers

### What are the limitations of using the Bosch BME680 library on ESP32 with Arduino?

The official Bosch BME680 library, required for eCO2 measurement, is distributed in binary-only form. The ESP32 version requires persisting a binary blob of calibration data between resets, which the library uses to learn individual sensor calibration. If that storage is not correctly implemented, the library continuously reports an eCO2 error, though temperature and humidity readings still work.

_Developers working with BME680 on ESP32 share workarounds and alternatives on daily.dev._

### Does the ESP32 have a built-in Ethernet MAC and what hardware do I need for wired Ethernet?

The ESP32 has a native Ethernet MAC built-in but requires an external PHY chip to connect to a physical network. Development boards that include a PHY are uncommon; the Olimex ESP32-PoE is one example that provides wired Ethernet plus Power-over-Ethernet support, making it suitable for permanent installations where WiFi is not ideal.

_Those choosing between WiFi and wired Ethernet for permanent ESP32 deployments discuss trade-offs on daily.dev._

## Similar posts on daily.dev

- [DIY ESP32-P4 weather station & air quality monitor connects to LoRa and ESP-NOW sensors, various weather APIs](https://daily.dev/posts/diy-esp32-p4-weather-station-air-quality-monitor-connects-to-lora-and-esp-now-sensors-various-wea-fyniccq3k) · CNX Software · 0 upvotes · 0 comments
- [My first ESP32 sensor solved a real problem, and now I'm building new projects every week](https://daily.dev/posts/my-first-esp32-sensor-solved-a-real-problem-and-now-i-m-building-new-projects-every-week-xg2qcsehh) · XDA Developers · 0 upvotes · 0 comments
- [A Smarter DIY Air Filter](https://daily.dev/posts/a-smarter-diy-air-filter-alxbfvg10) · Hackaday · 0 upvotes · 0 comments
- [You, too, can make this ESP32 air quality detector that works with Home Assistant](https://daily.dev/posts/you-too-can-make-this-esp32-air-quality-detector-that-works-with-home-assistant-s2y4gsbwo) · XDA Developers · 1 upvotes · 0 comments
- [Designing and assembling my first PCB](https://daily.dev/posts/designing-and-assembling-my-first-pcb-whkdji57r) · Hacker News · 0 upvotes · 0 comments

---

Tags: [#backend](https://daily.dev/tags/backend), [#iot](https://daily.dev/tags/iot), [#embedded](https://daily.dev/tags/embedded)

[View this post on daily.dev](https://daily.dev/posts/air-particle-measurement-mspo7ckpr)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Air Particle Measurement","url":"https://daily.dev/posts/air-particle-measurement-mspo7ckpr","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/air-particle-measurement-mspo7ckpr"},"datePublished":"2026-08-11T08:56:33.848Z","dateModified":"2026-08-11T09:32:41.528Z","description":"A DIY air quality sensor build using a Plantower PMS7003, Bosch BME680, and CCS811 sensors connected to an Olimex ESP32-PoE board with wired Ethernet. The...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/c8a9696dcb22176e2e82f577678fd81c?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/c8a9696dcb22176e2e82f577678fd81c?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"apalrd's adventures","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"apalrd's adventures","logo":"https://media.daily.dev/image/upload/s--4zkx8dRj--/f_auto,q_auto/v1786438309/logos/apalrd?_a=BAMAMicg0","url":"https://daily.dev/sources/apalrd"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/air-particle-measurement-mspo7ckpr","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"backend,iot,embedded","timeRequired":"PT4M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"apalrd's adventures","item":"https://daily.dev/sources/apalrd"},{"@type":"ListItem","position":3,"name":"Air Particle Measurement"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/air-particle-measurement-mspo7ckpr#faq","mainEntity":[{"@type":"Question","name":"What are the limitations of using the Bosch BME680 library on ESP32 with Arduino?","acceptedAnswer":{"@type":"Answer","text":"The official Bosch BME680 library, required for eCO2 measurement, is distributed in binary-only form. The ESP32 version requires persisting a binary blob of calibration data between resets, which the library uses to learn individual sensor calibration. If that storage is not correctly implemented, the library continuously reports an eCO2 error, though temperature and humidity readings still work. Developers working with BME680 on ESP32 share workarounds and alternatives on daily.dev."}},{"@type":"Question","name":"Does the ESP32 have a built-in Ethernet MAC and what hardware do I need for wired Ethernet?","acceptedAnswer":{"@type":"Answer","text":"The ESP32 has a native Ethernet MAC built-in but requires an external PHY chip to connect to a physical network. Development boards that include a PHY are uncommon; the Olimex ESP32-PoE is one example that provides wired Ethernet plus Power-over-Ethernet support, making it suitable for permanent installations where WiFi is not ideal. Those choosing between WiFi and wired Ethernet for permanent ESP32 deployments discuss trade-offs on daily.dev."}}]}
```

