Второй ноутбук появился у меня через полгода после первой Uno, и скетч поливалка_v2 я искал на старой машине больше часа: нашёл в Загрузках, в архиве почты и ещё где-то на рабочем столе. Финальный файл поливалка_v2.ino лежал вообще без папки, и среда отказалась его открывать: скетч, сказала она, должен лежать в папке с тем же именем. Я создал папку руками, переложил файл — заработало. Но полчаса я честно верил, что скетчи живут «внутри Arduino IDE», как документы внутри текстового редактора.
На деле у среды ровно один дом для ваших проектов — sketchbook. Все правки, все версии, все библиотеки складываются туда по понятным правилам, и эти правила стоит выучить в первую неделю: от того, где лежит библиотека, зависит, переживёт ли она обновление среды, а от имени папки — откроется ли скетч вообще. По пути, который мы уже наметили в уроке про установку на Windows, sketchbook по умолчанию — это Документы\Arduino, и среда создаёт его при первом запуске.
Разберём структуру по полкам: где именно sketchbook и как его перенести, что лежит внутри, почему файл обязан носить то же имя, что и папка, куда падают библиотеки и как переехать на новый компьютер за пять минут. Базовое знакомство с папкой проектов уже было в уроке про библиотеки в среде — сегодня договорим до конца.
Sketchbook: дом для всех ваших проектов
Путь по умолчанию зависит от системы: на Windows это Документы\Arduino, на macOS — Документы/Arduino, на Linux — ~/Arduino. Точное место у себя можно посмотреть и поменять в «Файл — Настройки», поле про расположение sketchbook. Менять путь я вижу смысл в одном случае: когда системный диск крошечный, а скетчей набралось много. Во всех остальных сценариях лучше оставить как есть — так проще следовать чужим инструкциям и не путаться при переездах.
Ваши скетчи никогда не лежат в папке самой среды. Это не каприз, а страховка: среда обновляется с зачисткой своих папок, и всё, что вы положили рядом с ней, рискнуло исчезнуть. Sketchbook живёт отдельно, поэтому ваши проекты переживают любые обновления IDE. То же правило касается библиотек из менеджера: официальная документация прямо рекомендует ставить их только в sketchbook/libraries — тогда обновление среды не тронет ни одну из них.
Каждый скетч — это папка. Внутри лежит файл с расширением .ino, и его имя обязано совпадать с именем папки: Документы\Arduino\Мигалка\Мигалка.ino. Добавите через меню новый файл-вкладку notes.h — среда положит его рядом, в ту же папку. Я храню в папке проекта и то, что среда не трогает: заметку с номиналами, фото собранной схемы, список покупок. Среда эти файлы игнорирует, а мне они через месяц объясняют, зачем проекту резистор на 220 Ом.
Чтобы картина была осязаемой: мой sketchbook после двух лет — это двадцать три папки-проекта, из них живых восемь. Всё остальное — учебные упражнения и сломанные эксперименты, которые я удаляю не сразу: старые скетчи часто оказываются единственным местом, где записано, как я чинил конкретный датчик. Мегабайт сорок с копейками — меньше, чем один ролик с инструкцией, и в отличие от ролика скетчи всегда открываются.
- Документы\Arduino — корень sketchbook: здесь живут папки-скетчи, по папке на проект.
- Документы\Arduino\libraries — библиотеки из менеджера и ручной установки, каждая в своей подпапке.
- Документы\Arduino\Мигалка\Мигалка.ino — скетч: имя папки и имя файла совпадают.
- Соседние вкладки скетча — любые .h и .cpp рядом с .ino подхватываются средой автоматически.
- Файл — Примеры — примеры из папок examples внутри установленных библиотек, ниже встроенных примеров среды.
Правило «папка равна файлу» выглядит придиркой, пока не встретишь сообщение вида «The sketch must be inside a folder named …» — тогда становится ясно, что это не прихоть, а способ среды отличить проекты друг от друга. При первом сохранении нового скетча среда сама предлагает создать папку с правильным именем — соглашайтесь и не перетаскивайте файлы руками. Я один раз «ускорил» процесс, собрав папку вручную с опечаткой в имени, и потом искал, почему проект открывается пустым.
С именами есть ещё один мой шрам: кириллица в названиях работает, но всплывает в логах компиляции и при переносе на другие системы неожиданными способами. Поливалка_v2 на сетевом диске однажды превратилась в набор знаков вопроса — с тех пор имена папок у меня только латиницей: polivalka_v2, termometr_07, zapalki. Версию в имя выношу, только когда отдаю проект другому человеку; для себя веду заметку в папке, куда складываю, что изменилось и почему.
Вкладки заслуживают отдельного абзаца, потому что новички их боятся, а зря. Когда скетч обрастает своими функциями и перестаёт влезать в один экран, вынесите их в отдельный файл .h рядом с .ino — среда покажет его второй вкладкой, и проект останется одним целым: сохранение, бэкап и переезд по-прежнему затрагивают одну папку. Как раскладывать код по функциям, чтобы вкладка получалась живой, а не свалкой, мы разбирали в уроке про свои функции. Мигалка ниже обойдётся одной вкладкой, но привычка делить код рано или поздно пригодится каждому.
void setup() { Serial.begin(9600); pinMode(LED_BUILTIN, OUTPUT); Serial.println("passport: polivalka_v2"); Serial.print("ver="); Serial.println(3); Serial.print("baud="); Serial.println(9600);} void loop() { digitalWrite(LED_BUILTIN, HIGH); Serial.print("led=1 t="); Serial.println(millis()); delay(300); digitalWrite(LED_BUILTIN, LOW); Serial.print("led=0 t="); Serial.println(millis()); delay(700);}// Паспорт сверяется с заметкой в папке проекта: та ли версия загружена?Папка libraries внутри sketchbook заслуживает отдельного абзаца. Установили библиотеку из менеджера — рядом появились подпапки с её именем, внутри — файлы исходников и папка examples. Именно поэтому примеры установленных библиотек видны в «Файл — Примеры» ниже встроенных: среда просто сканирует папки. Открывая чужой пример, вы работаете с копией, и среда честно предложит «Сохранить как» — мой совет всегда сохранять копию в свой sketchbook, оставляя оригинал нетронутым: оригинал однажды покажет, как библиотека задумывалась автором.
Библиотеки править в sketchbook/libraries руками я перестал после первого же обновления: менеджер перезаписал папку молча, вместе с моими правками. Теперь свои улучшения чужого кода я копирую в папку проекта отдельным файлом-вкладкой — так они переживают любые обновления. Настройки, которые проект должен помнить между включениями, в этот принцип вписываются иначе: их хранит сама плата, и урок про EEPROM разберёт это на счётчике включений.
Переезд на новый компьютер — самая приятная часть структуры: скопировать папку Arduino целиком, поставить среду на новом месте, открыть «Файл — Настройки» и указать скопированный sketchbook. Проекты, библиотеки и заметки приедут вместе. Промежуточные файлы сборки переносить не нужно: среда держит их во временных папках системы и пересоздаёт сама при первой компиляции — это займёт на новой машине привычные тридцать секунд, о которых мы говорили в уроке про первый скетч.
Паспорт из скетча выше — не украшение, а инструмент. Когда на плате работает «что-то не то», печать версии в setup мгновенно отвечает на вопрос «то ли вообще загружено»: строку ver= видно в мониторе порта — если вы ещё не подружились с этим окном, урок про монитор закрывает вопрос за десять минут. А когда данных в проекте станет столько, что хранить их в заметке станет тесно — например, журнал температуры за месяц — урок про логирование на SD-карту покажет, куда их направить.
Мой порядок в файлах
Свой порядок я формулирую тремя правилами. Первое: один проект — одна папка в sketchbook, никаких «временно здесь» — «временно» живёт годами. Второе: заметка в папке проекта вместо версий в имени — строка «07: добавил гистерезис, потому что насос дёргался» экономит больше времени, чем поливалка_v7 рядом с поливалкой_v8. Третье: раз в месяц папка Arduino уезжает в облако целиком — две сотни скетчей с заметками весят меньше сотни мегабайт, и это самая дешёвая страховка, которую я знаю.
Чего я не делаю: не храню скетчи на рабочем столе и в Загрузках — всё, что вне sketchbook, к следующему переезду теряется; не редактирую примеры библиотек на месте и не правлю чужие исходники внутри libraries; и не веду два «главных» .ino в одной папке — среда соберёт их в один проект, и результат меня однажды удивил. Порядок в папках — скучная тема, но именно она делает переезд на новый ноутбук пятиминутным делом, а не квестом с поиском по диску, как было у меня с поливалкой.
- 1. Где по умолчанию находится sketchbook на Windows?
- 2. Почему библиотеки из менеджера ставятся в sketchbook/libraries, а не в папку среды?
- 3. Среда пишет: скетч должен лежать в папке с тем же именем. Что случилось?
- 4. Что скопировать на новый компьютер, чтобы увезти все проекты и библиотеки?
- Sketchbook — Документы\Arduino или путь из «Файл — Настройки»: единственный дом проектов.
- Имя папки и имя .ino совпадают — иначе среда не откроет проект.
- Библиотеки ставьте в sketchbook/libraries: они переживают обновления среды.
- Примеры библиотек правьте только через «Сохранить как» — оригиналы оставляйте нетронутыми.
- Переезд на новый компьютер — копирование папки Arduino целиком и одна настройка пути.
Частые вопросы по теме урока
- Где по умолчанию находится sketchbook на Windows?
- По умолчанию sketchbook — это Документы\Arduino. Точный путь виден и меняется в «Файл — Настройки», поле про расположение sketchbook. В Документы\Arduino
- Почему библиотеки из менеджера ставятся в sketchbook/libraries, а не в папку среды?
- Обновление IDE перезаписывает свои папки. Sketchbook живёт отдельно, поэтому библиотеки и проекты там переживают любые обновления среды. Папка среды зачищается при обновлении, а sketchbook остаётся нетронутым
- Среда пишет: скетч должен лежать в папке с тем же именем. Что случилось?
- Файл .ino обязан лежать в папке с тем же именем — например Мигалка\Мигалка.ino. Создайте папку, переложите файл и откройте проект заново. Файл .ino лежит вне папки со своим именем
- Что скопировать на новый компьютер, чтобы увезти все проекты и библиотеки?
- Sketchbook несёт в себе проекты, заметки и папку libraries. Кэш сборки среда пересоздаст сама, а папку среды копировать бесполезно и вредно. Sketchbook целиком — папку Arduino