После парочки проектов Arduino в стандартной Arduino IDE начинаешь подумывать о том, как расстаться с IDE для новичков и найти другой способ настройки файлов с помощью функций setup()
и loop()
в файле .ino
.
Скорее всего, большинство ваших первых проектов придерживались следующий структуры в файле .ino
:
setup() { } loop() { }
Чтобы распрощаться с этой тенденцией, я начал использовать редактор, пригодный практически для любых целей, — Visual Studio Code.
VS Code предлагает разные расширения для разработки Arduino. Я предпочел PlatformIO, поскольку оно превращает VS Code в полноценную IDE для различных встраиваемых систем, включая и Arduino!
Установив VS Code, открываем контекстное меню комбинацией клавиш control + shift + p
. После этого вводим install
и находим опцию Extensions: Install Extensions
(Расширения: Установить расширения).

Выбираем Extensions: Install Extension
и находим PlatformIO, набирая в поисковой строке слово “platform.” На левой боковой панели появляется опция PlatformIO IDE
. Остается только нажать Install
.

После установки на левой боковой панели VS Code вы увидите иконку с инопланетянином, указывающую на расширение PlatformIO IDE. Выбираем ее и открываем PlatformIO IDE GUI.

После открытия GUI для PlatformIO выбираем New Project
и начинаем работу над первым проектом Arduino за рамками Arduino IDE для начинающих!

Например, я воспользовался версией “Hello, World” для встраиваемых систем, которая мигает светодиодом (англ. LED). В связи с этим проект получил название blinky
(от англ. blink — мигать). В поле выбора Boards
обязательно выбираем нашу рабочую плату, чтобы гарантировать успешное завершение процесса сборки и прошивки.
После именования проекта и выбора нужной платы Arduino открывается диалоговое окно с каталогом проекта и основным файлом исходного кода. Файл main.ino
больше не существует! Структура каталога становится более упорядоченной, и основной файл исходного кода находится в main.cpp
.

Теперь единственным файлом, о котором нужно беспокоиться, становится main.cpp
. Начав заниматься разработкой встроенного ПО на других системах, я заметил, что Arduino абстрагирует большую часть инициализации в функции main
, используя setup()
и loop()
. Поскольку мне это не особо нравится, я удалил содержимое main.cpp
и заменил его на main()
:
#включение <Arduino.h> int main(int argc, char **argv) { init(); for(;;) { } }
Заменив функции setup()
и loop()
на main()
, вы заметите наличие функции init()
. С ее помощью происходит инициализация платы Arduino для работы с последующим кодом. В отсутствии функции init()
код не будет выполняться должным образом.
Как видно, благодаря инструкции #include
в начале файла у нас будут все функции Arduino для входа, выхода, пинов и т.д.
С помощью функции pinMode()
устанавливаем режим работы пина на выход:
const int ledPin = 12; pinMode(ledPin, OUTPUT);
Здесь применяется пин 12 на Arduino для управления светодиодом на макетной плате.
Далее необходимо установить циклическое включение и выключение светодиода с односекундной задержкой между операциями. Данный код заставляет светодиод мигнуть один раз:
digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000);
Чтобы добиться непрерывного мигания, помещаем код в цикл for(;;)
.
Итоговый файл main.cpp
выглядит так:

По мере готовности кода переходим к сборке и прошивке проекта. Для сборки комбинацией клавиш control + shift + p
открываем контекстное меню, вводим build
и видим запись PlatformIO: Build
. Эта опция позволяет PlatformIO cкомпилировать и собрать проект Arduino для конкретной платы, указанной ранее при создании проекта.

При выборе данной опции в нижней половине окна VS Code появляется небольшой терминал. После успешной компиляции и сборки код готов к прошивке! По итогам удачной сборки в терминале выводится следующее сообщение:

На следующем этапе приступаем к загрузке (прошивке) сборки на плату Arduino. Снова задействуем control + shift + p
и вводим upload
. В списке опций выбираем PlatformIO: Upload
и загружаем собранный проект на плату Arduino.

PlatformIO: Upload
После загрузки проекта на плату Arduino заставит светодиод мигать с односекундной паузой между операциями!
В терминале VS Code результативная загрузка выглядит так:

Поздравляю с написанием первого проекта Arduino за рамками Arduino IDE для начинающих! Теперь вы работаете со встроенными системами, которые отделены от Arduino IDE. PlatformIO также используется с платами STM32 и более дешевыми платами-клонами, доступными в интернете.
Читайте также:
- Создаём конвейер автоматизированных сборок для проекта на Arduino. Часть 1/2
- Как создать конвейер автоматизированных сборок для проекта в Arduino Часть 2/2
- 7 наиболее полезных расширений VS Code, представленных в 2021 году
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Jacob Latonis: Arduino and Visual Studio Code: Getting Started