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 sensor — compatible with SCD4x and SCD30 series 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
Drag to rotate · Scroll to zoom
Wi-Fi telemetry ready
MQTT · HTTP · Adafruit IO · CSV export

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 an interchangeable CO₂ sensor — SCD41 by default, compatible with the full SCD4x family and SCD30. All firmware, PCB files, and 3D enclosure models are open so you can inspect, modify, and improve them.

Reproducible builds Forkable on GitHub
Connected everywhere

MQTT, HTTP, Adafruit IO & more

Push readings to any MQTT broker (Home Assistant, Mosquitto), post JSON to a custom HTTP endpoint, or stream directly to Adafruit IO — all configurable from the built-in Wi-Fi portal.

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

9 languages, full accessibility

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

EN · ES · FR · DE · PT IT · 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 — compatible with SCD4x and SCD30 series sensors.

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) — SCD4x & SCD30 compatible
NDIR CO₂ + Temp + RH
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 /api/telemetry/knowco2 { "device_id": "knowco2-nyc-lab-01", "ts": "2025-01-07T14:03:22Z", "co2_ppm": 742, "temperature_c": 22.3, "humidity_pct": 46.1, "mode": "fixed_scale", "thresholds": { "low": 800, "medium": 1200, "alert": 1500 }, "firmware": "RC-41" }
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 also supports the full SCD4x family and the SCD30, so you can swap in a different sensor depending on your accuracy or range needs. 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.

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. Compatible with SCD30, SCD40, SCD41, and other SCD4x variants.

  • 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
📡
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
  • 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