Rshell — последний шанс, если ничего не удается сделать.
Rshell является безотказным инструментом для работы с файловой системой микроконтроллера (получение/отправка фрагментов python) а также подключения к REPL.
Под безотказным я понимаю средство позволяющее выйти из любой ситуации, даже когда контроллер находится в циклической перезагрузке и не удается перехватить управление интерпретатором MicroPython.
Внимание!
Все ниже описанное касается Linux, macOS.
Для работы с rshell в контроллер должна быть установлена прошивка не ниже v1.4.3-28.
Rshell является утилитой командной строки, его установка довольно проста:
pip3 install rshell
Запуск и вывод в консоли выглядит следующим образом:
❯ rshell
Welcome to rshell. Use Control-D (or the exit command) to exit rshell.
No MicroPython boards connected - use the connect command to add one
/Users/hunk>
Находясь в оболочке rshell, для подключения к устройству нужно выполнить команду с указанием типа подключения, порта и скорости:
❯ connect serial <port> <baud>
Так делать не очень практично ввиду того, что внутри оболочки не работает автодополнение. Гораздо удобнее указать параметры подключения сразу при запуске rshell в качестве аргументов.
❯ rshell -p /dev/tty.SLAB_USBtoUART -b 115200
Иногда процесс подключение к контроллеру останавливается на этапе установки соединения, выглядит это так:
❯ rshell -p /dev/tty.SLAB_USBtoUART -b 115200
Using buffer-size of 32
Connecting to /dev/tty.SLAB_USBtoUART (buffer-size 32)...
Trying to connect to REPL
Для решения этой проблемы достаточно нажать RESET на контроллере.
Стандартный вывод выглядит приблизительно так и зависит от подключаемого устройства:
❯ rshell -p /dev/tty.SLAB_USBtoUART -b 115200
Using buffer-size of 32
Connecting to /dev/tty.SLAB_USBtoUART (buffer-size 32)…
Trying to connect to REPL .. connected
Retrieving sysname … esp32
Testing if ubinascii.unhexlify exists … Y
Retrieving root directories … /boot.py/ /heartbeat.py/ /lib/ /main.py/
Setting time … Feb 07, 2022 19:18:15
Evaluating board_name … pyboard
Retrieving time epoch … Jan 01, 2000
Welcome to rshell. Use Control-D (or the exit command) to exit rshell.
/Users/hunk>
В строке:
Evaluating board_name … pyboard
можно увидеть название точки, куда смонтировано устройство, в моем случае это «pyboard».
Все последующие операции с файлами выполняются со ссылкой на точку монтированная «/pyboard».
Для вывода основных команд оболочки можно набрать help
help
Documented commands (type help <topic>):
========================================
args cat connect date edit filesize help mkdir rm shell
boards cd cp echo exit filetype ls repl rsync
Use Control-D (or the exit command) to exit rshell.
/Users/hunk>
Как видно из вывода консоли мне доступны основные команды управления файлами и каталогами включая просмотр а также служебные.
К примеру я совершил ошибку импорта в файле boot.py и мне нужно перезаписать его.
Для этого нужно перейти в каталог проекта (/Users/hunk/project/back_light_rgb) и выполнить команду:
cp boot.py /pyboard
/Users/hunk/project/back_light_rgb> cp boot.py /pyboard
Copying '/Users/hunk/project/back_light_rgb/boot.py' to '/pyboard/boot.py' ...
/Users/hunk/project/back_light_rgb>
Все, файл загружен. Теперь можно проверить работу устройства не выходя из rshell. С помощью команды repl можно подключиться к интерпретатору микроконтроллера. Если после выполнения команды ничего не происходит — нужно нажать RESET на контроллере.
repl
Entering REPL. Use Control-X to exit.
>
MicroPython v1.17 on 2021-09-02; ESP32 module with ESP32
Type "help()" for more information.
>>>
>>>
Для выхода предусмотрена комбинация клавиш Control-X, которая возвращает к оболочке rshell.
Надеюсь данная утилита убережёт кого-то от полной перезаливки прошивки и кода.