VS Code Extensions
SUS Serial Monitor & Plotter

SUS Serial Monitor & Plotter

by SUSCompany

Multi-port serial monitor with a live plotter and ESP32 backtrace decoding. Integrates with PlatformIO.

Downloads

5

Rating

5.0 / 5 (1)

Version

0.2.0

Last updated

Aug 10, 2026

A serial monitor that keeps up with your board. Монитор порта, который не отстаёт от платы.

Multi-port terminal, live plotter and ESP32 backtrace decoding — inside VS Code, wired into PlatformIO. Мультипортовый терминал, живой график и декодирование backtrace ESP32 — внутри VS Code, в связке с PlatformIO.

Marketplace Installs License: MIT

English · Русский


English

Why

Most serial monitors hand you a text stream and stop there. That is fine until the board reboots in the middle of a log, panics with a raw Backtrace: 0x400d1a2b:0x3ffb1f30, or you need two boards side by side on one timeline.

This extension is built for that part of the job:

  • it owns the port itself — so board reset, setup() output and multiple ports on a shared clock all work, instead of being lost to a wrapped CLI monitor;
  • it reads your platformio.ini — port and baud rate come from the project, and the port is handed back automatically while you flash;
  • it decodes ESP32 backtraces into function → file:line from the ELF your build already produced.

Features

  • 📟 Terminal — RX/TX over UART with millisecond timestamps, autoscroll and colour-coded RX / TX / system lines
  • 🪟 Its own window — the monitor opens as a separate editor window, so the log lives next to the code instead of eating half of it
  • 🔌 Multiple ports at once — two or more boards in one panel, every line and every plot series tagged with a coloured port label (P1, P2, …), on one shared timeline
  • 🏷️ Stable board numbers — a board keeps its P label across reconnects, even when the OS hands it a different port path
  • 🔎 Live filter — hides non-matching lines as they arrive, and the ones already on screen
  • 📈 Live plotter (Chart.js) — plots numbers found in incoming lines, several series per port and several ports on one chart
  • 🖼️ Chart export — PNG snapshot and CSV of the raw points for Excel or pandas
  • 💾 Real-time file logging — every line is appended to a file as it arrives, not only when you press save
  • 📊 Debug statistics — per-port idle time and round-trip time, plus counters for errors, crashes and reboots
  • 🧩 Backtrace decoding — Backtrace: lines are resolved to function → file:line by a bundled DWARF parser, no external toolchain call
  • 🔄 Board reset per port — DTR/RTS pulse from the port chip, and the control lines are left deasserted so a physical RESET runs your firmware instead of dropping into the bootloader
  • ⚙️ PlatformIO integration — port and speed from platformio.ini, automatic release and reconnect around upload tasks
  • 🎨 Six themes — VS Code Dark/Light, Monokai, Dracula, Solarized Dark, Hacker (Matrix), remembered between sessions
  • 📄 Export and copy — terminal to .txt, or the whole log to the clipboard
  • ⚡ Native port access — the port is opened by the serialport module in the extension host, not by a wrapped CLI

Requirements

Requirement Notes
VS Code 1.84 or newer.
platformio.ini in the folder Only for the project integration — port, baud rate and upload synchronisation. The monitor itself opens in any folder.
PlatformIO IDE Not required. It is only needed for the build tasks the monitor synchronises with.
Device driver The usual one for your board (CP210x, CH340, FTDI and friends), installed in the OS.
Native module serialport ships with the extension, built through N-API so it works across Electron versions. See Troubleshooting if a port refuses to open.

Quick start

  1. Click ⏻ SUS Monitor in the status bar, at the bottom right of the window. The monitor opens in its own window, without touching any port — put it on a second screen next to the code and it stays there.
  2. In a PlatformIO folder there is a shortcut: put the cursor in any editor and press Ctrl+K M (Cmd+K M on macOS) — the monitor opens and connects to the board in one step. It is a chord: hold Ctrl, press K, release, press M.
  3. Otherwise press + Добавить порт in the toolbar and pick the board from the list.
  4. Type a command in the field at the bottom and press Enter. The line ending is selectable, \r\n by default.
  5. Numbers in incoming lines show up on the Плоттер tab automatically.

Nothing arriving? Run SUS Monitor: показать журнал. Port errors and symbol-loading problems are written there and to the terminal, so that is where the reason lives — port did not open, firmware.elf not found, upload task not recognised.

Commands

Available from the Command Palette (Ctrl+Shift+P); typing SUS brings up all three. The titles are currently in Russian — see Known limitations.

In the palette What it does
SUS Monitor: открыть монитор Opens the panel without touching any port
SUS Monitor: открыть и подключиться к плате Opens and connects using platformio.ini (Ctrl+K M, editor focus required)
SUS Monitor: показать журнал Opens the SUS Monitor diagnostic channel in the Output panel

The first one also sits on the ⏻ SUS Monitor button in the status bar, and in the editor title bar while platformio.ini is the active file.

Interface

Toolbar

Element Purpose
+ Добавить порт Picks a port from a QuickPick list — boards first — and connects it as a new session
Baud rate Speed for the next port you connect; already-open ports keep theirs
Тема Theme selector
Port chips One per connected port: colour tag, speed, reset (↺) and disconnect (✕)
🧩 .elf/.map Loads a symbol file for backtrace decoding by hand; .elf gives file and line, .map only names
🔴 Запись в файл Starts and stops real-time logging to a file
Монитор / Плоттер Tab switch
Автоскролл / Время Terminal behaviour toggles
Filter field Hides log lines that do not contain the substring
Точек How many recent points the plotter keeps, 50 by default
🖼️ PNG / 📄 CSV Chart export, shown on the plotter tab
RX counter Live traffic across all ports: bytes, lines, bytes per second
📊 Статистика Opens the debug statistics panel
Очистить Clears terminal, chart and counters; ports stay connected
Копировать Copies the whole terminal log to the clipboard
Сохранить лог Exports the log to a .txt file once

Input bar

Target port for the command, line ending (none, \n, \r, \r\n — default), the command field itself and Отправить.

Multiple ports at once

Each + Добавить порт creates an independent connection, as many as the OS will grant.

  • Every port keeps the baud rate that was selected when it was connected.
  • Terminal and plotter are shared, but each line and series carries the colour and tag of its port — two devices line up on one timestamp scale.
  • Отправить в picks which port the next command goes to.
  • Reset (↺) and disconnect (✕) act on one port, from its own chip.
  • Idle time and RTT are measured per port, so a single hung device is visible instead of a silent panel.
  • Error, crash and reboot counters are shared across all ports (see Known limitations).

How a board keeps its number

Unplug a board and plug it back in and the OS may hand it a different path — COM5 becomes COM7, /dev/ttyUSB0 becomes /dev/ttyUSB1. The number in the port chip follows the device, not the path, so P1 stays P1 instead of counting up on every reconnect and splitting the plot into new series.

Identification, strongest first:

Source When it works
USB serial number CP210x, FTDI, native USB on the ESP32-S2/S3/C3 — available the moment the port opens
USB VID/PID Any adapter, but it only identifies the model. Two identical CH340 clones share one key
MAC address from the boot log Any ESP that prints its MAC on startup. The most reliable of the three, but it arrives a second or two after the port opens

When the MAC arrives and says the board belongs to a number that is currently free, the connection moves there and the terminal says so. Once a chart series has been drawn for a port, its number is left alone — renumbering would orphan the series. The MAC is remembered either way, so the next connect is identified immediately.

Hover a port chip to see the MAC the number is bound to.

Plotter

  • Numbers are parsed out of every line, separated by whitespace or commas.
  • Each position in the line becomes its own series per port (P1 · S1, P1 · S2, P2 · S1, …), coloured from the current theme's palette.
  • A missing value leaves a gap rather than a drop to zero.
  • History depth is the Точек field, 50 by default.
  • PNG saves the current canvas; CSV exports every point of every series with its timestamp.

ESP32 debugging

Errors, reboots and crashes are classified and counted as they arrive.

Counter What matches
Ошибок в логе error, ошибка, exception, fail, failed, panic, паника
Крашей (Backtrace) a Backtrace: line, Guru Meditation, fatal exception, abort() was called, assert failed
Обнаружено перезагрузок ESP32/Arduino boot markers: rst:0x, ets Jun, ets Jul, rebooting, reset reason, boot:0x13, power on reset

When a Backtrace: line appears, its addresses are decoded in place under the line:

Backtrace:0x400d1fb9:0x3ffb21a0 0x400d2c85:0x3ffb21c0
[DECODE] 0x400d1fb9 → loop() at main.cpp:142

Symbols are picked up on their own — the newest firmware.elf in .pio/build is loaded when the panel opens, so there is nothing to point at by hand. The 🧩 .elf/.map button is there for the cases where you want a different build.

Decoding is done by a bundled DWARF parser that reads DWARF 2–4. Current ESP-IDF versions emit DWARF 5; on those builds a backtrace degrades to symbol +0xoffset from the ELF symbol table instead of an exact line. Routing this through the toolchain's own addr2line is the first item on the roadmap.

PlatformIO integration

  • monitor_port and monitor_speed are read from platformio.ini, honouring [env] inheritance and default_envs.
  • With no monitor_port set, the first port that looks like a board wins — matched on the USB VID of the usual suspects (CP210x 10c4, CH340 1a86, FTDI 0403, Arduino 2341, Espressif 303a, Adafruit 239a) and on the device name. If nothing looks like a board, the first available port is used.
  • When a PlatformIO upload task starts, the port is released so the bootloader can take it.
  • When the task ends, the monitor reconnects with retries, because a board does not come back to the OS instantly. If the upload failed, the port stays closed.
  • Opening a port leaves DTR and RTS deasserted. Both lines at the same level leave the auto-reset circuit alone, so pressing RESET on the board runs your firmware. With DTR asserted and RTS clear — what the Windows driver defaults to — the same press lands in rst:0x1 (POWERON),boot:0x2 (DOWNLOAD(USB/UART0)) instead.

Themes

Theme Style
🌙 VS Code Dark Dark, default
☀️ VS Code Light Light
🍬 Monokai The classic editor dark theme
🧛 Dracula Purple and pink accents
🌊 Solarized Dark Muted, low contrast
💻 Hacker (Matrix) Monochrome green terminal

Switching a theme repaints the interface, the plot palette and the Chart.js axes. Port tag colours stay fixed on purpose, so a board keeps its identity across themes.

Known limitations

  • The interface, the command titles and the log messages are in Russian. Everything is icon- and keyboard-driven, so it is workable either way, but English localisation is on the roadmap.
  • Backtrace decoding covers DWARF 2–4; DWARF 5 units are skipped and the address falls back to symbol-table resolution, giving a name without a line number.
  • One symbol file is shared by all ports — two boards running different builds cannot both be decoded precisely at the same time.
  • Error, crash and reboot counters are totals across all ports, unlike idle time and RTT which are per port.
  • Warnings are not classified or counted, only errors, crashes and reboots.
  • All plot series share one chart; there is no per-port chart.
  • The separate window needs VS Code 1.85 or newer. On 1.84 the monitor opens as an ordinary tab and says so in the log; everything else works the same.
  • Board numbers are remembered for the lifetime of the panel, not across editor restarts.
  • Two identical CH340-class clones have no USB serial number to tell them apart, so their numbers are only sorted out once each has printed its MAC.
  • Project integration reads platformio.ini only — Arduino CLI is not recognised yet.

Troubleshooting

Symptom Cause and fix
Порт занят другой программой Something else holds the port — usually the PlatformIO monitor terminal or a running upload. Close it and reconnect.
No native build was found for platform=… runtime=electron abi=… The bundled serialport binary does not match your editor's Electron. Rebuild it against the version from Help → About: npx @electron/rebuild -v <Electron version>
Permission denied on Linux Add your user to the dialout group and re-login.
Backtrace shows symbol +0xoffset The build uses DWARF 5. The function name is correct, the line number is not available yet — see the roadmap.
A board still changes its number Its adapter reports no USB serial number, and the firmware never prints a MAC. Print the MAC on startup (WiFi.macAddress() or esp_read_mac) and the number will stick from the next connect on.
Ctrl+K M does nothing Open SUS Monitor: показать журнал first: if there is no Команда susSerialMonitor.openAndConnect line, the keypress never reached the extension. Likely causes, in order: focus is not in an editor (the binding declares editorTextFocus); the chord was typed too slowly and VS Code dropped it; the built-in Change Language Mode command, which also ships on Ctrl+K M, won the key. Check Ctrl+K Ctrl+S → filter ctrl+k m → right-click → "Show Same Keybindings", and rebind if something else owns it. The status bar button works regardless.
The monitor opens as a tab, not a window VS Code moves the tab out with its own command, and it only exists since 1.85. SUS Monitor: показать журнал names the reason. On a new enough editor you can always do it by hand: right-click the tab → Move into New Window.
Nothing happens at all Open SUS Monitor: показать журнал. Every silent fallback writes its reason there.

Also available without VS Code

The same monitor builds into a single self-contained HTML file that runs on the Web Serial API — double-click it in Chrome or Edge, no install, no Node. Both targets are generated from one shared core, so features land in both. See the developer README for build instructions.

Roadmap

Ordered roughly by how often the absence of each one gets in the way.

Planned What it changes
DWARF 5 backtraces via the toolchain Resolve addresses through the PlatformIO toolchain's addr2line when available, falling back to the bundled parser. This is what makes exact file:line work on current ESP-IDF builds.
English UI localisation Move interface strings into l10n bundles so the palette, toolbar and log follow the editor language.
HEX view A byte-level view for binary protocols, next to the text terminal.
Command history Arrow-key recall in the send field, plus saved snippets per project.
Warning classification A fourth counter next to errors, crashes and reboots.
Port profiles Remember baud rate, line ending and filter per port, per workspace — including board numbers across restarts.
Configurable plot parsing Plot key:value pairs and named series, so the legend reads like your firmware rather than S1, S2.
Per-port counters and charts Split error/crash/reboot counters, and optionally the chart, by source port.
Arduino CLI support Read sketch.yaml the way platformio.ini is read now.

Ideas and bug reports are welcome at github.com/<OWNER>/<REPO>/issues.

License

MIT


Русский

Зачем

Большинство мониторов порта отдают поток текста и на этом заканчиваются. Это устраивает до первой перезагрузки платы посреди лога, до первой паники с сырым Backtrace: 0x400d1a2b:0x3ffb1f30 и до момента, когда две платы нужно увидеть рядом на одной шкале времени.

Расширение сделано именно под эту часть работы:

  • порт открывает само — поэтому сброс платы, вывод setup() и несколько портов с общими часами работают, а не теряются внутри обёрнутого CLI-монитора;
  • читает ваш platformio.ini — порт и скорость берутся из проекта, а на время прошивки порт отдаётся автоматически;
  • декодирует backtrace ESP32 в функция → файл:строка по тому ELF, который уже собрал ваш проект.

Возможности

  • 📟 Терминал — приём и отправка по UART с метками времени до миллисекунды, автоскроллом и цветовой подсветкой RX / TX / системных сообщений
  • 🪟 Отдельное окно — монитор открывается своим окном редактора: лог живёт рядом с кодом, а не отъедает половину экрана
  • 🔌 Несколько портов одновременно — две и более платы в одной панели, каждая строка и каждая линия графика помечена цветным тегом порта (P1, P2…), общая шкала времени
  • 🏷️ Постоянные номера плат — номер P закреплён за платой и переживает переподключение, даже если система выдала другой путь порта
  • 🔎 Живой фильтр — скрывает несовпадающие строки на лету, и уже показанные, и все приходящие дальше
  • 📈 Плоттер в реальном времени (Chart.js) — строит график по числам в строке, несколько линий на порт и несколько портов на одном графике
  • 🖼️ Экспорт графика — PNG (снимок) и CSV (сырые точки для Excel или pandas)
  • 💾 Запись лога в файл в реальном времени — каждая строка дописывается в файл по мере поступления, а не только по кнопке «Сохранить»
  • 📊 Отладочная статистика — простой и время отклика (RTT) отдельно по каждому порту, плюс счётчики ошибок, крашей и перезагрузок
  • 🧩 Декодирование Backtrace — строки Backtrace: раскрываются в функция → файл:строка встроенным парсером DWARF, без вызова внешнего тулчейна
  • 🔄 Сброс платы для каждого порта — импульс DTR/RTS с чипа порта; управляющие линии остаются снятыми, поэтому физическая кнопка RESET запускает прошивку, а не загрузчик
  • ⚙️ Интеграция с PlatformIO — порт и скорость из platformio.ini, автоматическое освобождение и переподключение вокруг задач прошивки
  • 🎨 6 тем оформления — VS Code Dark/Light, Monokai, Dracula, Solarized Dark, Hacker (Matrix), выбор сохраняется между сессиями
  • 📄 Экспорт и копирование — терминал в .txt или весь лог в буфер обмена
  • ⚡ Свой доступ к порту — порт открывает модуль serialport в extension host, а не обёртка над CLI

Требования

Требование Пояснение
VS Code 1.84 или новее.
platformio.ini в папке Нужен только для интеграции с проектом: порт, скорость и синхронизация с прошивкой. Сам монитор открывается в любой папке.
PlatformIO IDE Не обязателен. Нужен только ради самих задач сборки, с которыми синхронизируется монитор.
Драйвер устройства Как обычно для платы: CP210x, CH340, FTDI и т. д. — должен стоять в системе.
Нативный модуль serialport поставляется вместе с расширением и собран через N-API, поэтому работает на разных версиях Electron. Если порт не открывается — см. ниже.

Быстрый старт

  1. Нажмите ⏻ SUS Monitor в строке состояния, внизу справа. Монитор откроется в отдельном окне, портов при этом не трогая, — его можно унести на второй экран рядом с кодом, и он там останется.
  2. В проекте PlatformIO есть путь короче: поставьте курсор в любой редактор и нажмите Ctrl+K M (на macOS Cmd+K M) — монитор откроется и сразу подключится к плате. Это аккорд: удерживая Ctrl, нажмите K, отпустите, нажмите M.
  3. В остальных случаях порт добавляется кнопкой + Добавить порт в панели инструментов.
  4. Наберите команду в поле внизу и нажмите Enter. Окончание строки выбирается рядом, по умолчанию \r\n.
  5. Числа во входящих строках сами появятся на вкладке Плоттер.

Ничего не приходит? Откройте SUS Monitor: показать журнал. Ошибки порта и проблемы с загрузкой символов пишутся туда и в терминал — там и живёт причина: не открылся порт, не нашёлся firmware.elf, задача прошивки не распознана.

Команды

Доступны из палитры команд (Ctrl+Shift+P) — достаточно набрать SUS.

Команда Что делает
SUS Monitor: открыть монитор Открывает панель, не трогая порты
SUS Monitor: открыть и подключиться к плате Открывает и подключается по platformio.ini (Ctrl+K M, нужен фокус в редакторе)
SUS Monitor: показать журнал Открывает канал диагностики SUS Monitor в панели «Вывод»

Первая команда висит ещё и на кнопке ⏻ SUS Monitor в строке состояния, а пока активен файл platformio.ini — и в заголовке редактора.

Интерфейс

Тулбар

Элемент Назначение
+ Добавить порт Выбор порта из списка (платы наверху) и подключение его как отдельного соединения
Baud rate Скорость для следующего подключаемого порта; уже открытые сохраняют свою
Тема Выбор темы оформления
Чипы портов По одному на подключённый порт: цветной индикатор, скорость, сброс (↺) и отключение (✕)
🧩 .elf/.map Загрузка файла символов вручную: .elf даёт файл и строку, .map — только имена
🔴 Запись в файл Начинает и останавливает запись лога в файл в реальном времени
Монитор / Плоттер Переключение вкладок
Автоскролл / Время Чекбоксы поведения терминала
Поле фильтра Скрывает строки лога без указанной подстроки
Точек Сколько последних точек хранит плоттер, по умолчанию 50
🖼️ PNG / 📄 CSV Экспорт графика, виден на вкладке «Плоттер»
Счётчик RX Живой трафик по всем портам: байты, строки, байты в секунду
📊 Статистика Открывает панель отладочной статистики
Очистить Очищает терминал, график и счётчики; порты остаются подключёнными
Копировать Копирует весь лог терминала в буфер обмена
Сохранить лог Разовый экспорт лога в .txt

Нижняя панель ввода

Целевой порт для команды, окончание строки (нет, \n, \r, \r\n — по умолчанию), само поле ввода и кнопка Отправить.

Работа с несколькими портами

Каждое нажатие + Добавить порт создаёт независимое соединение — столько, сколько разрешит система.

  • У каждого порта своя скорость, выбранная на момент подключения.
  • Терминал и плоттер общие, но каждая строка и линия помечена цветом и тегом своего порта — два устройства выстраиваются на одной шкале времени.
  • Отправить в выбирает, какому порту адресована следующая команда.
  • Сброс (↺) и отключение (✕) действуют на один порт, со своего чипа.
  • Простой и RTT считаются отдельно по каждому порту, поэтому зависшее устройство видно, а не выглядит как молчащая панель.
  • Счётчики ошибок, крашей и перезагрузок — общие по всем портам (см. ограничения).

Как за платой закрепляется номер

Плату выдернули и вставили обратно — система может выдать ей другой путь: COM5 превращается в COM7, /dev/ttyUSB0 в /dev/ttyUSB1. Номер в чипе порта держится за устройством, а не за путём, поэтому P1 остаётся P1, а не растёт с каждым переподключением, разрывая линии графика на новые серии.

Опознание, от надёжного к слабому:

Источник Когда работает
Серийный номер USB CP210x, FTDI, встроенный USB у ESP32-S2/S3/C3 — известен сразу при открытии порта
VID/PID USB У любого переходника, но опознаёт только модель: два одинаковых клона на CH340 дают один ключ
MAC-адрес из лога загрузки У любой ESP, которая печатает MAC при старте. Самый надёжный из трёх, но приходит через секунду-две после открытия порта

Когда MAC приходит и говорит, что плата принадлежит свободному сейчас номеру, соединение переезжает туда, о чём пишется в терминал. Если для порта уже нарисована линия на графике, номер не трогается: перенумерация оторвала бы серию от данных. MAC запоминается в любом случае, поэтому следующее подключение опознаётся сразу.

MAC, за которым закреплён номер, виден во всплывающей подсказке чипа порта.

Плоттер

  • Числа разбираются из каждой строки, разделители — пробелы и запятые.
  • Каждая позиция в строке даёт свою линию для своего порта (P1 · S1, P1 · S2, P2 · S1…), цвет берётся из палитры текущей темы.
  • Пропущенное значение оставляет разрыв, а не падение в ноль.
  • Глубина истории — поле Точек, по умолчанию 50.
  • PNG сохраняет текущий снимок канваса, CSV — все точки всех линий с их метками времени.

Отладка ESP32

Ошибки, перезагрузки и краши распознаются и считаются на ходу.

Счётчик Что попадает
Ошибок в логе error, ошибка, exception, fail, failed, panic, паника
Крашей (Backtrace) строка Backtrace:, Guru Meditation, fatal exception, abort() was called, assert failed
Обнаружено перезагрузок Маркеры старта ESP32/Arduino: rst:0x, ets Jun, ets Jul, rebooting, reset reason, boot:0x13, power on reset

Когда в логе появляется строка Backtrace:, её адреса расшифровываются прямо под ней:

Backtrace:0x400d1fb9:0x3ffb21a0 0x400d2c85:0x3ffb21c0
[DECODE] 0x400d1fb9 → loop() at main.cpp:142

Символы подхватываются сами: при открытии панели берётся самый свежий firmware.elf из .pio/build, указывать руками ничего не нужно. Кнопка 🧩 .elf/.map нужна для случаев, когда требуется другая сборка.

Декодирует встроенный парсер DWARF, а понимает он DWARF 2–4. Актуальные версии ESP-IDF собирают с DWARF 5, и на таких сборках backtrace вырождается в символ +0xсмещение из таблицы символов ELF вместо точной строки. Разрешение адресов через addr2line из тулчейна — первый пункт плана развития.

Интеграция с PlatformIO

  • monitor_port и monitor_speed читаются из platformio.ini с учётом наследования от [env] и default_envs.
  • Если monitor_port не задан, берётся первый порт, похожий на плату — по USB VID известных USB-UART (CP210x 10c4, CH340 1a86, FTDI 0403, Arduino 2341, Espressif 303a, Adafruit 239a) и по названию устройства. Если на плату не похож ни один, берётся первый доступный.
  • При старте задачи upload порт освобождается, чтобы его занял загрузчик.
  • После завершения задачи монитор переподключается с повторами, потому что плата возвращается в систему не мгновенно. Если прошивка упала, порт остаётся закрытым.
  • При открытии порта DTR и RTS снимаются. Равные уровни на обеих линиях схему авто-сброса не трогают, поэтому кнопка RESET на плате запускает прошивку. При поднятом DTR и снятом RTS — а именно так порт открывает драйвер Windows — то же нажатие уводит плату в rst:0x1 (POWERON),boot:0x2 (DOWNLOAD(USB/UART0)).

Темы оформления

Тема Стиль
🌙 VS Code Dark Тёмная, по умолчанию
☀️ VS Code Light Светлая
🍬 Monokai Классическая тёмная тема редакторов
🧛 Dracula Фиолетово-розовые акценты
🌊 Solarized Dark Приглушённая, низкий контраст
💻 Hacker (Matrix) Моно-зелёный терминальный стиль

При смене темы перекрашивается интерфейс, палитра линий графика и оси Chart.js. Цвета тегов портов фиксированы специально: плата сохраняет свою метку при любой теме.

Известные ограничения

  • Декодирование backtrace покрывает DWARF 2–4; юниты DWARF 5 пропускаются, адрес разрешается по таблице символов — имя функции есть, номера строки нет.
  • Файл символов один на все порты: две платы с разными прошивками одновременно точно не декодируются.
  • Счётчики ошибок, крашей и перезагрузок суммарные по всем портам, в отличие от простоя и RTT, которые считаются отдельно.
  • Предупреждения не выделяются и не считаются — только ошибки, краши и перезагрузки.
  • Все линии живут на одном графике, отдельного графика на порт нет.
  • Отдельное окно требует VS Code 1.85 или новее. На 1.84 монитор откроется обычной вкладкой и напишет об этом в журнал — всё остальное работает так же.
  • Номера плат помнятся, пока открыта панель, но не переживают перезапуск редактора.
  • Два одинаковых клона на CH340 различить по USB нечем, поэтому их номера расходятся только после того, как каждый напечатает свой MAC.
  • Интеграция с проектом читает только platformio.ini — Arduino CLI пока не распознаётся.
  • Интерфейс и сообщения журнала на русском; английская локализация в плане ниже.

Если что-то не работает

Симптом Причина и что делать
Порт занят другой программой Порт держит кто-то ещё — обычно терминал монитора PlatformIO или идущая прошивка. Закройте и подключитесь заново.
No native build was found for platform=… runtime=electron abi=… Нативный serialport собран не под ту версию Electron. Пересоберите под версию из «Справка → О программе»: npx @electron/rebuild -v <версия Electron>
Нет прав на порт в Linux Добавьте пользователя в группу dialout и перезайдите в систему.
В backtrace символ +0xсмещение Сборка с DWARF 5. Имя функции верное, номер строки пока недоступен — см. план развития.
Плата всё равно меняет номер У её переходника нет серийного номера USB, а прошивка не печатает MAC. Выведите MAC при старте (WiFi.macAddress() или esp_read_mac) — со следующего подключения номер закрепится.
Ctrl+K M ничего не делает Сначала откройте SUS Monitor: показать журнал: если строки Команда susSerialMonitor.openAndConnect там нет, нажатие до расширения не дошло. Причины по частоте: фокус не в редакторе (сочетание объявлено с editorTextFocus); аккорд набран слишком медленно и VS Code его сбросил; клавишу перехватила встроенная команда «Change Language Mode», которая по умолчанию тоже висит на Ctrl+K M. Проверьте Ctrl+K Ctrl+S → фильтр ctrl+k m → правый клик → «Show Same Keybindings» и при конфликте назначьте своё сочетание. Кнопка в строке состояния работает в любом случае.
Монитор открылся вкладкой, а не окном Вкладку уносит своя команда VS Code, а она есть только с версии 1.85. Причина написана в SUS Monitor: показать журнал. На свежем редакторе то же самое всегда можно сделать руками: правый клик по вкладке → Переместить в новое окно.
Не происходит вообще ничего Откройте SUS Monitor: показать журнал — каждый тихий откат пишет туда свою причину.

Работает и без VS Code

Тот же монитор собирается в один самодостаточный HTML-файл поверх Web Serial API: двойной щелчок в Chrome или Edge, без установки и без Node. Обе цели собираются из общего ядра, поэтому возможности появляются сразу в двух. Инструкции по сборке — в README для разработчика.

План развития

Порядок примерно соответствует тому, как часто не хватает каждого пункта.

Планируется Что изменится
Backtrace на DWARF 5 через тулчейн Разрешать адреса через addr2line из тулчейна PlatformIO, когда он доступен, с откатом на встроенный парсер. Именно это даёт точные файл:строка на актуальных сборках ESP-IDF.
Английская локализация интерфейса Вынести строки в бандлы l10n, чтобы палитра, тулбар и журнал следовали языку редактора.
HEX-режим Побайтовый вид для бинарных протоколов рядом с текстовым терминалом.
История команд Перебор стрелками в поле отправки и сохранённые заготовки на проект.
Классификация предупреждений Четвёртый счётчик рядом с ошибками, крашами и перезагрузками.
Профили портов Запоминать скорость, окончание строки и фильтр для каждого порта в рамках рабочей папки — вместе с номерами плат между перезапусками.
Настраиваемый разбор для графика Рисовать пары ключ:значение и именованные серии, чтобы легенда читалась как ваша прошивка, а не как S1, S2.
Счётчики и графики по портам Разбить счётчики ошибок, крашей и перезагрузок — и при желании график — по портам-источникам.
Поддержка Arduino CLI Читать sketch.yaml так же, как сейчас читается platformio.ini.

Идеи и сообщения об ошибках — в github.com/<OWNER>/<REPO>/issues.

Лицензия

MIT

Related extensions