Projects / Desk gadgets
Air-Quality Touch Station (CO₂ · VOC · Temp · Humidity)
A 2.8" touchscreen that shows the air you breathe – real CO₂, VOC, temperature and humidity with clear good/fair/poor colours.
Photo: el-bakkali, esphome-air-quality-monitor (MIT)
Choose how it arrives
₹7,451
Before shipping. The courier fee is calculated from your PIN.
- 4 printed case layers
- ESP32 'Cheap Yellow Display' 2.8" touchscreen board
- Sensirion SCD40 and SGP40 sensor breakouts
- Ribbon wire, screws, USB adapter and cable
- Firmware configuration and illustrated guide
Intermediate
What it is
Stuffy room, foggy head? This station tells you why. A genuine Sensirion SCD40 measures real CO₂, using a true photoacoustic NDIR sensor rather than an "estimated" value. A Sensirion SGP40 tracks VOCs from cooking, cleaning products, incense or paint. Both feed a crisp 2.8" colour touchscreen that shows CO₂ in ppm with a GOOD / FAIR / POOR rating, plus temperature, humidity and a VOC index.
It's ideal for home offices, bedrooms, classrooms and meeting rooms. Many Indian homes and offices with closed windows and ACs regularly cross 1,200 ppm without anyone noticing. The station runs ESPHome, so it also appears in Home Assistant with history graphs and can switch on a fan or purifier automatically.
The case is a sleek modular stack with a honeycomb back so air reaches the sensors. Building it involves a little soldering of four wires; or choose Assembled or Fully built and just plug it in.
- Real CO₂ (ppm) from a Sensirion SCD40 NDIR sensor
- VOC index from a Sensirion SGP40
- Temperature and humidity
- 2.8" colour touchscreen with clear GOOD / FAIR / POOR status
- Tap to wake, adjustable brightness, anti burn-in
- Home Assistant integration via ESPHome
- Ventilated honeycomb back for accurate readings
Components
Each line is the price of that part. The tier price above is the full price for that way of buying it, before shipping.
| Part | Qty | Each | Line |
|---|---|---|---|
| ESP32-2432S028 'Cheap Yellow Display' – 2.8" 320×240 touchscreen ESP32 board (incl. connector cable, micro-USB cable, stylus) | 1 | ₹1,650 | ₹1,650 |
| Sensirion SCD40 CO₂ / temperature / humidity sensor – 7Semi mini breakout | 1 | ₹2,647 | ₹2,647 |
| Sensirion SGP40 VOC sensor – SmartElex I2C breakout | 1 | ₹1,348 | ₹1,348 |
| 10-way ribbon cable, 1 m (I2C hook-up wires) | 1 | ₹57 | ₹57 |
| 5 V 1 A USB adapter with micro-USB cable | 1 | ₹200 | ₹200 |
| M3 × 25 mm Phillips pan-head screws (pack of 4) | 1 | ₹10 | ₹10 |
Printed parts
- Front frame (holds the CYD display) · PLA · Black
- Proto layer (sensor mounting grid) · PLA · Black
- 10 mm extender (room for the sensors) · PLA · Black
- Ventilated honeycomb rear cover · PLA · Grey
Print just the parts · ₹545 before shipping.
Build guide
The DIY kit includes this guide. Assembled and fully built orders include it too, for care and the steps that remain.
Build your Air-Quality Touch Station
Most of us can't feel CO₂ rising until we're yawning in a meeting or waking up with a headache. This station makes the invisible visible. A real Sensirion CO₂ sensor and a VOC sensor feed a bright 2.8" touchscreen, so you'll see at a glance when it's time to open a window, switch on the exhaust or take a break.
Which version do you have? - DIY kit: follow every step. - Assembled: sensors are wired and mounted and the firmware is flashed. Start at Step 6 (stack the case), then Wi-Fi setup. - Fully built: plug it in. If Wi-Fi isn't pre-set, see Wi-Fi setup.

What's in the box
| Item | Qty | |---|---| | Printed front frame, proto layer, 10 mm extender, ventilated rear | 4 | | ESP32-2432S028 "Cheap Yellow Display" with its CN1 cable, micro-USB cable and stylus | 1 | | Sensirion SCD40 CO₂ / temperature / humidity breakout | 1 | | Sensirion SGP40 VOC breakout | 1 | | Ribbon wire, 4 × M3 × 25 mm screws, 5 V USB adapter | 1 set |
(The display board's own acrylic stand isn't needed.)

Tools you'll need
- Soldering iron, solder, stand and damp sponge
- Wire stripper, side cutters, small Phillips screwdriver
- Double-sided foam tape, or small M2/M3 screws, to mount the sensor boards
- A computer with Python 3 for ESPHome (see Firmware)
Safety notes
- Hot iron (around 330 °C). Use the stand, ventilate the room and wash your hands after soldering.
- 3.3 V only for the sensors. Never connect them to 5 V.
- The SGP40 has a tiny heater inside. That's normal; it runs warm.
- Keep the station away from water, cooking steam and direct sunlight, which skew the readings and can damage the electronics.
- Don't press hard on the touchscreen glass. Use your finger or the stylus.
Step-by-step build
1. Get to know the CYD
The back of the display board has a small 4-pin socket marked CN1, with pins GND, IO22, IO27, 3.3V. Plug in the supplied CN1 cable and check its wire colours against the silkscreen.
2. Make a four-wire bus
Peel four wires off the ribbon cable, about 12 cm long. Strip and tin both ends. These will be 3.3V, GND, SDA (IO27) and SCL (IO22).
3. Wire the SCD40
Solder the four wires to the SCD40's VCC, GND, SDA, SCL pads. Then join the other ends to the matching wires of the CN1 cable: solder, twist and insulate with heat-shrink or tape.
4. Add the SGP40 in parallel
Solder four short wires (about 6 cm) from the SGP40's VCC, GND, SDA, SCL to the same-named pads on the SCD40. Both sensors share one bus and have different addresses, so they don't clash.
5. Mount the sensors
Fix both sensor boards to the proto layer with foam tape or small screws, components facing the rear so they sit behind the honeycomb vents. Keep the SGP40 a couple of centimetres from the SCD40 if you can. 
6. Stack the case
From the front: front frame (with the display dropped in, screen facing out) → proto layer → 10 mm extender → ventilated rear. Route the CN1 cable so it isn't pinched. Line up the four corner holes. 
7. Screw it together
Drive the four M3 × 25 mm screws in from the rear until snug. They thread into the plastic, so stop as soon as you feel resistance.
Wiring
| CYD CN1 | SCD40 | SGP40 | |---|---|---| | 3.3V | VCC | VCC | | GND | GND | GND | | IO27 (SDA) | SDA | SDA | | IO22 (SCL) | SCL | SCL |
Power the CYD from its micro-USB socket with the supplied 5 V adapter.
Firmware flashing
The firmware is the open-source ESPHome Air Quality Monitor by el-bakkali (MIT): <https://github.com/el-bakkali/esphome-air-quality-monitor>. A copy is in this project's docs/firmware/.
- Install Python 3, then install the ESPHome version this configuration was built for:
pip install "esphome==2026.1.5" Newer ESPHome releases changed the display settings, so stick with this version unless you're comfortable porting the YAML.
- In
docs/firmware/, copysecrets.yaml.exampletosecrets.yamland fill it in:
- your Wi-Fi name and password (2.4 GHz) - an API key: run openssl rand -base64 32, or let ESPHome generate one - an OTA password and a fallback hotspot password of your choice
- Connect the CYD with the micro-USB cable. Install the CH340 USB driver if no port appears.
- Run
esphome run air-quality-monitor.yamland choose the USB port. The first build takes several minutes. - Later updates can be sent over Wi-Fi with the same command.
Wi-Fi setup
If the station can't join the Wi-Fi in secrets.yaml, it opens a hotspot called Air-Quality-Monitor, using the fallback password you chose. Join it from your phone and pick your network on the page that opens. In Home Assistant, the station appears under Settings → Devices & services → ESPHome.
Testing
- After power-up the screen shows CO₂, a status word, a bar, and temperature, humidity and VOC.
- Breathe gently near the vents for a few seconds. CO₂ should jump by hundreds of ppm, then settle back.
- Hold a marker pen or a hand sanitiser near the back. The VOC index should rise.
- Tap the screen to wake it if it has dimmed.
Reading the screen
| CO₂ (ppm) | Status | What to do | |---|---|---| | below 800 | GOOD | Fresh air, nothing to do | | 800–1,200 | FAIR | Consider opening a window | | above 1,200 | POOR | Ventilate now |
The VOC index sits around 100 in normal air. Higher values mean more VOCs than usual.
Calibration notes
- Temperature: the sensor warms itself slightly. The firmware subtracts 6 °C (
temperature_offset); compare with a good thermometer and adjust if needed. - CO₂: the SCD40 calibrates itself automatically over about a week if it sees fresh outdoor-level air (around 420 ppm) now and then, for example by airing the room daily.
- Touch: if taps land in the wrong place, adjust the
calibration:values in the YAML.
Troubleshooting
| Problem | Try this | |---|---| | Sensor values show "—" or NaN | Check SDA/SCL aren't swapped and that VCC is on 3.3V. Look at the ESPHome log for "I2C" errors. | | CO₂ stuck at a strange value | Give it 3 minutes after power-up. Make sure the vents aren't blocked. | | Temperature reads high | The case is near something warm, or the offset needs raising. | | Screen white or blank after flashing | Make sure you used ESPHome 2026.1.x. Re-flash. | | Board resets in a loop | Use the supplied adapter. Check for a short on the CN1 wires. |
Credits
- Case: "CYD (Cheap Yellow Display) Modular Case" by DanielB (DanielBrunod) (<https://www.printables.com/model/1324890-cyd-cheap-yellow-display-modular-case>), a remix of "CYD enclosure" by ncmreynolds (<https://www.thingiverse.com/thing:6308391>). The ventilated rear is "CYD Modular Mod Rear – Ventilated Back" by elbakkali (<https://www.printables.com/model/1586920-cyd-cheap-yellow-display-modular-mod-rear-ventilat>). All are CC BY-SA 4.0; our printed parts and these files remain under the same licence. Case photos: elbakkali, CC BY-SA 4.0.
- Firmware and device photos: "ESPHome Air Quality Monitor" by el-bakkali (<https://github.com/el-bakkali/esphome-air-quality-monitor>), MIT. Built with ESPHome (<https://esphome.io>).
- This guide, the wiring diagram and the renders are original MyPartLab material, shared under CC BY-SA 4.0.
Ways to change it
- Wall-mount or desk-stand version
- Company logo for meeting rooms / classrooms
- Buzzer or LED alert when CO₂ > 1,200 ppm
- Add a PM2.5 dust sensor (e.g. for Delhi/Bengaluru winters)
- Auto-switch a fan or purifier via Home Assistant
- Hindi/Kannada on-screen labels
Source: CYD Modular Case + Ventilated Rear + ESPHome Air Quality Monitor by DanielB / DanielBrunod (case), remix of ncmreynolds' 'CYD enclosure'; elbakkali (ventilated rear and firmware). CC-BY-SA-4.0. View source