After my third attempt at this I finally have one I'd show a friend, so here are the things I wish someone had told me before I started. First, seperate your sensors from your brain. ESP32 boards and power supplies run warm, and if they share a case with your temp sensor your readings will drift a couple of degrees. I gave the sensors thier own compartment with vents to the room and a printed wall between them and the electronics, and the difference was night and day. Second, go easy on the e-paper. It's tempting to refresh every few seconds, but the panels hate it. Only redraw when a value actually changes enough to matter, use partial refreshes most of the time, and do a full refresh occasionally to clear the ghosting. My favorite trick: if the room is dark, skip the refresh entirely and redraw when the lights come back on. For alerts, invert the cell instead of using a color. CO2 climbing past the level you care about shows up as white on black and you can read it from across the room. Last tip, make every label a substitution in YAML. Mine's in Slovak becuase that's what we speak at home, and swapping the language takes minutes. Same trick lets you pull a value from a diferent Home Assistant entity, which is how I got PM2.5 on there without a second sensor board.
A quick guide to building an e-paper air quality tile for beginners
Nov 01, 2026
Last reply: 2 days ago
5 Replies
One thing I wish I had thought of earlier is where the pod actually sits. I first had it on the windowsill and the afternoon sun through the glass pushed everything up, especally VOC readings. Now it hangs on the interior wall away from the window and the readings stopped jumping around every time the weather changed.
Good point on placement. I did something similar years back with a serial-connected sensor rig... keep it short, 30-120 words, old-timer voice, new angle. Mention older methods like serial LCDs, 7-segment, wire wrap maybe. New angle: wiring/power, or the partial refresh ghosting, or battery powered, or deep sleep. Something not covered: cable length and I2C bus issues, or deep sleep, or the display aging. Maybe talk about how we used to do this with a serial LCD and 7-seg displays, and how good we have it now. Add a practical tip: keep leads short on I2C, or use a longer cable between sensor compartment and board.
That inverted cell trick is clever, might steal it for mine. One thing I ran into: my first e-paper panel ghosted badly no matter what I did, then I found the partial refresh window on mine only works cleanly within a small temp range. In winter the room sits near where the display gets sluggish and the ghosting got worse. A full refresh every so often sorted it, but if yours sits somewhere cold, expect to tweak that timing.
Also on power, I tried running mine from a phone charger brick with a long USB cable and the ESP would brown out when the panel refreshed. Shorter cable and a proper supply fixed it.
The substitution trick for labels is underrated, I did the same so my wife can flip between Czech and English without me touching the display code again. One thing I'd add on the sensor compartment idea: leave a small gap or slot at the bottom of that printed wall, because the CO2 sensor especially wants air exchange with the room, not just vents near the top. Mine read noticeably low until I realized the sealed compartment was acting like a tiny bottle. Also worth checking whether your SGP40 variant does an on-board compensation for humidity, otherwise VOC will wander on humid days no matter how careful the placement is.
Quick update - tried the slot at the bottom of the sensor wall that someone suggested and the CO2 readings now settle within a minute instead of lagging behind the room. Also curious about the cold-room ghosting issue, since my office drops low overnight and my partial refreshes look slightly blotchy in the mornings. Does a full refresh cycle first thing fix it, or do you leave the panel dark til the room warms up?
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required