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.

Air-quality station showing CO₂ 747 ppm GOOD

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
Order diy kit

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.

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.

PartQtyEachLine
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 breakout1₹2,647₹2,647
Sensirion SGP40 VOC sensor – SmartElex I2C breakout1₹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 cable1₹200₹200
M3 × 25 mm Phillips pan-head screws (pack of 4)1₹10₹10

Printed parts

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.

The station showing GOOD air

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.)

3D render of the printed parts (not a photo)

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. Sensors mounted inside

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. Ventilated back

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

Wiring diagram

| 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/.

  1. 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.

  1. In docs/firmware/, copy secrets.yaml.example to secrets.yaml and 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

  1. Connect the CYD with the micro-USB cable. Install the CH340 USB driver if no port appears.
  2. Run esphome run air-quality-monitor.yaml and choose the USB port. The first build takes several minutes.
  3. 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

  1. After power-up the screen shows CO₂, a status word, a bar, and temperature, humidity and VOC.
  2. Breathe gently near the vents for a few seconds. CO₂ should jump by hundreds of ppm, then settle back.
  3. Hold a marker pen or a hand sanitiser near the back. The VOC index should rise.
  4. 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

Customise this project

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