Online Serial Plotter
Graph live numbers from an Arduino, ESP32, Raspberry Pi Pico or any USB-to-serial device right in your browser. Print comma, space or label:value separated readings and watch them as colored lines; pause to scroll back, zoom, and save the data as CSV.
Last updated:
12,34.5,-7 or temp:21.5 hum:40Plot pasted data (no device needed)
Last raw lines
How to use the Online Serial Plotter
- Print numbers from your sketch, one reading per line, for example
Serial.print(a); Serial.print(','); Serial.println(b);. - Close other serial apps such as the Arduino IDE Serial Monitor, because only one program can use a port at a time.
- Pick the baud rate that matches
Serial.begin()and click Connect serial port, then choose your board in the browser's list. - Watch the lines draw in real time. Click a legend item to hide a line, or switch the Y axis to a fixed range.
- Pause and zoom to inspect a spike: drag the chart or use the slider to scroll back, and the Zoom buttons (or Ctrl + mouse wheel) to change how many points are shown.
- Download CSV to open the recorded samples in a spreadsheet, or Download PNG to save the chart.
Example Arduino sketch for the serial plotter
Any program that prints numbers followed by a newline will plot. This short sketch sends two analog readings and their average as labeled values:
void setup() {
Serial.begin(115200);
}
void loop() {
int a = analogRead(A0);
int b = analogRead(A1);
Serial.print("A0:"); Serial.print(a);
Serial.print(",A1:"); Serial.print(b);
Serial.print(",avg:"); Serial.println((a + b) / 2.0);
delay(20); // about 50 lines per second
}
On an ESP32 or Raspberry Pi Pico running MicroPython, print(a, b, sep=",") works the same way.
Accepted line formats
| Line sent by the device | Result in the plotter |
|---|---|
512 | One line named Value 1 |
512,300,-12.5 | Three lines (Value 1, 2, 3) |
512 300 or tab separated | Two lines; spaces, tabs, commas and semicolons all work |
temp:21.5,hum:40 | Two lines named temp and hum |
x=0.12 y=-0.98 z=9.81 | Three lines named x, y and z |
pitch roll (words only) | Header: names the following unlabeled columns |
Booting... | Ignored (shown only in Last raw lines) |
1.2e-3 | Scientific notation is supported |
Tips for smooth live plots
- Pick a fast baud rate such as 115200 when you send many values; at 9600 baud only about 960 characters per second fit through the link.
- Add a small delay (10 to 50 ms) in your loop. Hundreds of lines per second are fine, but a few dozen are easier to read.
- Keep the label names short and the same on every line, so each value stays on its own colored line.
- Use a fixed Y range (for example 0 to 1023 for a 10-bit ADC) when auto scaling makes small noise look huge.
- Pause before you export if you want the CSV to match exactly what you are looking at.
Frequently asked questions
What data format does the serial plotter understand?
Send one reading per line, ending with a newline (Serial.println). Numbers can be separated by commas, spaces, tabs or semicolons, like 12,34.5,-7. You can also label values as name:value or name=value, for example temp:21.5,hum:40, and each label becomes its own line in the chart. A line that contains only words, such as temp hum, is used as names for the unlabeled columns that follow.
Which browsers support the online serial plotter?
Connecting to a real serial port needs the Web Serial API, which is available in desktop Chrome, Edge and Opera version 89 or newer on a secure https page. Firefox and Safari do not support Web Serial. In those browsers you can still use the demo signal or paste saved serial output to plot it.
Why does the plot show nothing or random garbage?
The most common cause is a baud rate mismatch: the rate selected here must equal the one in Serial.begin() on your board. Also check that each reading ends with a newline, that the USB cable carries data (not charge-only), and that no other program, such as the Arduino IDE Serial Monitor, has the port open.
How many values and samples can it plot?
Each line can hold up to 10 or more values; the first ten get distinct colors. The plotter keeps the most recent 60,000 samples in memory, and when that fills up it drops the oldest 10,000. You can show between 10 and 60,000 points at once; very dense windows are drawn with min/max decimation so short spikes are not lost.
How do I save the plotted data?
Click Download CSV. The file has one row per received line with the sample number, the time in milliseconds since the plot started and one column per series. Missing values are left empty, so the file opens cleanly in Excel, Google Sheets or LibreOffice. Download PNG saves an image of the current chart view.
Is my serial data sent anywhere?
No. The page reads the port directly through your browser and draws the chart locally. Nothing is uploaded, and the browser only lets the page access the specific port you choose in its permission dialog.
How is this different from the Arduino IDE Serial Plotter?
It works the same way, reading newline-terminated numbers, but runs in a browser tab with no install. It adds pausing with scroll back, adjustable window size, fixed or automatic Y range, per-line min/max readouts and CSV export of every sample.
Are all the tools on FreeToolCabin tested for quality and accuracy?
Yes! Every tool on our site undergoes automated Q/A testing in real browser environments to ensure high precision, correct output, and zero errors. If you happen to spot a bug or have a suggestion, please contact us at [email protected] and our team will review it right away.