Skip to the content
PCBKitNew board
4 layers60 × 80 mmWisp, the printed circuit board in 3D

Open-source ESP32 room climate monitor — CO2, VOC, humidity, temperature and light sensing with custom PCB, MQTT/HomeKit integration, and OTA firmware updates. Full hardware + software, from schematic to BOM.

Size
60 × 80 mm
Copper layers
4
Thickness
1.6 mm
Parts
91
Nets
51
Pads
338
Tracks, vias
688, 339
Pours
5
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
6 Aug 2026
Updated
10 Aug 2026

Overview

Wisp is an open-source printed circuit board by huulanka, from the huulanka/wisp repository on GitHub, published under the MIT licence. It is a 4-layer board of 60 × 80 mm with 91 parts on 51 nets, routed with 688 tracks and 339 vias.

It is built around the ESP32-S3-WROOM-1-N8, BH1750FVI-TR and BME280, with the SGP41-D-R4, SCD41-D-R2 and USBLC6-2SC6 among its other parts. Its parts include 19 resistors, 17 capacitors, 15 diodes, 9 connectors and 7 ICs. It belongs with the home automation and IoT boards and the ESP32 boards of this library.

Main components

12

README

README.md

Wisp

Wisp is an open-source, self-hosted ESP32 room climate monitor. No cloud — it publishes readings over MQTT into your own Home Assistant instance, which exposes them to Apple HomeKit.

It tracks:

  • CO2 — SCD41
  • VOC / NOx (air quality) — SGP41
  • Temperature & humidity — SCD41, cross-checked against BME280
  • Barometric pressure — BME280 (also compensates the SCD41's CO2 reading)
  • Ambient light — BH1750

All hardware, firmware, and infrastructure needed to build and run one live in this single repo.

Repo structure

PathWhat's thereStatus
/hardwareKiCad project for the PCB — schematic, layout, Gerbers, BOM/CPL. ESP32-S3-WROOM-1 module, I2C sensors, USB-C only, 4-layer board.Schematic and PCB routed, DRC clean, fab outputs exported.
/firmwareESP-IDF firmware in Rust (esp-idf-svc), publishing sensor data over MQTT with OTA updates.Not started. Design: docs/firmware-architecture.md.
/infraDocker Compose: Mosquitto (MQTT, TLS, ACLs), a self-hosted OTA server, and Home Assistant bridging MQTT into HomeKit.Not started. Design: docs/infra-architecture.md.
/docsDesign concept, sensor rationale, expandability notes.concept.md, hardware-expandability.md.

Why these sensors

The SGP41 replaces the more common BME680: the BME680's gas reading only becomes useful through Bosch's closed-source BSEC library, which doesn't sit well with an MIT-licensed firmware. Sensirion's Gas Index Algorithm (BSD-3-Clause) does the same job openly. Dropping the BME680 would also drop barometric pressure, so the BME280 sits alongside the SGP41 for that — and because the SCD41 needs ambient pressure to compensate its own CO2 reading, that pressure reading isn't a bonus, it feeds the primary measurement.

Temperature and humidity are read from the SCD41; the BME280's readings are kept as an independent cross-check rather than the source of truth, so firmware can notice a failing sensor.

Full rationale: docs/concept.md.

MQTT topic structure

text
home/climate/<room>/{co2,temperature,humidity,voc,nox,pressure,lux}

First room: living room.

Licensing

Each subfolder is licensed separately, matching its content type:

  • /hardware → CERN-OHL-S v2
  • /firmware → MIT
  • /docs → CC-BY-4.0

Parts

91
QtyValueFootprintReferences
11PESD5V0L1ULD_SOD-882D2, D3, D5, D6, D7, D8, D9, D10, D13, D14, D15
8100nFC_0805_2012MetricC2, C7, C9, C10, C16, C17, C18, C19
54.7kR_0805_2012MetricR8, R9, R10, R11, R14
410uFC_0805_2012MetricC3, C5, C12, C13
4MountingHole_M3MountingHole_3.2mm_M3MH1, MH2, MH3, MH4
310kR_0805_2012MetricR3, R4, R20
31uFC_0805_2012MetricC4, C20, C21
3220RR_0805_2012MetricR15, R16, R17
222uFC_0805_2012MetricC6, C14
25.1kR_0805_2012MetricR1, R2
1+3V3TestPoint_Pad_1.5x1.5mmTP5
11-Wire BusPinHeader_1x03_P2.54mm_VerticalJ7
1100RR_0805_2012MetricR12
1100kR_0805_2012MetricR18
11N4148WD_SOD-123D11
11kR_0805_2012MetricR13
12.2kR_0805_2012MetricR21
12.2uHL_1210_3225MetricL1
1330RR_0805_2012MetricR7
14.7RR_0805_2012MetricR22
1500mAFuse_1812_4532MetricF1
1AO3400ASOT-23Q3
1AP63203WU-7TSOT-23-6U2
1Analog Sensor PadPinHeader_1x03_P2.54mm_VerticalJ8
1BH1750FVI-TRBH1750FVI-TR_WSOF6U6
1BME280Bosch_LGA-8_2.5x2.5mm_P0.65mm_ClockwisePinNumberingU7
1BOOTSW_SPST_PTS810SW2
1BuzzerBuzzer_CUI_CPT-9019S-SMTBZ1
1ENTestPoint_Pad_1.5x1.5mmTP9
1ESP32-S3-WROOM-1-N8ESP32-S3-WROOM-1U3
1Expansion HeaderPinHeader_1x08_P2.54mm_VerticalJ9
1GNDTestPoint_Pad_1.5x1.5mmTP6
1GREENLED_0805_2012MetricD12
1I2S Mic (INMP441)PinHeader_1x05_P2.54mm_VerticalJ4
1IO0TestPoint_Pad_1.5x1.5mmTP10
1JTAG_MTCKTestPoint_Pad_1.5x1.5mmTP2
1JTAG_MTDITestPoint_Pad_1.5x1.5mmTP1
1JTAG_MTDOTestPoint_Pad_1.5x1.5mmTP4
1JTAG_MTMSTestPoint_Pad_1.5x1.5mmTP3
1LED_DOUTTestPoint_Pad_1.5x1.5mmTP13
1MMBT3904SOT-23Q4
1RESETSW_SPST_PTS810SW1
1Reed/Hall ContactPinHeader_1x02_P2.54mm_VerticalJ6
1SCD41-D-R2Sensirion_SCD4x-1EP_10.1x10.1mm_P1.25mm_EP4.8x4.8mmU4
1SCLTestPoint_Pad_1.5x1.5mmTP8
1SDATestPoint_Pad_1.5x1.5mmTP7
1SGP41Sensirion_DFN-6-1EP_2.44x2.44mm_P0.8mm_EP1.25x1.7mmU5
1SS14D_SMAD4
1Second I2C BusPinHeader_1x04_P2.54mm_VerticalJ2
1Switched DC OutputPinHeader_1x03_P2.54mm_VerticalJ5
1UART0_RXTestPoint_Pad_1.5x1.5mmTP12
1UART0_TXTestPoint_Pad_1.5x1.5mmTP11
1USB-CUSB_C_Receptacle_HRO_TYPE-C-31-M-12J1
1USBLC6-2SC6SOT-23-6U8
1WS2812BLED_WS2812B_PLCC4_5.0x5.0mm_P3.2mmD1
1mmWave UART (LD2410)PinHeader_1x04_P2.54mm_VerticalJ3

Questions

How big is the Wisp PCB?

It measures 60 × 80 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Wisp use?

91 parts, built around the ESP32-S3-WROOM-1-N8, BH1750FVI-TR, BME280 and SGP41-D-R4. 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 Wisp KiCad files?

From the huulanka/wisp repository on GitHub, at the commit this page was made from: the board is hardware/kicad/wisp.kicad_pcb and its schematic hardware/kicad/wisp.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Wisp design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 4 layers107 × 17 mmE0001 fader driver, the printed circuit board in 3D

    E0001 fader driver

    Karpuls/E0001-fader-driver-board

    Motorized fader driver board (ALPS RSA0N11M9A0J clone): STM32C051, DRV8210P, touch sense, I2C

    34 parts
  • 4 layers36.4 × 15 mmOvrdrive, the printed circuit board in 3D

    Ovrdrive

    o7-machinehum/phantomdrive

    Seemingly normal USB drive with a hidden security feature

    57 parts1kMIT
  • 4 layers79.5 × 20 mmMatter usb switch, the printed circuit board in 3D

    Matter usb switch

    IvanVeloz/smart-usb-plug

    A smart plug for USB with energy measurement and Matter over Thread support

    65 parts2GPL-3.0
  • 4 layers75 × 56.4 mmEsp32-c6-wroom1 board, the printed circuit board in 3D

    Esp32-c6-wroom1 board

    pushtiujeniya/esp32-c6-environmental-logger

    This repository contains an Environmental Sensor Station and Data Logger powered by the ESP32-C6-WROOM-1 microcontroller.

    59 parts4
  • 2 layers75 × 75 mmAir quality pcb, the printed circuit board in 3D

    Air quality pcb

    aleemacc/air_quality_sensor

    PCB design for a custom air quality measuring device

    30 parts
  • 6 layers60 × 100 mmSenseboard, the printed circuit board in 3D

    Senseboard

    CPSLO-AI-Campus-Fire-Detection/senseboard

    PCB for sensor stack and compute for fire detection system

    109 partsAGPL-3.0
  • 2 layers7.2 × 41.9 mmSensor puck, the printed circuit board in 3D

    Sensor puck

    david072/sensor_puck

    60 parts
  • 4 layers65 × 56 mmSensor HAT, the printed circuit board in 3D

    Sensor HAT

    Eniemooo/Sensor-HAT

    Open-hardware indoor air sensor (CO2, VOC/NOx, T/RH, light, sound): HAT for Raspberry Pi or standalone with Seeed XIAO + ESPHome. KiCad 10.

    112 parts