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

Терминал COM-порта в браузере

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

Параметры порта

Не подключён

Вид

Нажмите «Подключиться» и выберите порт: USB-UART адаптер, Arduino, ESP32.

Байт принято: 0, отправлено: 0

Ввод

Enter — отправить, ↑ и ↓ — история. Escape-последовательности: \r \n \t \0 \e \\ и \xNN.

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

Терминал работает через Web Serial — стандарт WHATWG, который даёт странице доступ к последовательному порту с разрешения пользователя. Сайт видит только тот порт, который вы сами выбрали в окне браузера, и только пока страница открыта. Всё, что приходит и уходит, остаётся в браузере: на сервер терминал ничего не отправляет.

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

  1. Подключите устройство: адаптер USB-UART, плату Arduino или ESP32.
  2. Выберите скорость и формат кадра — такие же, как в программе устройства. Самый частый формат — 8N1: 8 бит данных, без чётности, 1 стоп-бит.
  3. Нажмите «Подключиться» и выберите порт в окне браузера.
  4. Читайте ответ в окне терминала, а команды набирайте в строке внизу: Enter отправляет, стрелки ↑ и ↓ листают историю.
БраузерWeb Serial
Chrome, Edge, Operaс версии 89
Firefoxс версии 151
Chrome для Androidс версии 148
Safariнет

Параметры порта

Web Serial принимает 7 или 8 бит данных, 1 или 2 стоп-бита, чётность «нет», «чёт» или «нечет» и аппаратное управление потоком по линиям RTS и CTS. Форматов с 5 и 6 битами данных, полутора стоп-битами и чётностью mark и space в стандарте нет. Каждый байт на линии — это старт-бит, биты данных, бит чётности, если он есть, и стоп-биты, поэтому предельный поток

B=fбод1+nданных+nчётн+nстопB = \frac{f_\text{бод}}{1 + n_\text{данных} + n_\text{чётн} + n_\text{стоп}}

Для 115 200 бод в формате 8N1 кадр — 10 бит, и по линии проходит не больше 11 520 байт в секунду. Как устроен кадр по битам и какой допуск по скорости выдерживает приёмник, показывает калькулятор кадра UART, а делитель для нужной скорости подберёт калькулятор скорости UART.

Текст и HEX

В текстовом виде строки разделяются по CR LF, LF или одиночному CR, а управляющие коды видны значками: ESC — ␛, нулевой байт — ␀. Кодировка — UTF-8, Windows-1251, KOI8-R или CP866; многобайтный символ UTF-8, разорванный между двумя порциями данных, собирается правильно.

В виде HEX приём делится на пакеты по паузе: порции, между которыми прошло меньше заданного времени (по умолчанию 20 мс), склеиваются в один пакет. Так ответ устройства, прочитанный браузером в несколько приёмов, встаёт одной строкой — её можно вставить в разбор кадра Modbus RTU.

Отправка

ПоследовательностьБайтЧто это
\r0DCR, возврат каретки
\n0ALF, перевод строки
\t09табуляция
\000нулевой байт
\e1BESC
\\5Cобратная косая черта
\xNNNNлюбой байт

В текстовом режиме к строке добавляется выбранный конец строки: команда AT с CR LF уходит байтами 41 54 0D 0A. Русские буквы кодируются в выбранной кодировке. В режиме HEX байты отправляются ровно так, как набраны, без конца строки: например, запрос Modbus 01 03 00 00 00 0A C5 CD.

DTR и RTS

Кнопки DTR и RTS включают и выключают выходные линии адаптера. Многие платы используют их для сброса: на платах ESP32 и ESP8266 эти линии через два транзистора управляют сбросом EN и выводом выбора загрузки — так esptool сам переводит чип в режим прошивки, подробнее — в статье «Прошивка ESP32: esptool, режим загрузки и частые ошибки». По документации esptool одновременное включение обеих линий чип не сбрасывает, а включение одной из них может его перезапустить или удержать в сбросе. Подробнее о линиях и уровнях — в разделах UART и RS-232.

Ошибки

Браузер сообщает об ошибках приёма, и терминал показывает их в журнале серым. Ошибка кадра (нет стоп-бита) почти всегда значит неверную скорость или формат. BREAK означает, что приёмник увидел сигнал прерывания — долгий ноль на линии. Переполнение буфера — данные шли быстрее, чем страница успевала их читать. Если устройство выдернули, порт закрывается сам. Журнал можно сохранить в текстовый файл кнопкой «Сохранить» — со временем каждой строки.

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

В каком браузере работает терминал COM-порта?

Там, где есть Web Serial: по данным MDN это Chrome, Edge и Opera с версии 89, Firefox с версии 151 и Chrome для Android с версии 148. В Safari Web Serial нет. Страница должна быть открыта по HTTPS, а порт браузер показывает только после нажатия кнопки.

Почему порт не открывается?

Чаще всего его держит другая программа: монитор порта Arduino IDE, PuTTY или второй терминал. Закройте её и подключитесь снова. Если в списке нет нужного порта, проверьте кабель и драйвер адаптера (CH340, CP210x, FTDI).

Почему вместо текста приходят непонятные символы?

Обычно не совпадает скорость: устройство передаёт на 9600 бод, а терминал слушает на 115 200, — тогда ещё бывают ошибки кадра. Если английский текст читается, а русский нет, поменяйте кодировку на ту, в которой текст записан в программе устройства: UTF-8, Windows-1251, KOI8-R или CP866.

Как отправить байт 0x1B или Ctrl+C?

В текстовом режиме — escape-последовательностью: \e или \x1B для ESC, \x03 для Ctrl+C, \0 для нулевого байта. Или переключите ввод в HEX и наберите байты как есть: 1B, 03 — в этом режиме конец строки не добавляется.

Источники

  1. WHATWG. WebSerial Standard, Living Standard (обновлён 8 октября 2026) — SerialOptions: baudRate обязателен и больше нуля; dataBits 7 или 8 (по умолчанию 8), stopBits 1 или 2 (по умолчанию 1), parity none, even или odd, bufferSize по умолчанию 255, flowControl none или hardware (RTS и CTS); open() отклоняет другие значения; ошибки чтения BreakError, FramingError, ParityError, BufferOverrunError, отключение устройства — NetworkError; setSignals — DTR, RTS и break, getSignals — DCD, CTS, RI, DSR; только защищённый контекст (HTTPS), выбор порта — по действию пользователя; разд. 6.1 — функция политики разрешений serial, по умолчанию 'self'
  2. MDN. browser-compat-data: api/Serial.json и api/SerialPort.json (коммит 1d670c0, 8 октября 2026) — Serial — Chrome с версии 89 (Edge и Opera — по Chrome), Firefox с версии 151, Chrome для Android с версии 148; Safari и Android WebView — нет
  3. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B), 2020 — разд. 20.4 — кадр UART: старт-бит, 5–9 бит данных младшим битом вперёд, бит чётности и один или два стоп-бита
  4. Espressif. esptool documentation: Boot Mode Selection — esptool переводит чип в режим загрузки линиями DTR и RTS адаптера USB-UART, подключёнными к EN и выводу выбора загрузки; DTR и RTS активны низким уровнем; при одновременном включении обеих линий схема на двух транзисторах чип не сбрасывает; некоторые ОС и программы включают RTS и DTR при открытии порта
Встроить калькулятор на свой сайт

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

<iframe src="https://gaw.ru/embed/serial-terminal/" 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-terminal/">Терминал 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>

Обновлено .

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