Программирование ARM pio device monitor Fri, April 18 2025  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


pio device monitor Печать
Добавил(а) microsin   

pio (или platformio) это утилита командной строки, поставляемая вместе с плагином PlatformIO для VScode. Она предназначенная для отладки встраиваемых приложений с помощью анализа сообщений лога. По функционалу она аналогична Serial Monitor популярной среды разработки Arduino IDE, но обладает расширенными функциональными возможностями.

Общий синтаксис использования:

pio device monitor [OPTIONS]

Примечание: существуют две команды, которые делают одно и то же: pio и platformio.

Для того, чтобы утилита pio была доступна для прямого запуска без необходимости ввода полного пути, в переменную PATH необходимо добавить следующий путь (это автоматически делает VScode IDE для окон встроенного терминала, когда в ней установлен плагин PlatformIO, когда команда code . открывает корневой каталог проекта):

$HOME/.platformio/penv/bin:$HOME/.platformio/penv:$HOME/.platformio/python3/bin:$HOME/.pyenv/bin

Утилита pio это консольное приложение, реализующее небольшой терминал. Оно само основано на Miniterm, и не реализует любые специальные фичи терминала, такие как обеспечение совместимости VT102. Однако наследуются эти функции из терминала, поверх которого Miniterm работает. Например на GNU/Linux при запуске из xterm будут поддерживаться escape-последовательности, обрабатываемые xterm. На Windows стандартная консоль cmd очень тупая, и она не поддерживает какие-либо esc-коды. Когда загружен драйвер ANSI.sys, добавляется поддержка некоторых escape-последовательностей.

Miniterm поддерживает RFC 2217 remote serial ports и raw sockets с помощью URL Handlers, таких как rfc2217://< host>:< port> соответственно socket://< host>:< port> в качестве аргумента port при своем запуске.

 Для управления monitor поддерживает следующие горячие клавиши:

    Ctrl+C: Quit
    Ctrl+T: Menu
    Ctrl+T, за которым идет Ctrl+H: Help

Пример вывода экрана подсказки:

--- pySerial (3.5) - miniterm - help
---
--- Ctrl+C   Exit program (alias Ctrl+T Q)
--- Ctrl+T   Menu escape key, followed by:
--- Menu keys:
---    Ctrl+T  Send the menu character itself to remote
---    Ctrl+C  Send the exit character itself to remote
---    Ctrl+I  Show info
---    Ctrl+U  Upload file (prompt will be shown)
---    Ctrl+A  encoding
---    Ctrl+F  edit filters
--- Toggles:
---    Ctrl+R  RTS   Ctrl+D  DTR   Ctrl+B  BREAK
---    Ctrl+E  echo  Ctrl+L  EOL
---
--- Port settings (Ctrl+T followed by the following):
---    p          change port
---    7 8        set data bits
---    N E O S M  change parity (None, Even, Odd, Space, Mark)
---    1 2 3      set stop bits (1, 2, 1.5)
---    b          change baud rate
---    x X        disable/enable software flow control
---    r R        disable/enable hardware flow control

Опции команды pio device monitor:

-p, --port

Возможные значения для этой опции такие же, как документированы для опции проекта monitor_port [2].

-b, --baud

Установит скорость UART, по умолчанию используется скорость 9600 бод. Скорость можно настроить в platformio.ini (файл конфигурации проекта [3]) с помощью опции monitor_speed [2]).

--parity

Установит четность фрейма (None, Even, Odd, Space, Mark), один из вариантов [N, E, O, S, M], по умолчанию используется N (None, бит четности не используется). Этот параметр также можно настроить в файле platformio.ini опцией monitor_parity [2].

--rtscts

Разрешает управление потоком (flow control) с помощью сигналов RTS/CTS.

--xonxoff

Разрешает программное управление потоком (software flow control).

--rts

Установит начальное состояние линии RTS (0 или 1). Этот параметр может быть настроен файлом platformio.ini проекта в опции monitor_rts [2].

--dtr

Установит начальное состоянии линии DTR (0 или 1). Этот параметр может быть настроен файлом platformio.ini проекта в опции  monitor_dtr [2].

--echo

Разрешает локальное эхо вводимых в консоли терминала символов. Этот параметр может быть настроен файлом platformio.ini проекта в опции monitor_echo [2].

--encoding

Установит кодировку для последовательного порта (например hexlify, Latin-1, UTF-8), по умолчанию используется UTF-8. Полный список поддерживаемых кодировок см. в Python Standard Encodings. Кодировка может быть настроена файлом platformio.ini в опции monitor_encoding [2].

-f, --filter

Добавляет преобразование текста. См. описание доступных фильтров Filters (см. врезку).

PlatformIO позволяет вам применить несколько фильтров к потокам INPUT & OUTPUT команды pio device monitor с помощью опции командной строки --filter, или опции monitor_filters [2] файла настроек проекта platformio.ini [3].

[Встроенные фильтры]

Имя Описание
direct Ничего не делать: все данные остаются без изменений. Полезно, если данные уже содержат коды управления ANSI escape (подкрашивание текстовых сообщений).
default Удаляет типовые коды управления терминалом из ввода.
debug Печатает все, что отправлено и принято.
hexlify Показывает шестнадцатеричное представление данных (код каждого символа).
log2file Формирует лог данных в файле platformio-device-monitor-%date%.log, находящемся в текущей рабочей директории проекта (там же, где находится файл platformio.ini).
nocontrol Удалит все коды управления, включая CR+LF.
printable Покажет десятичный код для всех не-ASCII символов, и заменит большинство кодов управления.
time Добавит метку времени с миллисекундами к каждой новой строке.
send_on_enter Посылает текст в устройство по клавише ENTER.
esp32_exception_decoder Пользовательский фильтр для Espressif-чипа ESP32, который декодирует crash exception.
esp8266_exception_decoder Пользовательский фильтр для Espressif-чипа ESP8266, который декодирует crash exception.

[Community Filters]

Это сторонние фильтры, которые не входят в установку PlatformIO Core. Их вам надо устанавливать вручную. Как использовать, см. их официальную документацию.

Имя Описание
arduplot Serial Plotter совместимый протокол с синтаксисом Arduino (output).

[Пользовательские фильтры]

PlatformIO Core (CLI) предоставляет API для расширения device monitor пользовательскими фильтрами (custom filters). Каждый фильтр это файл на Python, и его имя должно иметь префикс filter_. В коде Python, вам нужно расширить класс DeviceMonitorFilterBase, чтобы получить доступ к rx() и tx() методам / callback-ам.

PlatformIO Core (CLI) ищет пользовательские фильтры в следующих местах:

monitor_dir [2] проекта
platforms_dir/< platform>/monitor
packages_dir/< package>/monitor

Пример базового API см. в файле filter_demo.py.

from platformio.public import DeviceMonitorFilterBase

class Demo(DeviceMonitorFilterBase): NAME = "demo"
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) print("Demo filter is loaded")
def rx(self, text): return f"Received: {text}\n"
def tx(self, text): print(f"Sent: {text}\n") return text

Примеры:

https://github.com/platformio/platformio-core/tree/develop/platformio/device/monitor/filters
https://github.com/platformio/platform-espressif32/tree/develop/monitor
https://github.com/platformio/platform-espressif8266/tree/develop/monitor 

--eol

Режим окончания строки (End of line mode: CR, LF или CRLF), по умолчанию CRLF. Может быть настроено файлом platformio.ini в опции monitor_eol [2].

--raw

Отключает любые кодировки/преобразования. Может быть настроено файлом platformio.ini в опции monitor_raw [2].

--exit-char

ASCII-код специального символа для выхода из приложения, по умолчанию 3 (десятичное значение, соответствует Ctrl+C). Например, чтобы использовать для той же цели горячую клавишу Ctrl+], запустите run pio device monitor --exit-char 29.

--menu-char

ASCII-код специального символа, который используется для управления miniterm (menu), по умолчанию 20 (десятичное значение).

---quiet

Диагностические сообщения: подавлять сообщения, не относящиеся к ошибкам (non-error messages), по умолчанию Off (выключено).

--no-reconnect

Запрет автоматического переподключения, если установка соединения потерпела неудачу.

-d, --project-dir

Укажет путь до директории проекта (где находится файл настроек platformio.ini). По умолчанию аргумент --project-dir соответствует текущей рабочей директории (current working directory, CWD).

-e, --environment

Обработка указанных окружений. Вы также можете указать, какие окружения должны быть обработаны по умолчанию с помощью опции default_envs файла platformio.ini [3].

[Захват вывода в файл]

Чтобы сохранить вывод device monitor в файл, вы можете использовать фильтр log2file из Filters (см. врезку). По умолчанию файл лога сохраняется в папку logs, находящейся в корневой директории проекта.

$ pio device monitor -f default -f log2file

Как вариант, можно использовать файл конфигурации platformio.ini и опцию monitor_filters [2].

[env:log_output_to_file]
...
platform = ...
monitor_filters = default, log2file

[Примеры использования device monitor]

1. Покажет список доступных опций:

$ pio device monitor --help
Usage: pio device monitor [OPTIONS]
Options: -p, --port TEXT Port, a number or a device name -b, --baud INTEGER Set baud rate, default=9600 --parity [N|E|O|S|M] Set parity, default=N --rtscts Enable RTS/CTS flow control, default=Off --xonxoff Enable software flow control, default=Off --rts [0|1] Set initial RTS line state, default=0 --dtr [0|1] Set initial DTR line state, default=0 --echo Enable local echo, default=Off --encoding TEXT Set the encoding for the serial port (e.g. hexlify, Latin1, UTF-8), default: UTF-8 -f, --filter TEXT Add filters / text transformation --eol [CR|LF|CRLF] End of line mode, default=CRLF --raw Do not apply any encodings/transformations --exit-char INTEGER ASCII code of special character that is used to exit the application, default=29 (DEC) --menu-char INTEGER ASCII code of special character that is used to control miniterm (menu), default=20 (DEC) --quiet Diagnostics: suppress non-error messages, default=Off -h, --help Show this message and exit.

2. Обмен данными с устройством через UART и печать подсказки внутри терминала (для выдачи подскажки надо нажать Ctrl+T и затем Ctrl+H, не отпуская Ctrl):

$ pio device monitor
--- Available ports: --- /dev/cu.Bluetooth-Incoming-Port n/a --- /dev/cu.Bluetooth-Modem n/a --- /dev/cu.SLAB_USBtoUART CP2102 USB to UART Bridge Controller --- /dev/cu.obd2ecu-SPPDev n/a Enter port name:/dev/cu.SLAB_USBtoUART --- Miniterm on /dev/cu.SLAB_USBtoUART: 9600,8,N,1 --- --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- Hello PlatformIO! --- --- Ctrl+] Exit program --- Ctrl+T Menu escape key, followed by: --- Menu keys: --- Ctrl+T Send the menu character itself to remote --- Ctrl+] Send the exit character itself to remote --- Ctrl+I Show info --- Ctrl+U Upload file (prompt will be shown) --- Toggles: --- Ctrl+R RTS Ctrl+E local echo --- Ctrl+D DTR Ctrl+B BREAK --- Ctrl+L line feed Ctrl+A Cycle repr mode --- --- Port settings (Ctrl+T followed by the following): --- p change port --- 7 8 set data bits --- n e o s m change parity (None, Even, Odd, Space, Mark) --- 1 2 3 set stop bits (1, 2, 1.5) --- b change baud rate --- x X disable/enable software flow control --- r R disable/enable hardware flow control --- exit ---

[Ссылки]

1. pio device monitor site:docs.platformio.org.
2. platformio.ini monitor options site:docs.platformio.org.
3. “platformio.ini” (Project Configuration File) site:docs.platformio.org.

 

Добавить комментарий


Защитный код
Обновить

Top of Page