Portable CO₂ monitor · Fully open source

See your air. Know your CO₂.

KnowCO₂™ is a pocketable, open-source CO₂ monitor built on ESP32-S3. Ships with a high-precision SCD41 on a swappable sensor architecture — SCD4x and SCD30 supported today, more sensors in testing, and an open driver API that lets anyone add support for new CO₂ sensors. Designed for makers, educators, and anyone who wants to understand indoor air quality in real time.

Indoor air · Schools · Offices · Home labs ESP32-S3 · CircuitPython · Wi-Fi telemetry
▶ Try it live
Drag to rotate · Scroll to zoom
Wi-Fi telemetry ready
MQTT · HTTP · Adafruit IO · CSV export
OSHWA certified - UID US002828 Certified Open Source Hardware Independently verified open by the Open Source Hardware Association Hardware (CERN-OHL-S v2), firmware (MIT) & documentation (CC BY-SA 4.0) — design files, source, and docs are all openly licensed. View certification ↗

Why CO₂ matters

CO₂ is more than a number. It's a proxy for ventilation, crowding, and how awake your brain feels in a room.

Signal, not guesswork

See stale air before you feel it

Rising CO₂ often means exhaled air is building up. That's when rooms get stuffy, focus drops, and the "I need fresh air" feeling kicks in. KnowCO₂ makes that visible.

Real-time ppm readings 5 min rolling chart Temp + humidity
Thresholds that talk

Color-coded alerts at a glance

Tunable thresholds map directly onto the TFT display and rolling chart. Three display modes — text summary, big number, and live graph — so you pick what fits your space.

Configurable warning levels 3 display modes °C / °F toggle
Open by design

Trustable hardware & firmware

Built using the ESP32-S3 Feather with a pluggable CO₂ sensor layer — SCD41 by default, SCD4x and SCD30 supported, Senseair Sunrise and Sensirion STCC4 in testing. Adding a new sensor is one driver file. All firmware, PCB files, and 3D enclosure models are open so you can inspect, modify, and improve them.

Reproducible builds Forkable on GitHub OSHWA Certified · US002828
Connected everywhere

MQTT, HTTP, Adafruit IO & more

Native Home Assistant integration (HACS) plus MQTT auto-discovery — sensors appear in HA with zero YAML. Or push to any MQTT broker, post JSON to a custom HTTP endpoint, or stream to Adafruit IO — all from the built-in Wi-Fi portal.

Home Assistant (HACS) MQTT Adafruit IO HTTP POST CSV export
Field-ready

Battery power + OTA updates

Runs on USB-C or an optional Li-Po battery with live fuel-gauge display. Update the firmware wirelessly over Wi-Fi — no cables, no reflashing tools needed.

Li-Po battery support OTA firmware updates Battery % display
Built for everyone

22 languages, full accessibility

The web configuration portal is fully translated into 22 languages. Built with ARIA roles, keyboard navigation, and reduced-motion support throughout.

EN · ES · FR · DE · PT · IT · NL · SV PL · CS · RU · UK · TR · VI · ID HI · BN · TA · TH · JA · ZH · KO WCAG accessible

How it works

From sensor readings to graphs and Wi-Fi telemetry in a few simple layers.

Step 1
🧠

Sense

The CO₂ sensor on I²C captures CO₂, temperature, and humidity every few seconds using high-accuracy NDIR technology. Ships with SCD41; the firmware's pluggable driver layer auto-detects SCD4x and SCD30, with more sensors in testing.

Step 2
📊

Visualize

The ESP32-S3 updates the TFT display with a smooth rolling chart, color-coded by your configured thresholds.

Step 3
📡

Connect

Built-in Wi-Fi lets you spin up an access point for configuration, or join your local network and push JSON to a cloud endpoint or local server.

Step 4
🌍

Share

Log readings, pipe them into dashboards, or contribute anonymized data to collaborative air-quality projects. Your device, your data pipeline.

For builders & educators

KnowCO₂ is a kit-friendly platform that's simple enough for a first hardware project, but extensible enough for serious telemetry.

Reference build

The default build uses off-the-shelf parts so anyone can assemble and flash the device without special tools.

MCU
Adafruit ESP32-S3 TFT Feather
Dual-core USB-C Wi-Fi + BLE
Sensor
SCD41 (default) — swappable: SCD4x & SCD30 supported, more in testing
NDIR CO₂ + Temp + RH Pluggable drivers
Power
USB-C power + optional Li-Po battery (not included)
Portable External battery support
Enclosure
3D-printable
Screw-together case Sensor airflow path

Example JSON telemetry

Point the device at your API or MQTT bridge. Each reading arrives as a small JSON payload you can drop into any stack.

POST https://api.knowco2.com/v1/ingest { "device_id": "co2-node-1", "ts": 1781200402, "co2": 742, "temp_c": 22.3, "rh": 46.1, "battery_pct": 87, "battery_v": 4.02, "scd_serial": "12AB34CD5678", "board_id": "adafruit_feather_esp32s3_reverse_tft" }
Ready for AWS, Influx, Home Assistant & more.

FAQ

A few quick answers. You can always dive deeper in the docs and GitHub issues.

Is this a finished product?

Yes — KnowCO₂ is a complete, ready-to-use device. What makes it different is that it's also fully repairable, extensible, and open. Every part can be replaced or 3D-printed, the firmware updates over Wi-Fi, and it integrates out of the box with Home Assistant, MQTT brokers, Adafruit IO, and any custom API. You own it completely — including the right to modify, repair, and extend it however you like.

What accuracy should I expect?

KnowCO₂ ships with an SCD41 — a professional-grade NDIR CO₂ sensor. The firmware's sensor driver registry also supports the full SCD4x family and the SCD30, with the Senseair Sunrise and Sensirion STCC4 in testing — and adding a new sensor takes one driver file, so supported hardware keeps growing. Calibration docs are in the repo.

Can I change the CO₂ thresholds and chart behavior?

Yes. Thresholds, chart scale, alert modes, and more are configurable via the Wi-Fi settings page and in firmware. The JSON configuration is stored on the device so you can tweak and re-deploy.

How does Wi-Fi configuration work?

The device can create its own access point for first-time setup. From there, you can scan for networks, set the password, and configure your API endpoint or API key. If you skip Wi-Fi, it still works as a fully offline CO₂ display.

Is the hardware certified open source?

Yes. KnowCO₂ is certified by the Open Source Hardware Association (OSHWA) under UID US002828. OSHWA independently verifies that the hardware design files, firmware, and documentation are all openly licensed — hardware under CERN-OHL-S v2, software under MIT, and documentation under CC BY-SA 4.0 — so anyone is free to study, modify, build, and even sell the design.

Repair & self-service

KnowCO₂ is designed to be fully user-serviceable. Every part is replaceable, every file is published, and you never need a specialist to fix or upgrade it.

Every part is replaceable — drag to explore
🖨️
3D-printable parts

Print your own replacement parts

All enclosure and sensor bracket files are published on GitHub. Print a replacement or customise the design for your own build.

  • Main enclosure body & lid
  • Sensor bracket with airflow cutout
  • FDM-friendly — PLA or PETG, no supports needed
STL & 3MF on GitHub Screw-together assembly
🔌
Sensor swap

Replace or upgrade your CO₂ sensor

The sensor uses a STEMMA QT cable over I²C — no soldering needed. SCD30, SCD40, SCD41 and other SCD4x variants are supported today; Senseair Sunrise and Sensirion STCC4 are in testing, and the open driver API means new sensors can be added with a single file.

  • Power off the device
  • Unplug the STEMMA QT cable from the old sensor
  • Plug in the new sensor and reassemble
  • Power on — sensor model is detected automatically
No soldering Auto-detected on boot More sensors coming
📡
Firmware updates

Update firmware over Wi-Fi

No USB cable or flashing tool needed. Upload a new firmware file directly from your browser while the device is on your local network.

  • Connect the device to your Wi-Fi network
  • Open the device web portal (see Local Web Interface)
  • Go to Settings → Update, upload the new firmware file
  • Device reboots automatically — settings are preserved
No USB required Settings preserved
🐍
CircuitPython runtime

Powered by open-source software, all the way down

KnowCO₂ runs on CircuitPython — a free, open-source programming language maintained by Adafruit and a global community. That means the software powering your device is fully auditable, improvable, and never locked to a vendor.

  • If you ever need to refresh the runtime, it takes about two minutes with a USB-C cable
  • Plug in, double-press Reset, and drag the new runtime file onto the drive that appears
  • Reinstall the firmware from GitHub and you're back up
Open source runtime Active community USB-C cable only
🌐
Local web interface

Access the device on your network

Once connected to Wi-Fi, the device is reachable by name via mDNS — no need to find its IP address. The 4-character ID is shown on the device display.

  • Connect device to your Wi-Fi (see Getting Started)
  • Open knowco2-xxxx.local in any browser on the same network
  • Configure thresholds, Wi-Fi, MQTT, and cloud settings
  • Export a full CSV of readings from the portal
mDNS — no IP needed CSV export built in
🎛️
Using the device

Buttons & display modes

Three physical buttons control the display. No app or phone needed for day-to-day use.

  • A — toggle between °C and °F · hold 2 s for low-power mode
  • B — cycle display: summary → big number → live graph
  • C — switch between readings and Wi-Fi info / QR code
  • C (hold) — toggle between Wi-Fi client and access point mode
3 display modes AP & client Wi-Fi QR code for setup