SerialPlotster: graphing for microcontrollers

SerialPlotster is a graphing tool for data coming from microcontrollers, like Arduino, CircuitPython or MicroPython. It’s free and cross-platform, available for MacOS, Windows, and Linux. It plots line-oriented numeric data from a serial port as a real-time strip chart, with scrub/zoom that does not pause data collection, plus a console pane for bidirectional communication with the device. And it can collect data up to audio rates.

screenshot of SerialPlotster in action

I love the Arduino IDE. It gets a lot of hate but is actually quite good. It’s feature-rich, yet still usable by newbies. And one of it’s truly excellent aspects is its Serial Plotter Tool. Added back in 2015, I think it’s one of the best additions to the IDE.

Just a print a value in your Arduino sketch and you could see a cool plot of it. Add more values and now you have a multi-series real-time plot of those values against each other. The obvious use is data-logging but I find it really helpful for debugging. Being able to see how a value changes graphically hits different than just watching scrolling numbers.

As I started doing CircuitPython & Micropython stuff, I lost the plotter. The Arduino plotter, in an attempt to help, kept grabbing the serial port, making connecting back to the serial REPL frustrating. The Mu editor for CircuitPython editor has a nice, but it’s also port grabby. The Thonny editor got a plotter in 2019 (inspired by Mu), but I just don’t like Thonny for reasons I’ve not inspected.

So clearly plotters are useful, everyone has them. But not me: I want to use my own choice of editor, I don’t want a huge IDE that may or may not have a plotter extension. Every so often I’d go looking for plotter apps. There are a few, but they’re often abandoned or web-based.

One really great web-based one is called Web Serial Plotter by atomic14. If you run a Chromium-based browser that supports WebSerial and like web apps, it’s a great solution. No need to look further.

I wanted an actual application, for both Mac and Linux. I’ve built many of these in the past. Normally I’d use Electron, which as you may know, let’s you write JavaScript to make desktop apps. This is great but means the app ends up being huge (over 200 MB!) because your Electron app is really a full install of Chromium wearing your app’s clothes. It’s slow to launch and takes up a lot of RAM, because browsers are basically OSes themselves these days. I always feel kinda gross and wasteful writing in Electron.

The alternative to Electron I’ve been playing with lately is called Tauri. With Tauri, the OS’s built-in web renderer instead of packaging Chromium, and the OS-specific code you write in Rust, instead of JavaScript. If you’re experienced with making web apps, 90% of your skills and process stay the same, as you’re still writing front-end JavaScript code. But if you can figure out that 10% that’s Rust, you’re rewarded with an app that’s literally 20 times smaller with a tiny RAM and CPU usage footprint. Instead of a 200 MB app, it will be 10 MB. Really!

Now I don’t know Rust. I know just enough to know I don’t know anything. For a few days I banged on adapting the concepts of “web-serial-plotter” to Tauri, and got it sorta working. But not really. My lack of Rust knowledge and lack of modern web dev skills was holding me back. So I brought in Claude Code and asked it figure out what I was doing wrong. It was quite helpful! It rewrote huge swaths of my code, most all of my Rust, and cleaned up how I was using my React objects in the GUI.

And then, most importantly, it helped write a huge barrage of tests for the data parser in Rust. Now that I can have tests written for me, I’m a huge fan of test suites for my projects!

So, thanks atomic14 for Web Serial Plotter. It looks like you also used Claude to help you write it and released it under GPL3. SerialPlotster is also on GPL3 and you can download pre-built and signed binaries for MacOS, Windows, and Linux. If you like it, let me know! If you have any suggestions for improvements or fixes, also let me know!

One Reply to “SerialPlotster: graphing for microcontrollers”

Leave a Reply

Your email address will not be published. Required fields are marked *