Skip to the content
2 layers70 × 70 mmAirSensor display, the printed circuit board in 3D

AirSensor for HomeAssistant (hardware and software)

Size
70 × 70 mm
Copper layers
2
Thickness
1.6 mm
Parts
30
Nets
25
Pads
86
Tracks, vias
230, 26
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
6 Apr 2026
Updated
6 Apr 2026

Overview

AirSensor display is an open-source printed circuit board by MarcFinns, from the MarcFinns/AirSensor-for-HomeAssistant repository on GitHub. It is a 2-layer board of 70 × 70 mm with 30 parts on 25 nets, routed with 230 tracks and 26 vias.

It is built around the HLK-PM01, DPS310 and SS12, with the WS2812B among its other parts. Its parts include 12 capacitors, 4 ICs, 3 connectors, 2 resistors and 2 diodes. It belongs with the home automation and IoT and lEDs and displays boards and the ESP32 and RISC-V boards of this library.

Main components

4

README

README.md

AirSensor

A multi-room air quality monitor built around ESPHome and Home Assistant. Each unit sits flush on the wall like a light switch — mains powered, fully self-contained, nothing to charge or manage. Built on the ESP32-C6, it is hardware-ready for Matter, making it future-proof as smart home standards evolve.

AirSensor unit installed on the wall


What it measures

Each unit reports the following to Home Assistant in real time:

SensorMeasurements
Sensirion SEN55PM1.0, PM2.5, PM4.0, PM10 · VOC Index · NOx Index · Temperature · Humidity
Sensirion SCD4xCO2 (ppm) · Temperature · Humidity
Infineon DPS310 (optional)Barometric pressure · Temperature

The DPS310 pressure sensor is fitted on one unit only and is entirely optional — the PCB and firmware support it but work fine without it.


Display

Each unit has a GC9A01A 240×240 round TFT (SPI), sourced from AliExpress:

GC9A01A round display module

The display shows:

  • Time and date (synced from Home Assistant)
  • CO2, humidity, PM2.5, VOC values in the four quadrants
  • A 5-segment AQI bar reflecting the worst pollutant level across all sensors, colour-coded from green (Excellent) to red (Very Poor)
  • A large status word (EXCELLENT / GOOD / FAIR / POOR / VERY POOR) at the centre
  • An animated fan graphic as the background (see below)

The XIAO's built-in RGB LED (optional) breathes in the AQI colour — green through red depending on air quality — visible from across the room without looking at the display. It can be enabled or disabled from Home Assistant and the state persists across reboots.


Animated fan

A Fan Speed entity (Off / Low / High) is exposed in Home Assistant. Selecting Low or High drives an animated three-blade fan spinning in the background of the display — slow and blue-purple at Low, faster and brighter purple at High. It is purely decorative and does not control any physical hardware. The selected speed persists across reboots.


Hardware

ComponentRole
Seeed XIAO ESP32-C3MCU — different GPIO layout, otherwise identical firmware
Seeed XIAO ESP32-C6MCU — preferred variant; Wi-Fi 6, Matter-capable radio
Sensirion SEN55Particulate matter + VOC + NOx + T/RH
Sensirion SCD4xCO2 + T/RH
Infineon DPS310 breakoutBarometric pressure (optional)
GC9A01A 240×240 round TFTRound display (AliExpress)
Kradex Z123_WEnclosure — standard wall-mount junction box

The ESP32-C6 is the preferred variant. Its Wi-Fi 6 and IEEE 802.15.4 radio make it hardware-ready for Matter once ESPHome's Matter support matures. The C3 lacks the necessary radio and cannot support Matter.


PCB

A single custom PCB designed in KiCad houses the MCU, sensors, and display connector inside the Kradex enclosure.

KiCad 3D render

Internals — PCB, display and wiring mounted in the enclosure

Custom KiCad libraries (symbols, footprints, and 3D models) are kept under lib/ and referenced with portable ${KIPRJMOD}-relative paths so the project opens correctly on any machine.


Home Assistant integration

Each unit exposes the following entities:

  • Sensors — all measured values listed above
  • Fan Speed — select (Off / Low / High) to control the display animation
  • Status LED — switch to enable or disable the breathing LED
  • Display Backlight — light entity with brightness control
  • Restart — button to reboot the device OTA

MCU variants

ESP32-C3ESP32-C6
Wi-Fi802.11 b/g/n802.11 b/g/n/ax (Wi-Fi 6)
BLE5.05.3
Matter (future)No — hardware limitationYes — IEEE 802.15.4 radio
GPIODifferent pinoutReference pinout

Two reference templates are provided — ESPHome_config/AirSensor-C3.yaml and AirSensor-C6.yaml — covering both variants.


Repository structure

text
AirSensor/
├── ESPHome_config/
│   ├── AirSensor-C3.yaml          # Reference template (ESP32-C3)
│   ├── AirSensor-C6.yaml          # Reference template (ESP32-C6)
│   ├── airsensor_aqi_helpers.h    # Shared AQI logic (C++)
│   ├── secrets.yaml               # Empty secrets template
│   └── private/                   # Real deployment configs (gitignored)
├── kicad/
│   └── AirSensor_display/         # KiCad project (schematic + PCB)
├── lib/
│   ├── symbols/                   # Custom KiCad symbols
│   ├── footprints/                # Custom KiCad footprints
│   └── 3d/                        # 3D models for KiCad
├── mech/                          # Enclosure and module STEP files
└── docs/
    └── Data sheets/               # Component datasheets

Getting started

  1. Copy ESPHome_config/AirSensor-C3.yaml or AirSensor-C6.yaml to ESPHome_config/private/<unit-name>.yaml
  2. Fill in ESPHome_config/private/secrets.yaml (Wi-Fi credentials, API key, OTA password)
  3. Search for ← CONFIGURE markers in the YAML and update each one (device name, floor label, etc.)
  4. Remove the DPS310 sensor block if the pressure sensor is not fitted
  5. Flash via ESPHome: esphome run private/<unit-name>.yaml

Parts

30
QtyValueFootprintReferences
6100nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1, C2, C5, C9, C11, C13
422uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC6, C10, C12, C14
247uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC3, C4
1100RLED_SMD:LED_0805_2012Metric_Pad1.15x1.40mm_HandSolderR4
1220RLED_SMD:LED_0805_2012Metric_Pad1.15x1.40mm_HandSolderR2
1600ohm@100mhzInductor_SMD:L_0805_2012MetricFB1
1DC-DC 3V3Converter_DCDC:Converter_DCDC_Murata_OKI-78SR_HorizontalU1
1DPS310AirSensor_footprints:DPS310_BREAKOUTU2
1DisplayConnector_JST:JST_XH_B8B-XH-AM_1x08_P2.50mm_VerticalJ4
1HLK-PM01Converter_ACDC:Converter_ACDC_Hi-Link_HLK-PMxxPS2
1MOUDLE-SEEEDUINO-XIAO-ESP32C3xiao ESP32C3_PCB:MOUDLE14P-SMD-2.54-21X17.8MM_PINONLYU6
1SCD41AirSensor_footprints:SCD41_BREAKOUT_1x4_2.54U3
1SEN55Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ1
1SS12Diode_SMD:D_SMAD2
1Screw_Terminal_01x02TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_HorizontalJ2
1WS2812BLED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mmD1

The 25 most common of 30 parts.

Similar boards

  • 6 layers36 × 36 mmUltimateFC, the printed circuit board in 3D

    UltimateFC

    crteensy/yolo-chonker

    betaflight developer FC for the H735

    245 parts10CC-BY-SA-4.0
  • 2 layers150 × 150 mmBoardGame, the printed circuit board in 3D

    BoardGame

    jkordek1/Man-Don-t-Get-Angry-Board-game

    "Man don't get mad" - electronic board game

    218 parts5
  • 4 layers56 × 88 mmPico peltier, the printed circuit board in 3D

    Pico peltier

    syauqi-alias/pico-peltier

    A TEC Controller using Pico RP2350 with Analog Devices LT8722 full bridge driver rated at 15V 4A

    99 parts1MIT
  • 2 layers72.4 × 72.4 mmUnified, the printed circuit board in 3D

    Unified

    DoggySazHi/MiniHakkero.EDA

    Mini Hakkero PCB files (KiCad)

    57 partsCERN-OHL-P-2.0
  • 2 layers100.3 × 69.9 mmHDD Synth Prototype MK4, the printed circuit board in 3D

    HDD Synth Prototype MK4

    MaverickUK/HDDSynth

    Recreate the sound of mechanical spinning HDDs on retro PCs that use a solid state drive

    46 parts16
  • 2 layers141 × 56.9 mmSenseEHajo, the printed circuit board in 3D

    SenseEHajo

    ehajo/SenseHaJo

    Software for SenseHaJo Streamproject

    119 parts5
  • 2 layers141 × 56.9 mmSenseEHajo, the printed circuit board in 3D

    SenseEHajo

    calm4git/SenseHaJo-ESP32

    Replacement PCB for Senseo Coffeemaker with ESP32

    104 parts1
  • 2 layers48.3 × 68.6 mmPowered multisensor, the printed circuit board in 3D

    Powered multisensor

    ChefsSlaad/PCBs_and_Micropython

    storing custom pcbs and micropython code for home projects

    21 parts

Questions

How big is the AirSensor display PCB?

It measures 70 × 70 mm and has 2 copper layers, 1.6 mm thick.

What parts does the AirSensor display use?

30 parts, built around the HLK-PM01, DPS310, SS12 and WS2812B. 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.

Where can I download the AirSensor display KiCad files?

From the MarcFinns/AirSensor-for-HomeAssistant repository on GitHub, at the commit this page was made from: the board is kicad/AirSensor_display/AirSensor_display.kicad_pcb and its schematic kicad/AirSensor_display/AirSensor_display.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the AirSensor display design in my own project?

Its repository states no licence, so its author keeps all rights: ask MarcFinns before reusing the design.