pio (или platformio) это утилита командной строки, поставляемая вместе с плагином PlatformIO для VScode. Она предназначенная для отладки встраиваемых приложений с помощью анализа сообщений лога. По функционалу она аналогична Serial Monitor популярной среды разработки Arduino IDE, но обладает расширенными функциональными возможностями.
Общий синтаксис использования:
pio device monitor [OPTIONS]
Примечание: существуют две команды, которые делают одно и то же: pio и platformio.
Для того, чтобы утилита pio была доступна для прямого запуска без необходимости ввода полного пути, в переменную PATH необходимо добавить следующий путь (это автоматически делает VScode IDE для окон встроенного терминала, когда в ней установлен плагин PlatformIO, когда команда code . открывает корневой каталог проекта):
Утилита 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
classDemo(DeviceMonitorFilterBase):
NAME = "demo" def__init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
print("Demo filter is loaded") defrx(self, text):
returnf"Received: {text}\n" deftx(self, text):
print(f"Sent: {text}\n")
return text
Режим окончания строки (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].
$ 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 ---