Air-Quality Monitoring System

A full-stack IoT air-quality monitor: ESP32 firmware reading four I²C sensors, MQTT into TimescaleDB, and Grafana dashboards — all Dockerized on a Raspberry Pi.

Languages: C++ (firmware), Python (backend)

License: MIT

The build runs end to end: an Arduino Nano ESP32 reads four I²C sensors — CO₂ (Infineon XENSIV PAS), particulate matter (Sensirion SPS30), temperature/humidity/pressure (Bosch BME280), and VOC (Sensirion SGP40) — and shows a color-coded live view on a small TFT display. Readings travel over MQTT to a Dockerized backend where they land in TimescaleDB; outdoor readings come from a PurpleAir node polled through its API, with EPA-corrected PM2.5 for honest indoor-versus-outdoor comparisons.

Arduino Nano ESP32 sensor node wired on a breadboard

Sensor node on a breadboard during development

Design notes: