33 sensors supported. Zero code required. Just plug in and breathe
Look, I’ve been playing with air quality sensors for a while. You know the drill: you get this shiny new PM2.5 sensor, wire it up to a USB-UART adapter, and then… the nightmare begins.
You need Python. You need drivers. You need to figure out if it’s /dev/ttyUSB0 or COM3 or whatever. You spend 20 minutes in a terminal just to see if the thing is even alive. And half the time, you’re writing throwaway scripts just to verify that your $12 sensor actually works.
I got tired of that. So I built something stupidly simple.
The “Why Hasn’t Anyone Done This?” Moment
A few months ago, I was testing a bunch of Plantower sensors for a project. PMS7003, PMS5003, the usual suspects. Every time I wanted to check readings, I had to fire up a Python script, install pyserial, deal with virtual environments, yada yada.
And I thought: Wait. Chrome can talk to USB devices now.
The Web Serial API has been around since Chrome 89. It’s actually pretty mature. So why is everyone still using desktop apps for this?
I hacked together a single HTML page. Threw in Chart.js for visualization. Added a JSON config loader. And suddenly I could plug in a sensor, hit “Connect,” and see real-time graphs in my browser.
No pip install. No sudo. No electron apps eating 500MB of RAM.
Just a webpage.
How It Actually Works
You go to pollusensweb.pages.dev You pick your sensor from a dropdown (we’re at 33 supported models now, more on that in a sec). You click “Connect,” choose your USB port, and bam – live data streaming into charts.
The secret sauce is a JSON configuration file that describes each sensor’s protocol:
- Baud rate, data bits, stop bits
- Frame structure (start bytes, length, checksum position)
- JavaScript expressions to extract values from raw bytes
- Units and display names
(You will find plenty of JOSON examples on my GitHub repo; just check sensors.json and readme)
That’s it. No compiled drivers. No firmware flashing. The browser does everything.
Now, we’re at 33 sensors in the default JSON, covering:
- Plantower (PMS1003 through PMSA003-S, plus the industrial PS3003A)
- Sensirion (SPS30, SCD30 for CO2)
- Honeywell (HPMA series)
- SenseAir (S8, K30, K33 – CO2 sensors)
- Nova PM (the classic SDS011)
- Panasonic (SN-GCJA5)
- And a bunch more from smaller manufacturers
The cool part? Adding a new sensor doesn’t require touching the code. You just write a JSON config. If you have a UART sensor that spits out binary frames, you can probably support it in 10 minutes.
Real Talk: The Web Serial API Is Underrated
I feel like the Web Serial API is one of those browser features that developers sleep on. Everyone knows about WebRTC, WebGL, whatever. But direct hardware access from a webpage? That’s game-changing for IoT prototyping.
Yeah, it only works in Chromium browsers (Chrome, Edge, Brave). Firefox and Safari are dragging their feet. But for development and debugging? It’s perfect.
The security model is actually sane: the browser asks permission for every serial connection. You can’t just silently sniff someone’s USB devices. And since everything runs client-side, your sensor data never hits my server. It’s yours.
Features That Actually Matter
I didn’t want to build another bloated IoT platform. I wanted a tool I’d actually use. So here are the features that made the cut:
Live Charts: Multiple parameters, customizable colors, and resizable. You can pop out charts for different sensor groups (PM values vs CO2 vs VOCs).
CSV Export: One button, full session data with timestamps. Because eventually, you need to open this in Excel or feed it to your actual analysis pipeline.
Raw Packet Inspection: Hex dump of incoming frames with checksum pass/fail indicators. Essential when you’re debugging a new sensor config.
Webhook Streaming: HTTP POST/GET/PUT to external endpoints with templated JSON bodies. I use this to pipe data into InfluxDB or Home Assistant without any middleware.
Custom Commands: Send initialization sequences or periodic polling commands. Some sensors need a wake-up byte; others want a specific query frame.
The “It Just Works” Philosophy
Here’s my hot take: hardware tools should be as easy as software tools.
When you plug in a USB webcam, you don’t compile a driver. When you connect Bluetooth headphones, you don’t edit config files. But for some reason, UART sensors are still stuck in 1998.
PolluSensWeb is my attempt to fix that for my little corner of the hardware world.
It’s not perfect. The UI is functional, not beautiful. The code is vanilla JS because I didn’t want build steps. But it solves a real problem: lowering the barrier to seeing your data.
Try It or Fork It
The whole thing is open source: github.com/WeSpeakEnglish/polluSensWeb
You can use the hosted version at pollusensweb.pages.dev or just download and run it locally. No server required. No dependencies to install.
Find it useful? Star the repo so others can find it too.
Got a weird sensor that’s not on the list? You’re welcome to contribute a working JSON config for it – or just test it on hardware, and I’ll help you write the JSON. Drop me a message or open a PR. We’re at 33 sensors and counting, and I’d love to hit 50 by next year.
Built with caffeine, Chart.js, and the stubborn belief that hardware shouldn’t require a CS degree to operate.