Третья машина учебного класса встретила меня вечной жалобой: у меня скетч собирается, у них — нет. Ядро AVR стояло старее, и тот же самый код, который минуту назад компилировался у меня, на соседнем ноутбуке падал на первой строке. Вечер ушёл на выравнивание окружения вручную — по машине за раз, между уроками, с тетрадкой дат версий. Тогда же я заметил: половина затыков в классе — не код, а окружение; железо одинаковое, а ядра разные, и код между ними уже не переселенец, а чужак. После этого я собрал рабочую флешку: среда, ядра и скетчи едут вместе, версии зафиксированы, на новом компьютере ничего не ставится — всё уже в кармане.
Разбираю два инструмента из того похода. Первый — переносимость: что умеет линейка 1.8 с её portable.txt, что даёт ZIP-сборка 2.x и почему честную переносимость приносит arduino-cli с настройкой каталогов. Второй — версии платформ: как понизить ядро из карточки Boards Manager и как зафиксировать его из терминала, чтобы установка сторонней платы не превращалась в лотерею дат. Папка скетчбука со всеми её отделами разобрана в уроке про структуру папок — здесь про то, что живёт вокруг неё.
Сразу расставлю границы: библиотеки со своими версиями — отдельная история со своей механикой, они пересказаны там, где мы их ставили и чистили от дублей. Здесь — слой ниже: ядро платформы, компилятор, инструменты загрузки. Флешка стоит один раз настроить — дальше она переезжает с вами и не меняется под ногами. Именно на этом слое скетч перестаёт собираться после чужих обновлений, и именно этот слой в классе сбегается между машинами.
Переносимость: что умеет каждая линейка
У классической 1.8.19 переносимость встроена одним файлом: положите рядом с arduino.exe пустой файл portable.txt — и скетчбук с библиотеками, ядра и инструменты переезжают в папку среды. Флешка становится окружением целиком: воткнули на любую машину — она приехала со всем своим хозяйством, ни следа в системе. Слово «среда» тут означает не одну программу, а стек: редактор, ядро под вашу плату, компилятор и инструмент загрузки — версией владеет весь стек целиком. У 2.x такого файла нет, хотя просят его давно: ZIP-сборка без установщика запускается из папки на флешке, редактор едет с вами, но хозяйство — ядра, индексы, скетчбук по умолчанию — пишутся в профиль пользователя Windows. Редактор переносной, хозяйство — нет: на новой машине списки плат будут пустыми, пока ядра не поставятся заново. Линейки при этом не спорят за места: у 1.8 своё хозяйство, у 2.x своё — на одной машине живут параллельно, и переносной 1.8 не трогает ни того, ни другого.
Развязку приносит консоль: arduino-cli позволяет назначить каталоги ядер и скетчбука в собственном конфиге. Утилита, ядра под зафиксированными версиями и скетчи складываются в одну папку на носителе, и терминальная сборка из урока про Arduino CLI работает с флешки без следов в системе. Редактор при этом не обязателен: compile и upload ходят мимо IDE, а для правки кода хватает любого блокнота.
Даже без переносимости знать пути — половина порядка. Скетчи и библиотеки живут в Документах\Arduino — это скетчбук, переносится копированием одной папки. Ядра плат, инструменты и кэш загрузок — в скрытом каталоге Arduino15 в профиле: на Windows это %LOCALAPPDATA%\Arduino15, после пары платформ счёт идёт на сотни мегабайт — флешка от 16 ГБ закроет вопрос. Ручная установка ядра из архива идёт мимо Arduino15 — в sketchbook\hardware, и такой пакет переносится вместе со скетчбуком: знание, куда его положить, заменяет менеджер. Путь к скетчбуку меняется и в настройках среды — он пригодится, если захотите держать всё на носителе вручную.
У ручной установки есть ещё одно качество, ради которого её держат: тишина. Пакет в sketchbook\hardware менеджер не трогает и не обновляет — никакое обновление индекса не сдвинет компилятор у ваших студентов посреди семестра. Для учебного класса без интернета это решает вторую задачу: каталог платформ скачивается заранее на подключённой машине, кэш уже в Arduino15\staging, и на занятии установка из локального кэша идёт без единого байта из сети; тот же кэш спасает при замене сгоревшего ноутбука — пакеты с носителя ставятся до первого подключения к сети. В файле окружения рядом со скетчами тогда заводится вторая строка — откуда брать пакет, если класс поедет на новую площадку.
Версии платформ: понизить и зафиксировать
Карточка платформы в Boards Manager — не только кнопка установки: в ней выпадающий список версий. Свежее ядро сломало сборку старого скетча — выбираете прежний номер, Install ставит его поверх, и через минуту всё собирается, как в прошлый четверг. Даунгрейд затрагивает только платформу: инструменты загрузки едут в пакете вместе с ней, библиотеки остаются при своих версиях, и починка сводится к одному слою вместо разбора всего стека. Логика та же, что у библиотек с их списком версий в карточке: история не удаляется при обновлении, откат — выбор из списка, а не охота за архивом. Из терминала те же действия делает arduino-cli: core install arduino:avr@1.8.6 ставит точно эту версию, core list показывает установленную, update-index обновляет каталог. Собачка с номером — вся фиксация.
Правило после класс-поводов: версия платформы прописывается рядом со скетчем. Три строки в текстовом файле: ядро, номер, дата. Через год проект собирается тем же компилятором с теми же флагами, а не чем-то похожим; git-бекап хранит код, файл окружения хранит, чем его собирать. Что таскать при переезде целиком — папку скетча, экспортированный бинарник, список версий — я собирал в уроке про бэкап проекта; здесь тот же принцип, но на уровне ядра.
// Работает на машинах, где IDE не установлена вовсе.// 1) Обновить каталог и посмотреть, что стоит:// arduino-cli core update-index// arduino-cli core list// 2) Понизить ядро до известной рабочей версии:// arduino-cli core install arduino:avr@1.8.4// 3) Вернуться на последнюю:// arduino-cli core install arduino:avr// 4) Переносной конвейер: конфиг cli.yaml рядом с утилитой// directories:// data: /media/usb/arduino-data// user: /media/usb/sketchbook// После шага 4 ядра и скетчи живут на носителе: system trace нулевой.| Что | Где живёт | Как переносить |
|---|---|---|
| Скетчи и библиотеки | Документы\Arduino — скетчбук | копированием папки, целиком |
| Ядра плат и инструменты | %LOCALAPPDATA%\Arduino15 — сотни МБ | конфиг arduino-cli или переустановка версий |
| Среда 1.8.19 портативно | папка среды с файлом portable.txt | флешка целиком: среда, ядра и скетчи вместе |
| Среда 2.x | ZIP-сборка без установщика | редактор едет с флешки, хозяйство — в профиле |
Чек-лист рабочего стола, который я собрал после того вечера. Одна папка на носителе: утилита cli, каталог ядер зафиксированных версий, скетчбук. Рядом текстовый файл с тем, что внутри: ядро, номер, дата, откуда брали. На новой машине всё сводится к одной строке терминала с указанием конфига — и окружение совпадает со старым побайтово, до последнего флага компилятора. Скорость у флешки скромная, компиляция с носителя дольше на секунды, — за воспроизводимость платит только таймер, не результат.
Последний штрих к портативности — дисциплина вынимания. Сборка пишет во временные папки на носителе, и выдёргивать флешку посреди compile — верный способ получить битый кэш; безопасное извлечение занимает секунды и стоит их. На классе я ещё приучил себя к синхронизации версий между носителями: раз в месяц список ядер с флешки сверяется с файлом окружения, расхождение — сразу починка, а не посреди занятия. Порядок, построенный один раз, дальше только катится.
- 1. Как включить портативный режим в Arduino IDE 1.8.19?
- 2. Где в Windows живут установленные ядра плат по умолчанию?
- 3. Свежее ядро сломало сборку старого скетча. Быстрое лечение?
- 4. Какая команда arduino-cli ставит строго указанную версию ядра?
- 5. Вы откатили версию платформы ради старого скетча. На кого действует откат?
- 1.8.19: пустой portable.txt в папке среды делает флешку окружением целиком — скетчбук, библиотеки и ядра едут вместе
- 2.x: ZIP-сборка без установщика едет с флешки, но ядра и скетчбук пишутся в профиль; честную переносимость даёт arduino-cli с конфигом каталогов
- Скетчбук — Документы\Arduino, ядра — %LOCALAPPDATA%\Arduino15, ручная установка ядра — sketchbook\hardware
- Понизить ядро: карточка платформы со списком версий или arduino-cli core install arduino:avr@1.8.6
- Откат версии действует на все скетчи машины; паспорт проекта из трёх строк возвращает сборку через год
Частые вопросы по теме урока
- Как включить портативный режим в Arduino IDE 1.8.19?
- Пустой portable.txt рядом с arduino.exe переносит скетчбук, библиотеки, ядра и инструменты в папку среды. Флешка становится окружением целиком. создать пустой файл portable.txt в папке среды
- Где в Windows живут установленные ядра плат по умолчанию?
- Ядра, инструменты и кэш — в Arduino15 в профиле пользователя. Скетчбук с скетчами и библиотеками — отдельно, в Документах\Arduino. в скрытом каталоге %LOCALAPPDATA%\Arduino15
- Свежее ядро сломало сборку старого скетча. Быстрое лечение?
- Boards Manager хранит историю версий: выбор прежнего номера и Install ставит его поверх за минуту. Тот же номер из терминала — arduino-cli core install с собачкой. в карточке платформы выбрать прежнюю версию из списка и установить поверх
- Какая команда arduino-cli ставит строго указанную версию ядра?
- Собачка с номером фиксирует версию: @1.8.6 — именно она. Без собачки ставится последняя, update-index обновляет каталог, core list показывает установленное. arduino-cli core install arduino:avr@1.8.6
- Вы откатили версию платформы ради старого скетча. На кого действует откат?
- Платформа одна на систему: откат видят все скетчи, и написанные под свежее ядро могут не собраться. Лечение — второй переносной каталог со своей версией. на все скетчи машины: версия платформы одна на всех