6180

A touchscreen CO₂, PM 2.5 dust (particulate matter) monitor. Adaptive histogram function covers up to a day of data per sensor.

A touchscreen CO₂, particulate and comfort monitor, adapted from an ESP32-S3 design onto a plain ESP32 DevKit. Three sensors, two buses, no buttons anywhere on it. Most of the work turned out to be neither the wiring nor the drivers, but what a small screen should say when a sensor goes quiet — and how to draw a whole day of history across a hundred pixels.


The hardware:
elektor
Figure 2. The whole thing, abbreviated. Decoupling, the indicator LEDs and the backlight transistor are left out.


Two buses do all the work. Everything that measures is on I²C at 100 kHz; everything you look at or touch is on VSPI. The touch controller shares the display’s bus, which is convenient but means the two have to take turns — more on that later.

elektor

Figure 3. The prototype: DevKit and display on the left, the two sensor groups wired out on the right.


The sensors:


Particulates — Bosch BMV080

This is the expensive part, at around $41, and the reason the project is interesting. It is the smallest particulate sensor available and, unlike the PMSA003 that these builds used to rely on, it has no fan — no moving parts, no filter to clog, and no noise. It is specified for PM2.5; the PM1 and PM10 figures come out of the same optical measurement as derived values, which is worth remembering before reading too much into them.

CO₂ — Sensirion STCC4

Thermal conductivity rather than NDIR, physically tiny, and remarkably frugal: a fraction of a milliwatt in the duty-cycled mode used here. It answers at 0x64 by default, or 0x65 if you strap it the other way.


Temperature and humidity — Sensirion SHT40



What it shows:

The touch panel earns its place here. A short tap in the top-right corner cycles between three layouts, and the choice survives a power cut.

Dashboard is closest to the original: one large CO₂ figure inside a coloured arc, the three particulate readings beside it, temperature and humidity underneath. The arc is banded by the same thresholds as the number, so it goes green, yellow, orange as the room fills up.

Histogram 1 and 2 trade the arc for history. Each reading gets its own strip: name and unit on the left, the current value beside them, the chart across the middle, and the window’s minimum and maximum on the right. Histogram 1 carries all six readings, Histogram 2 drops to four and gives each one more room.


elektor

Figure 6. Histogram 1 in bar style — all six readings at once. Each bar is coloured by its own band, so the temperature trace runs orange through yellow to green as the room cooled overnight. Minimum and maximum for the window sit on the right; the header gives its length, here just under fourteen hours.


elektor
Figure 7. The touch zones. Coordinates are display pixels on the 320 × 240 panel; the board paints this same map over its calibration points at first boot.




See the full article under the software section below: 702 - Air_Quality_Meter_Article_rev01.pdf

Note 1 (18 Aug. 2026): KiCad schematic + board and Arduino code available upon request.