PlatformIO: Программируем Arduino в Sublime Text (часть 1)

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

pl6

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

pl1

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

Далее в этой статье я буду использовать именно эти пути. Если у вас другие — не забудьте исправить.

pl2

4. Устанавливаем PlatformIO. Для этого открываем командную строку и выполняем команду:

pip install -U platformio
pl3

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

pl4

Ну вот и всё. Теперь у нас установлено всё необходимое. Arduino IDE больше не нужна. За одним исключением, о котором чуть позже.

Теперь о том, как это всё работает.

Создаём папку для проекта. Я создал C:\coding\test1 . Открываем командную строку. В Windows 10 проще нажать кнопку «Файл» в проводнике, а потом выбрать «Открыть командную строку».

pl7
В других версиях Windows после этого необходимо будет ещё перейти в папку проекта с помощью команды cd:

cd C:\coding\test1

Для начала посмотрим, какие платы поддерживаются. Для этого есть команда «platformio boards {название}». В качестве названия можно вводить модель чипа, платформу, название платы. Я хочу запрограммировать чип ATmega328 от Arduino Diecimilla. Ввожу:

platformio boards atmega328
pl8

Получаем список всех плат с 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. Система загрузит необходимые файлы (это будет происходить только при первом использовании какой-либо платформы).

pl9
Видим, что в папке появились файлы. Рассмотрим их.
pl10

  • .pioenvs — в эту папку будут помещаться все скомпилированные модули и исходники платформы. Также там будет находиться скомпилированный hex-файл. Это очень удобно. Arduino IDE, как вы знаете, помещала такие файлы во временную папку.
  • lib — папка для библиотек. Если в разных устройствах у вас используются разные версии одной библиотеки, то теперь не будет путаницы. Просто скопируйте нужную версию в эту папку.
  • src — в этой папке будут храниться исходники. Собственно сам скетч.
  • .gitignore — этот файл нужен для того, чтобы git (если вы им пользуетесь) не учитывал изменения в папке «.pioenvs».
  • .travis.yml — какой-то служебный файл для PlatformIO.
  • platformio.ini — файл настроек проекта. Давайте заглянем в него:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    #
    # 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 .

pl11

В меню выбираем 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.

pl12
Теперь пробуем какой-нибудь скетч для проверки, например, стандартный Blink:

1
2
3
4
5
6
7
8
9
10
11
12
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;
  • Нажать «Галочку»:
    pl14

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

pl13

Справа от «галочки» (кнопка компиляции) находятся кнопки загрузки в плату, монитора порта, отправки данных в последовательный порт и скрытия консоли.

Подведу краткий итог. Для создания нового проекта нужно:

  • Создать новую папку для проекта;
  • Выполнить команду инициализации: platformio init —ide sublimetext —board %название_платы%
  • Открыть проект в SublimeText;
  • Выбрать тип платы и окружение;
  • Можно кодить.

Вот таким образом можно отказаться от неудобной Arduino IDE. Но как быть с тем, что иногда требовалось использовать не только разные библиотеки, но и разные версии Arduino IDE? Вот, к примеру, я сам больше использую версию 1.0.5. А с PlatformIO мы получаем только последнюю версию. Об этом я расскажу во второй части статьи.

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

Похожие записи:

2 Комментарии “PlatformIO: Программируем Arduino в Sublime Text (часть 1)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *