Перейти к содержанию

Плоттер COM-порта в браузере

Подключите Arduino, ESP32 или адаптер USB-UART — и числа, которые печатает плата, сразу встанут графиком: до восьми рядов, со статистикой и сохранением в CSV. В браузере без Web Serial график строится по вставленному тексту. Данные не уходят дальше вашего браузера.

Источник данных
Масштаб

Нажмите «Подключиться» и выберите порт. Программа на плате должна печатать числа по строкам, например Serial.println(value).

Расчёт выполнен по формулам и данным из источников, приведённых на этой странице, и не заменяет проверку: параметры компонентов у разных производителей и даже партий различаются. Перед применением сверяйте результат с документацией на конкретные детали.

Плоттер читает последовательный порт через Web Serial — стандарт WHATWG, по которому страница получает доступ только к тому порту, который вы сами выбрали в окне браузера. Каждая строка с числами становится точкой на графике; ряды подписываются по меткам или по номеру столбца. Всё остаётся в браузере: на сервер плоттер ничего не отправляет.

Коротко

  • Формат строки: числа через запятую, пробел или табуляцию, конец — LF или CR LF.
  • Метки: пары «имя:значение» или «имя=значение»; строка из одних имён перед первой строкой данных с тем же числом столбцов — заголовок.
  • Ряды: до 8; каждый можно скрыть.
  • Окно: последние 100–5000 точек; пауза замораживает график, запись продолжается.
  • Масштаб: автоматический по видимым рядам или свои пределы.
  • Экспорт: CSV по RFC 4180 со временем в секундах.

Как подключиться

  1. Загрузите в плату программу, которая печатает числа по строкам (пример ниже).
  2. Выберите ту же скорость, что в Serial.begin(), и нажмите «Подключиться».
  3. Выберите порт в окне браузера: CH340, CP210x, FTDI или USB-порт самой платы.

Формат кадра — 8N1, его используют Arduino и ESP32 по умолчанию. Если нужен другой формат, управление линиями DTR и RTS или отправка команд, откройте терминал COM-порта: он работает с тем же портом, только по очереди — один порт открывает одна страница или программа.

БраузерWeb Serial
Chrome, Edgeс версии 89
Operaс версии 75
Firefoxс версии 151
Chrome для Androidс версии 148
Safariнет — график строится по вставленному тексту

Что печатать на плате

Достаточно одной строки на точку. Для Arduino:

void setup() {
  Serial.begin(115200);
}

void loop() {
  int raw = analogRead(A0);
  float volts = raw * 5.0 / 1023;
  Serial.print("raw:");
  Serial.print(raw);
  Serial.print(",volts:");
  Serial.println(volts, 3);
  delay(20);
}

Строки выглядят так: raw:512,volts:2.502. Плоттер распознаёт форматы:

СтрокаЧто получится
512один ряд с именем 1
512 498 3.3 или 512,498,3.3три ряда: 1, 2, 3
raw:512,volts:2.502ряды raw и volts
temp: 21.5 hum: 40ряды temp и hum
t,u,i перед первой строкой 0.1,5.02,0.31заголовок: ряды t, u и i
Start или OK между строками данныхстрока пропущена
Connecting to WiFi...строка пропущена

Числа — как их печатает C: -12, 3.14, 1e-3. Значения nan, inf и ovf, которые печатает Serial.print() вместо числа, на график не попадают — в этом ряду остаётся разрыв, остальные числа строки рисуются. Если в строке не хватает какого-то ряда, его линия тоже прерывается, остальные ряды рисуются как обычно.

На ESP32 с ESP-IDF то же самое даёт printf("temp:%.2f,hum:%.1f\n", t, h);. Загрузочные сообщения ESP32 (rst:0x1 (POWERON_RESET), load:0x3fff0030,len:1344) и строки журнала ESP_LOGI плоттер пропускает: строка берётся только целиком, а в них есть слова без числа или значения в шестнадцатеричном виде.

Скорость и сколько точек в секунду

Каждый байт в формате 8N1 — 10 бит на линии, поэтому на 115 200 бод проходит не больше 11 520 байт в секунду. Строка raw:512,volts:2.502 с CR LF — 21 байт, значит, до 548 строк в секунду. На 9600 бод тот же поток — 45 строк в секунду; если плата печатает чаще, у Arduino на AVR заполняется буфер передачи на 64 байта, и Serial.print() ждёт, пока байты уйдут в линию: программа замедляется до скорости порта, а точки приходят реже, чем задумано. Подробнее — в ответе «Почему Serial.print замедляет программу Arduino». Сколько байт в секунду даёт другая скорость и формат, считает калькулятор кадра UART.

Плоттер перерисовывает график не чаще 20 раз в секунду, а в памяти держит от 100 000 до 125 000 последних точек: лишние удаляются пачкой, а не по одной. В окне видны последние 100–5000, в CSV попадает всё, что в памяти. Строки длиннее 4096 символов данными не считаются и пропускаются.

Масштаб, пауза и статистика

В автоматическом режиме ось подстраивается под видимые ряды: деления выбираются кратными 1, 2 или 5, а ровная линия рисуется посередине. Свой масштаб удобен, когда нужно сравнивать с пределами: для 10-битного АЦП Arduino это 0 и 1023, для 12-битного АЦП ESP32 — 0 и 4095, о его нелинейности — в калькуляторе АЦП ESP32.

Под графиком — последнее значение, минимум, максимум и среднее каждого ряда по точкам в окне. Так удобно оценить шум датчика: разница максимума и минимума на неподвижном сигнале — размах шума в единицах АЦП. Пересчитать отсчёты термистора в температуру поможет калькулятор NTC.

Кнопка «Пауза» останавливает график, чтобы рассмотреть всплеск, а данные продолжают записываться. «Сохранить CSV» выгружает всё записанное, а не только окно.

CSV для таблиц и Python

Файл начинается строкой заголовка: time_s и имена рядов. Время — секунды от первой точки с точностью до миллисекунды по часам компьютера, а не платы: на него влияют буферы USB, поэтому для точного шага по времени печатайте millis() отдельным рядом. Разделитель — запятая, десятичная точка, конец строки CR LF, как требует RFC 4180; имя ряда с запятой или кавычкой берётся в кавычки.

import csv
with open("serial-plot.csv", newline="") as f:
    rows = list(csv.DictReader(f))
print(rows[0]["time_s"], rows[0]["raw"])

Частые вопросы

Что должна печатать плата, чтобы получился график?

Одну строку на каждую точку: числа через запятую, пробел или табуляцию и перевод строки в конце — Serial.println() добавляет его сам. Например, Serial.print(t); Serial.print(','); Serial.println(h); даёт два ряда с именами 1 и 2. Чтобы ряды были подписаны, печатайте пары «имя:значение»: temp:21.5,hum:40. Это тот же формат, что у Serial Plotter в Arduino IDE 2.

Почему график не появляется, хотя в мониторе порта числа есть?

Чаще всего не совпадает скорость: в программе Serial.begin(9600), а плоттер слушает на 115 200. Вторая причина — порт занят монитором порта Arduino IDE или другой программой: закройте их. Третья — в строке есть слова: строки вроде «Temp 21» — без двоеточия или знака равенства между именем и числом — плоттер пропускает. Последние строки из порта видны под графиком.

Можно ли использовать десятичную запятую?

Нет: запятая разделяет значения, поэтому 21,5 станет двумя числами — 21 и 5. Печатайте числа с точкой, как это делают Serial.print() и printf() в C. В таблице статистики и на осях плоттер показывает числа с запятой, по-русски.

В каком формате сохраняется CSV?

Первый столбец — время в секундах от первой точки (для вставленного текста — номер точки), дальше по столбцу на каждый ряд. Разделитель — запятая, десятичный разделитель — точка, строки заканчиваются CR LF по RFC 4180. Пропущенное значение — пустое поле. Файл открывается в LibreOffice Calc, Excel, Python и любой программе для таблиц; в русской версии Excel при открытии укажите разделитель «запятая».

Источники

  1. Arduino. Using the Serial Plotter Tool (Arduino IDE 2 documentation) — пример со строкой Variable_1:<значение>,Variable_2:<значение> и println; конец строки — LF или CR LF; разделители — запятая, табуляция или пробел; метка ряда — префикс «имя:», без меток подписи создаются автоматически; ряды можно скрывать флажками
  2. WHATWG. WebSerial Standard, Living Standard (обновлён 8 октября 2026) — requestPort() — выбор порта пользователем, open() с baudRate; ошибки чтения BreakError, FramingError, ParityError, BufferOverrunError, отключение — NetworkError; только защищённый контекст; функция политики разрешений serial для iframe
  3. MDN. browser-compat-data: api/Serial.json (коммит 1d670c0, 8 октября 2026) — Serial — Chrome и Edge с версии 89, Opera с 75, Firefox с 151, Chrome для Android с 148; Safari — нет
  4. IETF. RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files, 2005 — строки CSV заканчиваются CR LF, первая строка может быть заголовком, поле с запятой, кавычкой или переводом строки берётся в кавычки, кавычка внутри удваивается

Где пригодится

Встроить калькулятор на свой сайт

Скопируйте код и вставьте его в HTML страницы, статьи или вики. Виджет бесплатный, без рекламы, счётчиков и cookie. Условие одно — ссылка на GAW под рамкой остаётся на месте. Подробнее о виджетах

<iframe src="https://gaw.ru/embed/serial-plotter/" title="Плоттер COM-порта в браузере" width="100%" height="640" style="border:1px solid #e3e5e9;border-radius:8px" loading="lazy" allow="clipboard-write; serial"></iframe>
<p style="margin:6px 0 0;font-size:14px">Калькулятор: <a href="https://gaw.ru/tools/serial-plotter/">Плоттер COM-порта в браузере</a> — GAW.ru</p>
Автоподстройка высоты рамки

Если сайт разрешает скрипты, добавьте этот код один раз в любом месте страницы: рамка будет менять высоту вместе с результатом расчёта.

<script>window.addEventListener("message",function(e){if(e.origin!=="https://gaw.ru"||!e.data||e.data.type!=="gaw:embed-height")return;var f=document.querySelectorAll('iframe[src^="https://gaw.ru/embed/"]');for(var i=0;i<f.length;i++)if(f[i].contentWindow===e.source)f[i].style.height=e.data.height+"px"})</script>

Обновлено .

Нашли ошибку в расчёте?