Skip to the content
2 layers65 × 50 mmHIVIS2, the printed circuit board in 3D

Self-hosted indoor air quality and acoustic monitoring system built on ESP32. Designed for schools, offices, and research environments where privacy and data ownership matter.

Size
65 × 50 mm
Copper layers
2
Thickness
1.6 mm
Parts
15
Nets
34
Pads
75
Tracks, vias
88, 5
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
27 Apr 2026
Updated
4 May 2026

Overview

HIVIS2 is an open-source printed circuit board by ranieriv, from the ranieriv/HIVIS2 repository on GitHub. It is a 2-layer board of 65 × 50 mm with 15 parts on 34 nets, routed with 88 tracks and 5 vias.

It is built around the INMP441. Its parts include 5 resistors, 5 connectors, 2 capacitors, 1 IC and 1 switch.

Main components

1

README

README.md

HIVIS Monitor 2.0

Self-hosted indoor air quality and acoustic monitoring system built on ESP32. Designed for schools, offices, and research environments where privacy and data ownership matter.

Live dashboard: https://hvht.net


What it measures

MetricSensorNotes
IAQ (Air Quality Index)BME688 + BSEC20–500 scale, accuracy 0–3
CO₂ equivalentBME688 + BSEC2ppm
VOC (breath VOC)BME688 + BSEC2ppm
TemperatureBME688°C
HumidityBME688% RH
Noise levelINMP441dB SPL
Battery voltageADC (GPIO 36)% + volts

Architecture

text
┌─────────────────────────────────────────────────────┐
│  ESP32 Device (battery-powered)                     │
│  BME688 · INMP441 · OLED · Button · Buzzer          │
└──────────────────┬──────────────────────────────────┘
                   │ MQTT TLS :8883 · HTTP :8090 (OTA)
                   ▼
┌─────────────────────────────────────────────────────┐
│  Server (Docker)                                    │
│  Mosquitto → Node-RED → InfluxDB → Grafana          │
│  Nginx (https://hvht.net) · OTA server (:8090)      │
└─────────────────────────────────────────────────────┘

Hardware

ComponentPart
MCUESP32 DOIT DevKit V1
Air qualityBosch BME688 breakout
MicrophoneINMP441 I2S breakout
Display0.96" OLED SSD1306 (I2C)
ButtonTactile switch (GPIO 4)
BuzzerPassive piezo (GPIO 25)
Power1S LiPo + USB-C charging module

KiCad schematic, PCB layout, Gerber files, and BOM are in hardware/.

GPIO Map

GPIOFunction
21I2C SDA (BME688 + OLED)
22I2C SCL (BME688 + OLED)
12I2S WS — microphone
13I2S LR — microphone channel select
14I2S SCK — microphone
26I2S SD — microphone data
4Button (INPUT_PULLUP, active LOW)
25Buzzer (LEDC PWM)
36Battery ADC (voltage divider ×2.2)

Firmware

Built with PlatformIO (Arduino framework).

Dependencies (auto-installed via platformio.ini):

  • boschsensortec/bsec2 — IAQ/CO₂/VOC
  • olikraus/U8g2 — OLED display
  • bblanchon/ArduinoJson
  • knolleary/PubSubClient — MQTT
  • tzapu/WiFiManager — captive portal provisioning

Build and flash:

bash
# Install PlatformIO CLI or use the VS Code extension
pio run --target upload

# Upload LittleFS (config.json, bsec_state.bin)
pio run --target uploadfs

First boot: the device launches a captive portal (HIVIS-Setup-XXXX). Connect and enter your WiFi credentials and MQTT server address.

Device configuration lives in data/config.json. All pin assignments and thresholds are overridable there without reflashing.


Server

The full server stack runs on Docker. A single Linux machine is enough (tested on a Lenovo ThinkPad X200 with Ubuntu).

Services:

ContainerPurposePort
hivis-mosquittoMQTT broker (TLS)8883
hivis-noderedData routing + device provisioning1880
hivis-influxdbTime-series storage8086
hivis-grafanaDashboards3000
hivis-otaFirmware update server8090
hivis-nginxPublic HTTPS dashboard80, 443
hivis-certbotLet's Encrypt auto-renewal—

Deploy:

bash
cd server
cp mosquitto/config/passwd.example mosquitto/config/passwd  # create credentials
docker compose up -d

See docs/system-overview.md for the full setup and docs/operations-manual.md for day-to-day operations.


Button functions

PressDurationAction
Short< 400 msNext display page
Double2× within 400 msStop alert buzzer
Long2–5 sLaunch reconfigure portal
Factory reset> 5 sWipe NVS credentials and reboot

Documentation

FileContents
docs/system-overview.mdArchitecture, pin map, boot sequence, MQTT topics, server stack
docs/operations-manual.mdQuick checks, troubleshooting, deploying firmware, adding devices
spec/01_device_firmware.mdFirmware module details
spec/02_provisioning.mdFirst-boot captive portal and MQTT registration flow
spec/03_ota.mdOTA update system
spec/04_mqtt_data.mdMQTT topics and JSON payload schema
spec/05_server_infrastructure.mdDocker stack and Mosquitto ACL
spec/06_grafana_dashboards.mdDashboard definitions

Project structure

text
hivis2/
├── src/            # ESP32 firmware (C++/Arduino)
├── data/           # LittleFS filesystem (config.json)
├── hardware/       # KiCad schematic, PCB, Gerbers, BOM
├── server/         # Docker stack, Mosquitto, Node-RED, Grafana, Nginx
├── docs/           # Operations manual + system overview
├── spec/           # Detailed technical specifications
├── partitions.csv  # ESP32 flash partition table
└── platformio.ini  # Build configuration

Parts

15
QtyValueFootprintReferences
2100KResistor_SMD:R_0402_1005MetricR3, R4
2100nFCapacitor_SMD:C_0402_1005MetricC1, C2
24.7KResistor_SMD:R_0402_1005MetricR1, R2
1220Resistor_SMD:R_0402_1005MetricR5
1BATT JSTConnector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ5
1BME_688_ModuleLibrary:BME688_Breakout_7pinJ1
1BuzzerBuzzer_Beeper:Buzzer_TDK_PS1240P02BT_D12.2mm_H6.5mmBZ1
1INMP_441Library:INMP441_Breakout_8mmJ2
1J5019_ModuleLibrary:J5019_ModuleJ4
1OLED DisplayLibrary:OLED_SSD1306_27x27J3
1SW_PushButton_Switch_THT:SW_PUSH_6mmSW1
1~ESP32_Footprints:ESP32_30pinU1

Similar boards

  • 2 layers56.4 × 78.4 mmAIOsense, the printed circuit board in 3D

    AIOsense

    Schluggi/AIOsense

    ESPHome based all-in-one sensor

    25 parts162MIT
  • 2 layers135 × 135 mmVa5pcb, the printed circuit board in 3D

    Va5pcb

    iollama/Voice-Assistant-5

    ESP32-S3 push-to-talk voice assistant using OpenAI Realtime API

    16 parts21GPL-3.0
  • 2 layers70 × 100 mmIot badge-433, the printed circuit board in 3D

    Iot badge-433

    galopago/iot-badge-legacy

    Electronic conference badge for programming conventions, hacking events, etc.

    77 parts4
  • 2 layers39.1 × 39.9 mmNebula, the printed circuit board in 3D

    Nebula

    Thecactusman0/Nebula-openwatch

    Nebula is a ESP32 based smartwatch that features a rotating bezel encoder

    85 parts4
  • 2 layers74.9 × 100.3 mmSpectrum analyzer, the printed circuit board in 3D

    Spectrum analyzer

    JadenS180/spectrum-analyzer

    ESP32-based real-time audio spectrum analyzer with custom PCB design. Features INMP441 I2S microphone, SSD1306 OLED display, FFT processing, and real-time WiFi streaming to a browser-based visualizer via WebSockets.

    11 parts2MIT
  • 2 layers33 × 77.5 mmPcm pmod, the printed circuit board in 3D

    Pcm pmod

    s59mz/kicad-pcm_adc

    PCM1808 ADC Testing module with PMOD interface

    12 parts2GPL-3.0
  • 2 layers52 × 43 mmHologram, the printed circuit board in 3D

    Hologram

    alaotach/eidolon

    23 parts1
  • 2 layers80 × 50 mmLedhub c6, the printed circuit board in 3D

    Ledhub c6

    AskAlice/home-automation-pcbs

    Daily Kimi-generated home automation PCB designs with KiCad sources, 3D models, and rendered documentation

    59 parts1MIT

Questions

How big is the HIVIS2 PCB?

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

What parts does the HIVIS2 use?

15 parts, built around the INMP441. 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 HIVIS2 KiCad files?

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

Can I use the HIVIS2 design in my own project?

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