33 sensors supported. Zero code required. Just plug in and breathe 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. /dev/ttyUSB0 COM3 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. 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. pip install sudo 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. pollusensweb.pages.dev 33 supported models 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 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) GitHub repo That's it. No compiled drivers. No firmware flashing. The browser does everything. Now, we're at 33 sensors in the default JSON, covering: 33 sensors 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 Plantower (PMS1003 through PMSA003-S, plus the industrial PS3003A) Plantower Sensirion (SPS30, SCD30 for CO2) Sensirion Honeywell (HPMA series) Honeywell SenseAir (S8, K30, K33 - CO2 sensors) SenseAir Nova PM (the classic SDS011) Nova PM Panasonic (SN-GCJA5) Panasonic And a bunch more from smaller manufacturers And a bunch more 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). Live Charts: 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. CSV Export: Raw Packet Inspection: Hex dump of incoming frames with checksum pass/fail indicators. Essential when you're debugging a new sensor config. Raw Packet Inspection: 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. Webhook Streaming: Custom Commands: Send initialization sequences or periodic polling commands. Some sensors need a wake-up byte; others want a specific query frame. Custom Commands: The "It Just Works" Philosophy Here's my hot take: hardware tools should be as easy as software tools. 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. lowering the barrier to seeing your data. Try It or Fork It The whole thing is open source: github.com/WeSpeakEnglish/polluSensWeb 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. pollusensweb.pages.dev download Find it useful? Star the repo so others can find it too. repo 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. Built with caffeine, Chart.js, and the stubborn belief that hardware shouldn't require a CS degree to operate.