Разработка на MicroPython для RP2040 в Zed

Пошаговая инструкция для Raspberry Pi Pico/Pico W, Linux Mint и macOS.

В результате получится окружение, в котором можно:

  • писать MicroPython-код в Zed;
  • подключаться к интерактивной консоли платы;
  • запускать текущий файл без сохранения во flash-память;
  • загружать main.py на Pico;
  • автоматически запускать программу при включении платы.

Актуальность инструкции: 5 августа 2026 года.

1. Разбираемся в отличиях MicroPython от Pico SDK #

При использовании Pico SDK исходники C/C++ компилируются на компьютере в файл .uf2. MicroPython работает иначе:

  1. На Pico один раз устанавливается готовая прошивка-интерпретатор MicroPython.
  2. Программы .py передаются во внутреннюю файловую систему платы.
  3. Код можно выполнять интерактивно, без полной перекомпиляции прошивки.

Для обычной MicroPython-разработки не нужны:

  • ARM GCC;
  • CMake;
  • Ninja;
  • компиляция Pico SDK.

Они могут оставаться установленными для C/C++-проектов и не конфликтуют с MicroPython.


2. Скачиваем правильную прошивку #

Для обычного Raspberry Pi Pico:

Для Raspberry Pi Pico W:

Выбираем последний стабильный Release, а не Preview. На 5 августа 2026 года актуальным стабильным выпуском является MicroPython 1.28.0.

Для сторонней платы на RP2040 находим именно её сборку в каталоге загрузок MicroPython. Прошивка для обычного Pico не всегда учитывает распиновку и объём flash-памяти сторонней платы.


3. Устанавливаем MicroPython на Pico #

  1. Отключаем Pico от компьютера.
  2. Зажимаем кнопку BOOTSEL.
  3. Не отпуская кнопку, подключаем USB-кабель.
  4. Отпускаем BOOTSEL.
  5. Дожидаемся появления в системе накопителя RPI-RP2.
  6. Копируем на него скачанный файл MicroPython .uf2.
  7. Дожидаемся автоматического отключения накопителя и перезагрузки платы.

После перезагрузки Pico больше не отображается как накопитель. Вместо этого MicroPython создаёт USB-последовательный порт с интерактивной консолью REPL.

Если RPI-RP2 не появляется:

  • проверяем, что USB-кабель поддерживает передачу данных;
  • пробуем другой USB-порт;
  • убеждаемся, что BOOTSEL была нажата до подключения кабеля.

Официальное описание процесса: MicroPython в документации Raspberry Pi.


4. Устанавливаем mpremote #

mpremote — официальный инструмент MicroPython для подключения к REPL, запуска файлов и работы с файловой системой платы.

Рекомендуется установить его как изолированный инструмент через uv:

uv tool install mpremote

Если mpremote уже установлен, обновляем его:

uv tool upgrade mpremote

Проверяем установку:

mpremote --version
mpremote connect list

Если команда uv отсутствует, сначала устанавливаем её:

macOS #

brew install uv

Linux Mint #

curl -LsSf https://astral.sh/uv/install.sh | sh

После установки uv закрываем и снова открываем терминал, затем выполняем:

uv tool install mpremote

Документация инструмента: MicroPython mpremote.


5. Настраиваем доступ к USB-порту в Linux Mint #

На macOS дополнительная настройка обычно не требуется.

На Linux сначала выполняем:

mpremote connect list

Если появляется ошибка Permission denied, добавляем пользователя в группу dialout:

sudo usermod -aG dialout "$USER"

После этого полностью выходим из пользовательского сеанса и входим снова. Простого перезапуска терминала может быть недостаточно.

Проверяем группы:

groups

В списке должна присутствовать dialout.


6. Проверяем REPL #

Подключаем Pico и выполняем:

mpremote connect auto repl

Должно появиться приглашение MicroPython:

>>>

Смотрим информацию о прошивке:

import sys
print(sys.implementation)

Проверяем встроенный светодиод:

from machine import Pin

led = Pin("LED", Pin.OUT)
led.on()
led.off()

Полезные сочетания клавиш в REPL:

  • Ctrl+C — остановить выполняющуюся программу;
  • Ctrl+D — выполнить мягкую перезагрузку MicroPython;
  • Ctrl+] — выйти из mpremote.

7. Создаём проект #

mkdir -p "$HOME/Developer/rp2040-micropython/.zed"
cd "$HOME/Developer/rp2040-micropython"
zed .

Структура проекта:

rp2040-micropython/
├── .zed/
│   └── tasks.json
├── boot.py
└── main.py

Назначение файлов:

  • boot.py выполняется первым и используется для начальной настройки устройства;
  • main.py запускается автоматически после boot.py при включении или перезагрузке Pico.

Для небольшого проекта boot.py можно оставить практически пустым.

boot.py #

# Начальная настройка устройства.

main.py #

from machine import Pin
from time import sleep_ms

led = Pin("LED", Pin.OUT)

while True:
    led.toggle()
    sleep_ms(500)

8. Настраиваем Zed #

Создаём .zed/tasks.json:

[
  {
    "label": "MicroPython: devices",
    "command": "mpremote",
    "args": ["connect", "list"],
    "cwd": "$ZED_WORKTREE_ROOT",
    "reveal": "always"
  },
  {
    "label": "MicroPython: REPL",
    "command": "mpremote",
    "args": ["connect", "auto", "repl"],
    "cwd": "$ZED_WORKTREE_ROOT",
    "reveal": "always"
  },
  {
    "label": "MicroPython: run current file",
    "command": "mpremote",
    "args": ["connect", "auto", "run", "$ZED_FILE"],
    "cwd": "$ZED_WORKTREE_ROOT",
    "reveal": "always"
  },
  {
    "label": "MicroPython: upload project",
    "command": "mpremote",
    "args": [
      "connect", "auto",
      "fs", "cp", "boot.py", "main.py", ":",
      "+", "reset"
    ],
    "cwd": "$ZED_WORKTREE_ROOT",
    "reveal": "always"
  },
  {
    "label": "MicroPython: list files",
    "command": "mpremote",
    "args": ["connect", "auto", "fs", "ls"],
    "cwd": "$ZED_WORKTREE_ROOT",
    "reveal": "always"
  }
]

Открываем список задач:

  • macOS: Cmd+Shift+R;
  • Linux: Ctrl+Shift+R.

9. Выстраиваем рабочий цикл разработки #

Временно выполняем текущий файл #

Открываем нужный .py в Zed и запускаем:

MicroPython: run current file

Команда выполняет локальный файл на плате, но не сохраняет его как постоянную программу. Это удобно для быстрых экспериментов.

Выполняем эквивалентную команду в терминале:

mpremote connect auto run main.py

Сохраняем проект на плате #

Запускаем:

MicroPython: upload project

После копирования файлов плата перезагрузится и автоматически выполнит main.py.

Выполняем эквивалентную команду в терминале:

mpremote connect auto fs cp boot.py main.py : + reset

Просматриваем файлы на плате #

mpremote connect auto fs ls

Читаем сохранённый main.py:

mpremote connect auto fs cat main.py

Копируем его обратно на компьютер:

mpremote connect auto fs cp :main.py main-from-pico.py

10. Подключаемся к конкретной плате #

Если подключено несколько MicroPython-устройств, connect auto может выбрать не то.

Смотрим список:

mpremote connect list

Пример подключения на Linux:

mpremote connect /dev/ttyACM0 repl

Пример подключения на macOS:

mpremote connect /dev/cu.usbmodem1101 repl

Имена портов могут отличаться. Используем значение, показанное командой mpremote connect list.


11. Устанавливаем библиотеки #

MicroPython использует собственные пакеты, рассчитанные на микроконтроллеры. Обычные пакеты CPython из PyPI могут не работать из-за различий API и ограниченной памяти.

Устанавливаем пакет из micropython-lib:

mpremote connect auto mip install ИМЯ_ПАКЕТА

Пример для Pico W:

mpremote connect auto mip install requests

Копируем локальную папку lib на плату:

mpremote connect auto fs cp -r lib :

Обычно сторонние модули размещаются в /lib на файловой системе Pico.


12. Восстанавливаем работу при зависании main.py #

Если программа содержит бесконечный цикл, это нормально. Для остановки:

mpremote connect auto repl

Затем нажимаем Ctrl+C.

Если подключиться не удаётся:

  1. Отключаем Pico.
  2. Зажимаем BOOTSEL.
  3. Подключаем USB.
  4. Снова устанавливаем MicroPython .uf2.

Загрузчик BOOTSEL находится в ROM микроконтроллера, поэтому обычной программой его невозможно стереть.


13. Разбираемся с MicroPython и USB HID #

Актуальный MicroPython для RP2040 предоставляет низкоуровневый API machine.USBDevice, позволяющий создавать собственные USB-функции, включая HID.

Документация:


14. Проверяем готовое окружение #

Окружение готово, если выполняются все пункты:

  • на Pico установлена правильная MicroPython-прошивка;
  • mpremote --version работает;
  • mpremote connect list показывает плату;
  • mpremote connect auto repl открывает >>>;
  • текущий файл запускается задачей Zed;
  • boot.py и main.py копируются на плату;
  • после отключения и повторного подключения Pico автоматически выполняет main.py.

Источники #

Жми класс
Обновлено 05.08.2026

Оцените документ




0

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

0