
Airquality
MorgenWebDigital/airquality
A battery-powered indoor air quality monitor. Real CO₂ from a photoacoustic sensor, VOC and NOx, temperature, humidity and ambient light, shown on a 2.13" e-paper display and sent over Bluetooth LE.

A stationary indoor air quality sensor. Real CO₂, VOC and NOx, temperature and humidity. No display, no battery. Powered from USB-C, read out over Bluetooth LE.
Airqualitymini is an open-source printed circuit board by MorgenWebDigital, from the MorgenWebDigital/airqualitymini repository on GitHub. It is a 2-layer board of 40 × 40 mm with 32 parts on 45 nets, routed with 230 tracks and 45 vias.
It is built around the ESP32-C3-WROOM-02-N4, SCD40-D-R1 and SGP41-D-R4, with the SHT41-AD1B-R2, T117Z and USBLC6-2SC6 among its other parts. Its parts include 15 capacitors, 7 resistors, 7 ICs and 2 switches. It belongs with the ESP32 and RISC-V boards of this library.
A stationary indoor air quality sensor. Real CO₂, VOC and NOx, temperature and humidity. No display, no battery. Powered from USB-C, read out over Bluetooth LE.
Two layers, 40 × 40 mm, 32 components.
| front | back |
|---|---|
![]() | ![]() |
The large AirQuality board is a portable instrument: battery, charger, fuel gauge, e-paper display, light sensor. This one strips all of that away and keeps only what measures the air.
What is left is a square the size of a large postage stamp with four sensors, a microcontroller and a regulator. It sits on a shelf, stays plugged in, and talks to a phone.
| AirQuality | AirQuality Mini | |
|---|---|---|
| Size | 45 × 95 mm | 40 × 40 mm |
| Components | 76 | 32 |
| Power | 21700 cell, USB-C charging | USB-C only |
| Display | 2.13" e-paper | none, BLE only |
| Sensors | CO₂, VOC/NOx, T, rH, light | CO₂, VOC/NOx, T, rH |
| Sensor | Measures | Accuracy | I²C |
|---|---|---|---|
| SCD40 | CO₂, photoacoustic, a real measurement rather than an estimate | ±(50 ppm + 5 % of reading) | 0x62 |
| SGP41 | VOC and NOx index | index, not a concentration | 0x59 |
| SHT41 | humidity and temperature | ±1.8 %RH, ±0.2 °C | 0x44 |
| T117Z | temperature, the precision channel | ±0.1 °C, 16 bit | 0x48 |
One I²C bus, four addresses, no collisions. Pull-ups are 4.7 kΩ.
Temperature is measured twice on purpose. The SHT41 gives humidity and a temperature good to ±0.2 °C; the T117Z is a TMP117-register-compatible part that reaches ±0.1 °C and serves as the precision channel.

The full schematic as a PDF is in docs/schematic.pdf.
USB-C ──▶ VBUS (5 V) ──▶ XC6222 ──▶ 3.3 V ──▶ ESP32-C3, sensors
LDONo battery, no charger, no power path. A single linear regulator, and that is the whole supply.
The CE pin of the XC6222 is tied to VBUS, so the regulator runs whenever USB power is present. CC1 and CC2 carry the 5.1 kΩ pull-downs that tell a USB-C source to supply 5 V.
Heat is the one thing to watch. The regulator burns (5 V − 3.3 V) × the whole board current. At the worst case, with the ESP32 transmitting at 345 mA while the SCD40 measures at 205 mA, that is 0.94 W in a SOT-25 package rated for 250 mW on its own, or 600 mW with copper attached.
That is why VBUS and 3.3 V each have a copper pour of about 75 mm² on the front side, connected to the regulator's pads solid rather than through thermal spokes. In the intended duty cycle, light sleep with a wake every 15 s, the average is a few tens of milliwatts and none of this matters. It matters while flashing, or if the device stays awake on Wi-Fi.
| Size | 40 × 40 mm |
| Layers | 2, 35 µm copper |
| Ground | pour on the back, 1303 mm² |
| Copper at the regulator | VBUS 76 mm², 3.3 V 78 mm², front side |
| Minimum clearance | 0.2 mm |
| Vias | 0.6 mm pad, 0.3 mm drill |
The ESP32 antenna sits at the board edge with a keep-out on both copper layers. Nothing is routed through it: no track, no via, no pour.
ESD protection on the USB data lines: a USBLC6-2SC6 sits about 3 mm from the connector pads, with the signal routed through the device (in on one channel pin, out on the other) rather than branched off it, and a ground via right at its ground pad.
Both details matter. An ESD pulse rises in under a nanosecond; every millimetre of track between the connector and the clamp adds roughly 35 V of overshoot that the ESP32 then sees, and a long ground return does the same again.
Everything needed is in this repository.
Boards. production/AirQualityMini-gerber.zip goes straight
to a fab house. Two layers, 1.6 mm, 35 µm copper, any standard process. The zip
holds the Gerbers and the Excellon drill files.
Parts. production/AirQualityMini-bom.csv lists every
component with its LCSC number where one exists.
production/AirQualityMini-positions.csv is the pick-and-place
file.
Datasheets for every active part are in datasheets/, named
by LCSC part number.
Opening the design. KiCad 9. Open
hardware/AirQualityMini.kicad_pro. All symbols, footprints and
3D models live in hardware/libraries/ and are referenced relatively, so the
project opens from any location.
Mechanical. docs/AirQualityMini.step is the full board with all
components, for enclosure design.
Firmware. ESP-IDF v5.5.4, native C. The same project as the large board runs, minus the display and fuel-gauge drivers. Not part of this repository.
The board passes with no electrical findings:
ERC 0 errors, 0 warnings
Unconnected pads 0
Shorts 0
Clearance violations 0
Schematic parity 0Every integrated circuit has been checked pin by pin against its datasheet. Not
against memory or a symbol's label, but against the document in
datasheets/.
Remaining DRC output is silkscreen only: reference designators touching their own part outlines, and the module and connector outlines crossing the board edge. Neither affects manufacture.
PolyForm Noncommercial 1.0.0. Any use is permitted except a commercial one.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 7 | 100nF | Capacitor_SMD:C_0603_1608Metric | C6, C8, C10, C12, C13, C14, C15 |
| 5 | 10uF | Capacitor_SMD:C_0603_1608Metric | C3, C4, C7, C9, C11 |
| 3 | 10K | Capacitor_SMD:C_0603_1608Metric | R3, R4, R5 |
| 3 | 1uF | Capacitor_SMD:C_0603_1608Metric | C1, C2, C5 |
| 2 | 4,7K | Capacitor_SMD:C_0603_1608Metric | R6, R7 |
| 2 | 5,1k | Capacitor_SMD:C_0603_1608Metric | R1, R2 |
| 2 | TS24CA | AirQuality:SW-SMD_2P-TS24CA | SW1, SW2 |
| 1 | ESP32-C3-WROOM-02-N4 | AirQuality:BULETM-SMD_ESPRESSIF_ESP32-C3-WROOM-02-N4-4MB | U2 |
| 1 | SCD40-D-R1 | AirQuality:LGA-20_L10.1-W10.1-P1.25-TL | U3 |
| 1 | SGP41-D-R4 | AirQuality:DFN-6_L2.4-W2.4-P0.80-TL-EP | U6 |
| 1 | SHT41-AD1B-R2 | AirQuality:DFN-4_L1.5-W1.5-SHT41-AD1B-R2 | U4 |
| 1 | T117Z | AirQuality:TDFN-6_L2.0-W2.0-P0.65-TL-EP | U5 |
| 1 | TYPE-C-2.0-16PIN-SMT-3 | AirQuality:TYPE-C-SMD_TYPE-CF3.1 | USB1 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U7 |
| 1 | XC6222A331MR-G | AirQuality:SOT-25-5_L2.9-W1.6-P0.95-LS2.8-BR | U1 |
It measures 40 × 40 mm and has 2 copper layers, 1.6 mm thick.
32 parts, built around the ESP32-C3-WROOM-02-N4, SCD40-D-R1, SGP41-D-R4 and SHT41-AD1B-R2. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the MorgenWebDigital/airqualitymini repository on GitHub, at the commit this page was made from: the board is hardware/AirQualityMini.kicad_pcb and its schematic hardware/AirQualityMini.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask MorgenWebDigital before reusing the design.

MorgenWebDigital/airquality
A battery-powered indoor air quality monitor. Real CO₂ from a photoacoustic sensor, VOC and NOx, temperature, humidity and ambient light, shown on a 2.13" e-paper display and sent over Bluetooth LE.

JonaWe/ummon
ummon (from German Umgebungsmonitor, "environment monitor") is an ESP32-C6 based environmental sensor board with USB-C power.



EnriqueNeyra/Aeroq
An Indoor Air Quality Monitor Powered by ESP32, SCD40, and SEN54


laemo10/SuperNicePCB
An integrated, multi-sensor UWB anchor PCB designed for real-time indoor object tracking (via Double-Sided Two-Way Ranging) and non-invasive human presence/occupancy monitoring.
