PINSCOPEField Instrument 005
GitHub
Single-file HTML console

PinScope

Drop one HTML file into a browser, connect to an Arduino over USB serial, WiFi, MQTT, or BLE, and get a live console for every pin on the board. Strip chart, FFT, spectrogram, I2C scanner, calibration wizard, oscilloscope-style trigger, scripted automation, sandboxed plugin system. No build step. No framework. No external assets at runtime.

View on GitHub Read the docs Bring up a board

What it does

PinScope is a browser console for embedded boards that speak a small JSON wire protocol. You flash a firmware sketch onto the board (one of three variants ship with the repo: serial, BLE, MQTT). You open pinscope.html in any modern browser. The page connects over the transport you chose and gives you a live view of every digital and analog pin, plus everything the firmware can do with them.

It is single-file by design. Once the page loads, it makes no further network requests. You can serve it from a Raspberry Pi, drop it on a USB stick, save it to a thumb drive for offline field work, embed it inside a CI run, or pin it to localhost. It runs anywhere a Chromium browser does.

What you get

Pin Control

Click any digital pin's mode badge to cycle through input, input-pullup, output, PWM, or interrupt-counting FREQ mode. Outputs toggle on click; PWM pins get a duty slider.

Strip Chart

Up to 14 channels at once with per-trace stats, calibration in real units, threshold alerts, CSV one-shot and streaming export, PNG snapshots, capture and replay.

FFT & Spectrogram

Magnitude spectrum and rolling waterfall for any analog or virtual channel. Hann, Hamming, and Blackman windows. Log or linear scaling.

I2C Scanner

SCAN BUS highlights every responding I2C address on a 16×8 grid. Read or write any register. Four polling slots feed I2C registers into virtual channels at up to 50 Hz.

Sensor Library

One-click presets for TMP102, TMP117, MCP9808, DS3231, INA219, APDS-9301, PCF8591. Sensible defaults and unit-conversion math pre-filled.

Cross-pin Math

Derive a virtual channel from any expression of other channels. Differential measurements, magnitude of XY pairs, unit conversions, anything new Function() can compile.

Calibration Wizard

Two-point fit. Apply a known reference, click CAPTURE LOW. Apply the high reference, CAPTURE HIGH. PinScope computes slope and offset and shows a live preview.

Scope Trigger

Rising, falling, above, or below threshold. Configurable pre and post windows. The chart freezes onto the captured event with a red fire line and threshold marker.

Baseline & Diff

Load a previously captured run as a faded ghost trace overlay. Toggle a live-minus-baseline diff trace on top. Catch regressions between hardware revisions.

Scripted Automation

A sandboxed JS subset for repeatable test sequences. Loops, awaits, asserts, all blocked from touching anything outside the device. Source auto-saves to the session.

Plugin System

Load extensions that get their own panel on every device card. Sandboxed iframes, postMessage bridge, persistent per-device state. Four example plugins ship with the repo.

Session Diff

Compare your current device's config against a saved JSON file. Calibrations changed, alerts added or removed, scripts edited, plugin state changed: see exactly what differs.

Supported boards

BoardSerialBLEWiFi / MQTT
Arduino Uno R3 (any AVR)YesNoVia bridge
Arduino Nano 33 IoTYesYesYes
Arduino Uno R4 WiFiYesYesVia bridge
Arduino Uno QYesExperimentalVia bridge

Any board that speaks the wire protocol over a transport PinScope understands will work. The provided pinscope.ino firmware detects the host MCU at compile time and adapts the ADC resolution, name, and capability set automatically.

Quick start

SHELL
git clone https://github.com/mbparks/pinscope.git
cd pinscope
open pinscope.html       # macOS
xdg-open pinscope.html   # Linux
start pinscope.html      # Windows

No install for the browser side. The Arduino firmwares need arduino-cli or the Arduino IDE 2.x. See the bring-up walkthrough for board-specific setup.

Design principles

PinScope is built around a few rules that produced everything else. They are worth knowing if you want to extend it or fork it.

Learn more