PlatformIO: Программируем Arduino в Sublime Text (часть 1)
Наверное многие уже заметили, что стандартная среда Arduino IDE не очень удобная. Я бы даже сказал, что совсем неудобная. Приложение основано на Java, слишком упрощенная подсветка синтаксиса, нет возможностей по массовому выравниванию кода, нет автодополнения. Да вообще много чего нет. Поэтому я уже давно использую Arduino IDE только для компиляции, а код пишу в текстовом редакторе Sublime Text. И вот пару дней назад я подумал, а можно ли добавить команды компиляции в редактор? Ведь он может подключать к себе компиляторы для других языков программирования. Так почему бы и для Arduino так не сделать. Сначала я планировал просто изучить процесс компиляции в Arduino IDE и использовать соответствующие строки компиляции. Но потом я наткнулся на потрясающую вещь: PlatformIO. Эта штука способна один и тот же код компилировать под множество разных платформ: Arduino, STM32, ESP8266 и многое другое. Причём легко интегрируется в различные IDE и редакторы. А можно компилировать вообще одной строкой в консоли. Под катом инструкция по установке и настройке.

1. Устанавливаем Python 2 (на момент написания статьи последняя версия 2.7.12). Я поставил в папку по-умолчанию C:\Python27\ . При установке отмечаем для установки пункт «Add python.exe to Path». Если Python уже установлен был ранее, то необходимо добавить путь в переменную окружения Path.

2. Перезагружаемся для вступления изменений в силу.
3. Устанавливаем SublimeText (если он ещё не установлен). Я просто скачал portable-версию и распаковал её по пути C:\Progs\Sublime Text 2.0.2.


4. Устанавливаем PlatformIO. Для этого открываем командную строку и выполняем команду:
pip install -U platformio
Всё скачается и установится автоматически с помощью системы управления пакетами Python (pip). Больше для установки ничего делать не надо.
5. Качаем плагин Deviot и ставим его в Sublime Text. Можно установить с помощью менеджера пакетов, если он у вас уже установлен в Sublime. Я просто скачал плагин с гитхаба и распаковал в папку C:\Progs\Sublime Text 2.0.2\Data\Packages\Deviot . При следующем запуске плагин будет установлен и настроен.

Ну вот и всё. Теперь у нас установлено всё необходимое. Arduino IDE больше не нужна. За одним исключением, о котором чуть позже.
Теперь о том, как это всё работает.
Создаём папку для проекта. Я создал C:\coding\test1 . Открываем командную строку. В Windows 10 проще нажать кнопку «Файл» в проводнике, а потом выбрать «Открыть командную строку».
В других версиях Windows после этого необходимо будет ещё перейти в папку проекта с помощью команды cd:
cd C:\coding\test1
Для начала посмотрим, какие платы поддерживаются. Для этого есть команда «platformio boards {название}». В качестве названия можно вводить модель чипа, платформу, название платы. Я хочу запрограммировать чип ATmega328 от Arduino Diecimilla. Ввожу:
platformio boards atmega328
Получаем список всех плат с ATmega328. Ищем нужную нам строчку, в моём случае «Arduino Duemilanove or Diecimila ATmega328» и смотрим самый первый столбец (diecimilaatmega328) — этот идентификатор платы нам сейчас понадобится.
Нужно инициализировать проект. Для этого вводим команду:
platformio init --ide sublimetext --board diecimilaatmega328
Если вам необходимо создать проект сразу под несколько платформ (кроссплатформенный), то укажите несколько параметров. Например:
platformio init --ide sublimetext --board uno --board nodemcuv2
На запрос «Do you want to continue? [y/N]:» отвечаем y. Система загрузит необходимые файлы (это будет происходить только при первом использовании какой-либо платформы).

Видим, что в папке появились файлы. Рассмотрим их.
- .pioenvs — в эту папку будут помещаться все скомпилированные модули и исходники платформы. Также там будет находиться скомпилированный hex-файл. Это очень удобно. Arduino IDE, как вы знаете, помещала такие файлы во временную папку.
- lib — папка для библиотек. Если в разных устройствах у вас используются разные версии одной библиотеки, то теперь не будет путаницы. Просто скопируйте нужную версию в эту папку.
- src — в этой папке будут храниться исходники. Собственно сам скетч.
- .gitignore — этот файл нужен для того, чтобы git (если вы им пользуетесь) не учитывал изменения в папке «.pioenvs».
- .travis.yml — какой-то служебный файл для PlatformIO.
- platformio.ini — файл настроек проекта. Давайте заглянем в него:
# # Project Configuration File # # A detailed documentation with the EXAMPLES is located here: # http://docs.platformio.org/en/latest/projectconf.html # # A sign `#` at the beginning of the line indicates a comment # Comment lines are ignored. # Simple and base environment # [env:mybaseenv] # platform = %INSTALLED_PLATFORM_NAME_HERE% # framework = # board = # # Automatic targets - enable auto-uploading # targets = upload [env:diecimilaatmega328] platform = atmelavr framework = arduino board = diecimilaatmega328
В нём указаны платформа, фреймворк и плата. Если вы хотите скомпилировать скетч под другой МК, то это можно изменить здесь. Позже к этому ещё вернёмся.
- platformio.sublime-project — файл проекта для Sublime Text.
Теперь открываем Sublime Text и в меню выбираем Project — Open Project. Открываем файл c:\coding\test1\platformio.sublime-project .

В меню выбираем PlatformIO в качестве системы для билда: Tools — Build System — PlatformIO.
Включаем подробный вывод при компиляции: Deviot — Options — Full Verbose Output When Build.
Выбираем плату: Deviot — Select board — Arduino — Arduino Duemilanove…. (у вас может быть другая).
Выбираем окружение (по сути то же самое): Deviot — Select Environment — Arduino….
Отличие между этими двумя пунктами в том, что в «Select board» можно выбрать выбрать несколько плат, а потом просто переключаться между ними в «Select Environment».
В левой панели (структура папок) правой кнопкой щёлкаем по строке src и выбираем New file. Сразу сохраняем файл (Ctrl+S) под именем main.ino . Либо можно создать новый файл нажатием Ctrl+N, но не забывайте сохранить в папке src.

Теперь пробуем какой-нибудь скетч для проверки, например, стандартный Blink:
int led = 13; void setup() { pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); }
Для компиляции есть 3 способа:
- Tools — Build;
- Deviot — Build;
- Нажать «Галочку»:

И вот у нас на глазах проходит процесс компиляции. В конце видим сведения об объёме занимаемой Flash и RAM памяти:

Справа от «галочки» (кнопка компиляции) находятся кнопки загрузки в плату, монитора порта, отправки данных в последовательный порт и скрытия консоли.
Подведу краткий итог. Для создания нового проекта нужно:
- Создать новую папку для проекта;
- Выполнить команду инициализации: platformio init —ide sublimetext —board %название_платы%
- Открыть проект в SublimeText;
- Выбрать тип платы и окружение;
- Можно кодить.
Вот таким образом можно отказаться от неудобной Arduino IDE. Но как быть с тем, что иногда требовалось использовать не только разные библиотеки, но и разные версии Arduino IDE? Вот, к примеру, я сам больше использую версию 1.0.5. А с PlatformIO мы получаем только последнюю версию. Об этом я расскажу во второй части статьи.
