Справочник
Скетчи Arduino: что такое скетч, где взять готовый и как открыть
Скетч — это программа для платы Arduino. У неё одно жёсткое правило, о котором молчат учебники: скетч это папка, а не файл, и главный файл .ino обязан называться так же, как папка. Ниже — разбор правила, самый первый рабочий скетч целиком, путеводитель по готовому коду для двенадцати типовых задач и ответы на вопросы про .ino, .pde и два скетча в одной папке.
Определение
Что такое скетч
Скетчем в мире Arduino называют программу для платы. Слово пришло из среды Processing, откуда Arduino позаимствовала интерфейс, и означает «набросок». По сути это обычный текст на языке C++ — его читает компилятор, превращает в прошивку и заливает в микроконтроллер.
Файл скетча имеет расширение .ino. Это обычный текстовый файл: его можно открыть Блокнотом и прочитать. А вот сохранять из Блокнота опасно — он меняет кодировку, и русские строки в мониторе порта превращаются в кракозябры, хотя код внешне тот же.
В любом скетче есть две обязательные функции: setup() выполняется один раз при включении, а loop() — по кругу. Вот самый первый рабочий скетч целиком — мигание встроенным светодиодом. Мы его собрали: на Arduino Uno он занимает 924 байта из 32 256.
void setup() {
// Настраиваем вывод со встроенным светодиодом на выход.
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // подали напряжение — светодиод горит
delay(500); // ждём полсекунды
digitalWrite(LED_BUILTIN, LOW); // сняли напряжение — светодиод погас
delay(500); // и снова ждём полсекунды
}
Подробный разбор с исходником ядра — в статье «void setup() и void loop()». А чем скетч отличается от прошивки, просто: скетч — это исходный текст, который пишете вы; прошивка — файл .hex, который получается после сборки и уезжает в плату.
Главное правило
Скетч — это папка, а не файл
Официальная спецификация Arduino формулирует это прямо: скетчем считается папка, и в ней обязан лежать файл .ino с тем же именем. Скачали один .ino из интернета и положили в «Загрузки» — среда его не откроет.
Ошибка при нарушении правила выглядит так (это реальный вывод нашей сборки, arduino-cli 1.5.2 с ядром arduino:avr 1.8.8):
Не удается открыть скетч: в скетче отсутствует основной файл: C:\...\moy-sketch\moy-sketch.inoВ англоязычной среде та же строка выглядит как Can't open sketch: main file missing from sketch: ….
Обратите внимание: это сообщение приходит до компилятора — искать ошибку в коде бесполезно. Лечение: создайте папку с нужным именем и положите файл внутрь, либо переименуйте файл под имя папки. Указать путь прямо на файл, чтобы обойти правило, не получится — среда всё равно смотрит на имя папки.
Как назвать скетч
| Символы в имени | Вердикт | Что важно знать |
|---|---|---|
| Латинские буквы и цифры | Можно | Обычный случай: blink_test, Meteo2 |
| Цифра первым символом | Можно | Разрешено начиная с Arduino IDE 1.8.4; в старых версиях — нет |
| Дефис, точка, подчёркивание | Можно | Но первым символом может быть только буква, цифра или подчёркивание, а точкой имя не может и заканчиваться |
| Пробел | Лучше не надо | Сборка пройдёт, но пробел уедет в имя файла прошивки — дальше его получают внешние утилиты |
| Русские буквы | Лучше не надо | Arduino IDE заменит их подчёркиваниями, Trema IDE переведёт в латиницу: «Метеостанция» → Meteostantsiya |
| Длиннее 63 символов | Лучше не надо | Создать или переименовать скетч с таким именем среда не даст, а уже готовую папку соберёт молча |
| Имена CON, PRN, COM1… | Нельзя | Запрет Windows, а не Arduino: такие имена заняты системой |
Живой миф: «Arduino не даст назвать скетч с пробелом». Даст. Запрет работает при создании скетча, а сборка такие имена молча проглатывает — мы проверили. Проблема всплывает позже: пробел и кириллица попадают прямо в имя файла прошивки, а его дальше получают внешние программы загрузки.
Каталог
Где взять готовый код: двенадцать задач
Готовый код у нас лежит в трёх местах: 39 уроков курса (там код разобран по строчкам со схемой сборки), справочные страницы и статьи базы знаний, и 81 пример прямо внутри Trema IDE — с русскими комментариями, открываются через меню «Файл → Примеры». Найдите свою задачу:
Чего в списке нет — честно: готового разобранного кода для шаговых моторов, RFID, радиомодулей nRF24 и SD-карт у нас пока нет, только обзорные строки в таблице модулей. Пишем по очереди, по спросу.
Внутри программы
81 пример с русскими комментариями
Штатные примеры Arduino снабжены английскими комментариями — для школьника это стена текста. Мы перевели их все и добавили свой раздел «Полезное»: там лежат заготовки, которые обычно ищут по форумам.
| Раздел | Примеров | О чём |
|---|---|---|
| 01. Основы | 6 | Blink, чтение аналогового входа, пустой каркас скетча |
| 02. Цифровые сигналы | 9 | кнопки, дребезг, мигание без delay, мелодии на зуммере |
| 03. Аналоговые сигналы | 6 | потенциометр, ШИМ, калибровка, сглаживание показаний |
| 04. Обмен данными | 12 | монитор порта, команды с компьютера, график, MIDI |
| 05. Управление программой | 6 | массивы, циклы, условия — школьная алгоритмика на плате |
| 06. Работа со строками | 14 | разбор текста, склейка, поиск, сравнение |
| 07. USB: клавиатура и мышь | 7 | только для Leonardo, Micro и Pro Micro — на Uno не соберутся |
| 08. Программатор | 1 | прошивка одной платы другой платой |
| 09. Полезное | 20 | наши заготовки: сканер I2C, тестер кнопок, фильтр помех, многозадачность |
В разделе «09. Полезное» 20 заготовок. Самые ходовые: I2C_Scanner — находит адрес незнакомого модуля; MultiTasking — несколько дел без delay(); MedianFilter — убирает «иглы» из показаний датчика; ButtonGestures — клик, двойной клик и удержание на одной кнопке; ResetReason — почему плата перезагрузилась; SupplyVoltage — плата измеряет собственное питание без единого датчика. Описание разделов — в базе знаний.
Несколько файлов
Два скетча в одной папке и вкладки
Положить рядом два готовых скетча кажется безобидным, но сборка падает с загадочным сообщением:
vtoroy.ino:1:6: error: redefinition of 'void setup()'
sketch.ino:1:6: note: 'void setup()' previously defined here
Ошибка во время сборки: exit status 1Причина в том, что перед компиляцией среда склеивает все файлы .ino из папки в один: сначала главный, потом остальные по алфавиту. Две функции setup() в одном файле — это ошибка. Держите скетчи в разных папках.
Обратная сторона того же правила полезна: второй файл .ino без setup() и loop() работает как вкладка — функции из него видны в главном файле без всякого #include. Так большой скетч разбивают на части. Подробности — в статье «Вкладки и несколько файлов».
Если раскладываете код по собственным файлам .h и .cpp, помните о трёх отличиях: заголовок сам не подключается — нужен #include "mylib.h"; в своём .cpp не будет ни pinMode, ни digitalWrite, пока не написан #include <Arduino.h>; и прототипы функций там придётся писать руками — автоматика работает только для .ino. Ещё одна тонкость: рекурсивно компилируется только подпапка с именем src, любая другая будет проигнорирована.
Старые файлы
Что делать со скетчем .pde
До версии Arduino 1.0 скетчи сохранялись с расширением .pde. Такие файлы до сих пор собираются, но среда честно предупреждает:
Скетчи с расширением .pde устарели, пожалуйста, переименуйте следующие файлы в .inoПросто переименуйте файл, сохранив правило «имя файла = имя папки». Чего делать нельзя — оставлять рядом старый .pde и новый .ino с одинаковым именем: тогда сборка падает совсем.
На диске
Где лежат ваши скетчи
Arduino IDE хранит скетчи в «скетчбуке»: на Windows это C:\Users\Имя\Documents\Arduino, на macOS — /Users/Имя/Documents/Arduino, на Linux — /home/Имя/Arduino. Папку можно сменить в настройках, а хранить скетчи именно там необязательно — это просто место, содержимое которого попадает в меню «Файл → Папка со скетчами».
Trema IDE держит проекты отдельно, в папке Документы\TremaProjects, а в школьном режиме — в подпапке класса и ученика. Русское имя проекта она не выбрасывает, а переводит в латиницу: «Метеостанция» станет Meteostantsiya, «Умный дом 2» — Umnyy-dom-2. Правило Arduino при этом соблюдается: файл .ino создаётся с именем папки.
Если что-то пошло не так
Скетч не собирается или не заливается
Половина людей, которые ищут готовый код, приходит с уже сломанной сборкой. Развилка простая:
- красные строки со словом
error:— это компиляция, разбор сообщений на странице «Ошибки компиляции Arduino»; No such file or directoryв строке#include— не установлена библиотека: как найти её по имени файла .h;- собралось, но не заливается в плату — дерево причин ошибки загрузки;
- «Скетч слишком большой» или «Недостаточно памяти» — что делать с памятью Arduino.
И частый вопрос про платы: скетч для Nano обычно работает на Uno без единой правки — у них один и тот же микроконтроллер ATmega328P. Меняется только выбор платы перед сборкой. А вот на ESP8266 или ESP32 тот же код может потребовать переделки: другие номера выводов и другая логика 3,3 В. Сравнение плат — на отдельной странице.
Вопросы
Частые вопросы о скетчах
Что такое скетч в Arduino?
Скетч — это программа для платы Arduino, написанная на C++. Слово пришло из среды Processing и означает «набросок». Важная деталь: скетчем считается не файл, а папка, внутри которой лежит главный файл с расширением .ino и таким же именем, как у папки.
Каким расширением сохраняется скетч?
.ino — это текущий формат, начиная с Arduino 1.0. Старое расширение .pde ещё собирается, но среда предупреждает, что оно устарело, и просит переименовать файл. Держать в одной папке .pde и .ino с одинаковым именем нельзя — сборка упадёт.
Почему пишет «в скетче отсутствует основной файл»?
Имя файла .ino не совпадает с именем папки. Это правило спецификации Arduino: папка my_project должна содержать файл my_project.ino. Ошибка приходит ещё до компилятора, поэтому искать её в коде бесполезно — переименуйте файл или создайте папку с нужным именем.
Чем скетч отличается от прошивки?
Скетч — это исходный текст, который пишете вы и который можно прочитать и изменить. Прошивка — файл .hex, который получается из скетча после сборки и заливается в микроконтроллер. Обратно из прошивки скетч не восстанавливается.
Можно ли держать два скетча в одной папке?
Нет. Все файлы .ino из папки склеиваются в один, поэтому две функции setup() дают ошибку redefinition of 'void setup()'. А вот второй файл .ino без setup() и loop() — это законная вкладка: функции из него видны в главном файле без всякого #include.
Где взять готовые скетчи для Arduino?
У нас три источника: 39 уроков курса с разобранным кодом и схемами, справочные страницы по железу (экраны, датчики, ESP) и 81 пример внутри Trema IDE с русскими комментариями — меню «Файл → Примеры». Каталог по задачам собран на этой странице.
Где мои скетчи лежат на диске?
Arduino IDE по умолчанию хранит их в папке Документы\Arduino (на Linux — в домашней папке Arduino), путь меняется в настройках. Trema IDE держит проекты в папке Документы\TremaProjects, а в школьном режиме — в подпапке класса и ученика.
Скетч для Arduino Nano подойдёт для Uno?
Как правило да: у Uno и Nano один и тот же микроконтроллер ATmega328P и одинаковые номера выводов. Достаточно выбрать другую плату перед сборкой. С ESP8266, ESP32 или Pico так не выйдет: там другие выводы, логика 3,3 В и другие размеры типов данных.
Откройте любой пример в два клика
В Trema IDE 81 пример с русскими комментариями лежит в меню «Файл → Примеры», а ошибки объясняются по-человечески. Дальше по теме: программирование Arduino с нуля, 39 уроков курса, справочник по языку.
