Pico Sync — компактний CLI-інструмент для зручної роботи з Raspberry Pi Pico / Pico W під MicroPython. Надає команди для синхронізації файлів, перегляду файлової системи, базових операцій з файлами на пристрої, моніторингу логів та перезавантаження плати.
Працює поверх mpremote. Підтримує інтерактивний режим з меню, fzf, вибір мови (UA/EN).
Мета інструмента — зробити розробку на MicroPython максимально схожою на роботу з локальним проєктом.
Можливості:
- 🔄 Синхронізація — завантаження файлів на Pico (src/ або корінь)
- 🧠 SHA-синхронізація — оновлюються лише змінені файли (SHA-256)
- 🗑 Автовидалення зайвих файлів — файли на Pico, яких немає локально, видаляються
- 🧼 Очищення порожніх директорій — після синхронізації
- ⛔
.picoignore— ігнорування файлів (як.gitignore) - 📂 Перегляд та редагування файлів — інтерактивний браузер (pick) або
--ls/--cat/--edit(CLI) - 🔍 Авто-детект порту — пошук Pico серед serial-портів: спочатку за іменем пристрою (якщо задано
.piconame), потім за збереженим портом, інакше — перший-ліпший Pico - 🔌 Серійний монітор — живий перегляд логів з Pico
- 🔁 Перезавантаження — програмний reset плати
- 🌐 Мова інтерфейсу — Українська / English
- 📦 Менеджмент проектів — збереження проектів з налаштуваннями
📖 Докладніше: інтерактивний режим (pick) · CLI режим
Рекомендовано (pipx):
pipx install pico_syncІзоляція в окремому середовищі, не засмічує систему.
Альтернатива (pip):
pip install pico_syncМожна з --user:
pip install --user pico_syncЧерез pip:
pip install pico_syncПотрібен Python 3.7+ встановлений і доданий у PATH.
Через pipx:
pipx install pico_syncЧерез pip:
pip3 install pico_syncЧерез pipx:
pipx install pico_syncgit clone https://github.com/toldk98/pico_sync.git
cd pico_sync
pip install .git clone https://github.com/toldk98/pico_sync.git
cd pico_sync
pip install pyserial mpremote
python pico_sync_portable.py- Python 3.7+
pyserial— робота з serial-портамиmpremote— виконання команд на Pico
- fzf — зручний вибір у меню. Якщо не встановлено — використовується нумерований вибір.
- Pick:
picosyncабоpicosync --pick. Відкриває меню з fzf (або нумерований вибір). → докладніше - CLI:
picosync <options>. Флаги дії без інтерактиву. → докладніше
- Pick: список збережених проектів +
[+] add project,[-] remove project,[s] settings,[q] quit. Вибір проекту → головне меню. - CLI:
picosync --help— всі опції;picosync project --help— керування проектами.
- Pick:
[d] device → sync→ вибір фільтра з меню (all/py/py+/nopy/custom). - CLI:
picosync --sync [--filter py|py+|nopy|.ext,.ext2].
Алгоритм (спільний для обох режимів):
- Завантажує
.picoignoreз кореня проекту - Робить знімок всіх файлів на Pico
- Проходить локальною директорією (src/ або корінь), збирає файли для синхронізації (пропускає ігноровані та
.piconame) - Виконує SHA-256 всіх файлів на Pico одним запитом
- Порівнює хеші: збіг → пропускає, відсутній → завантажує, різний → оновлює
- Видаляє з Pico файли без локальної відповідності (з урахуванням фільтра)
- Очищує порожні директорії
- Pick:
[f] files— браузер з навігацією теками,[*] find— пошук по всіх файлах; cat/edit/rm у контекстному меню файлу. Редактор: nano/vim (Linux), TextEdit (macOS), notepad (Windows). → докладніше - CLI:
picosync --ls /— список кореня;picosync --ls /spm— список директорії;picosync --cat /main.py— вміст;picosync --edit /config.py— редагування. → докладніше
- Pick:
[d] device → monitor - CLI:
picosync --monitor
Вихід: Ctrl+C. Авто-перепідключення при reboot/зміні порту.
- Pick:
[d] device → reboot - CLI:
picosync --reboot
Програмний reset через mpremote reset.
- Pick:
[c] config → port_settings → piconame→ detect (прочитати з Pico), set (записати нове), clear (видалити + очистити конфіг). - CLI:
picosync --set-name <name>— записує/.piconameна Pico та зберігає в конфіг.
- Pick:
[c] config→ port_settings/baud/piconame/init. - CLI:
picosync --port /dev/ttyACM0 --sync,picosync --init,picosync --search_port.
- Pick: стартовий екран —
[+] add project(ввести шлях),[-] remove project(вибрати зі списку). → докладніше - CLI:
picosync project list,picosync project add /path,picosync project remove <name>. → докладніше
- Pick:
[s] settings→[~] lang(перемикання UA/EN),[!] check update(перевірка оновлень). → докладніше - CLI:
picosync --lang ua/en,picosync --check_update,LANG=ua/LANG=en— змінна середовища. → докладніше
Файл: ~/.config/pico_sync/settings.json
{
"language": "ua"
}- language — мова інтерфейсу:
"ua"або"en". Визначається автоматично: спочатку з файлу, потім з$LANG(якщоuk*→"ua", інакше →"en"). Змінюється:- Pick:
[s] settings → [~] lang - CLI:
--lang ua/en - Спільне:
LANG=ua/LANG=en
- Pick:
Файл: ~/.config/pico_sync/projects.json
{
"projects": [
{
"name": "my-project",
"root": "/home/user/projects/my-project",
"last_used": "2026-06-29T12:00:00"
}
]
}Кожен проект містить:
name— назва (basename кореневої директорії)root— абсолютний шлях до кореняlast_used— дата останнього використання (ISO 8601)
Проекти сортуються за last_used спаданням.
Файл: <project_root>/.picosyncconfig
{
"port": "",
"filter": "all",
"piconame": ""
}| Поле | Тип | Опис |
|---|---|---|
port |
str |
Порт Pico (напр. /dev/ttyACM0). Порожньо = авто-детект |
filter |
str |
Фільтр синхронізації: all, py, py+, nopy, .ext,.ext2 |
piconame |
str |
Ім'я пристрою для пошуку за іменем. Порожньо = не використовується |
Створюється:
- Pick:
[c] config → init - CLI:
picosync --init
Працює за принципом .gitignore. Приклади:
# ігнорувати secret.py
secret.py
# ігнорувати всю теку
data/
# ігнорувати за розширенням
*.mpyПідтримує:
*— будь-яка кількість символів?— один символ[abc]— символ з набору**— будь-яка вкладеність!— інверсія (не ігнорувати)- Рядки без
/застосовуються до всіх рівнів; з/— до конкретного шляху
Стандартний .picoignore:
__pycache__/
*.pyc
.git/
.DS_Store
Thumbs.db
dist/
*.egg-info/
build/
.idea/
*.swp
*.swo
Інструмент шукає Pico в такому порядку:
- За .piconame (якщо задано) — перебирає всі Pico-порти, читає
/.piconameз кожного - За port з конфігу — використовує збережений порт
- Авто-детект — знаходить перший пристрій з USB ID Raspberry Pi (0x2E8A)
- Якщо нічого не знайдено:
- Pick:
[c] config → port_settings → portдля ручного вибору - CLI:
picosync --search_portдля ручного вибору
- Pick:
Опціональне ім'я пристрою, що зберігається у файлі /.piconame на Pico. Дозволяє ідентифікувати конкретну плату, коли підключено кілька Pico.
Керування:
- Pick:
[c] config → port_settings → piconameз пунктами detect (прочитати з Pico), set (записати нове), clear (видалити з Pico та очистити конфіг) - CLI:
picosync --set-name <name>— записати ім'я на Pico та зберегти в конфіг
.piconame автоматично виключається з синхронізації (не видаляється, не завантажується).
Впливають тільки на видалення зайвих файлів з Pico. Завантажуються всі файли незалежно від фільтра.
| Фільтр | Опис |
|---|---|
all |
Всі файли (видаляє зайве на Pico) |
py |
Тільки .py |
py+ |
.py, .txt, .json |
nopy |
Все крім .py |
.ext,.ext2 |
Власні розширення через кому |
Переконайтеся що Pico підключено USB-кабелем (не тільки живлення). Якщо авто-детект не спрацював:
- Pick:
[c] config → port_settings → portдля ручного вибору з переліку serial-портів - CLI:
picosync --search_portдля інтерактивного вибору з переліку serial-портів
Авто-детект візьме перший знайдений. Щоб працювати з конкретним пристроєм:
- Pick:
[c] config → port_settings → piconame → set, задайте унікальне ім'я - CLI:
picosync --set-name <name>, задайте унікальне ім'я
fzf — опціональний інструмент для зручної навігації в інтерактивному режимі. Без нього працює звичайний ввід номерів. Для CLI-режиму fzf не потрібен.
- Linux:
sudo apt install fzf(абоpacman -S fzf,dnf install fzf) - macOS:
brew install fzf - Windows: завантажити binary з https://github.com/junegunn/fzf/releases
Перевірте .picoignore — можливо файл підпадає під правило ігнорування. Якщо в корені є src/ — синхронізується вона, інакше корінь.
Встановіть залежності: pip install pyserial mpremote (актуально тільки для portable-версії без встановлення пакета).
Перевірка наявності оновлень: [s] settings → [!] check update (pick) або picosync --check_update (CLI). Показує новішу версію, changelog та посилання, але не оновлює автоматично.
Встановлення оновлення:
- Через pipx:
pipx upgrade pico_sync - Через pip:
pip install --upgrade pico_sync
CLI: picosync --help, picosync project --help
У pick-режимі всі доступні дії показуються в меню.