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 и в меню выбираем ProjectOpen 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 мы получаем только последнюю версию. Об этом я расскажу во второй части статьи.

Ссылка на документацию по PlatformIO на официальном сайте:
http://docs.platformio.org/en/stable/