Программирование Arduino Uno и STM32 с помощью PlatformIO


Как правило, больше начинающих работать с платформой Arduino работают с ней с помощью среды Arduino IDE, которая имеет простой интерфейс пользователя, бесплатна в использовании и имеет огромное устоявшееся сообщество. С помощью Arduino IDE можно писать код программы, компилировать его, а также загружать его во все известные платы Arduino. Arduino IDE основана на Java и может работать на популярных сегодня операционных системах: Windows, OS X и Linux. Но, будучи удобной для начинающих разработчиков, она не содержит некоторых функций, которые достаточно сильно востребованы среди опытных разработчиков. Вследствие этого для работы с платформой Arduino кроме Arduino IDE разработано достаточно много интегрированных сред разработки, одной из самой популярных среди них является PlatformIO. В этой статье мы рассмотрим установку этой платформы и программирование с ее помощью плат Arduino, а также плат STM32.

Внешний вид проекта для программирования Arduino Uno и STM32 с помощью PlatformIO

Также, если вас по каким то причинам не устраивает Arduino IDE, можете попробовать Arduino Web Editor – официальный онлайн-инструмент для работы с платами Arduino, обладающий рядом преимуществ по сравнению с Arduino IDE.

Что такое PlatformIO?

PlatformIO – это основанная на языке Python экосистема с открытым исходным кодом, удобная для разработки проектов интернета вещей (IoT – Internet of Things), кроссплатформенной разработки с единым (унифицированным) отладчиком, способным работать в таких операционных системах как Windows, Mac и Linux. Официальный сайт платформы - https://platform.io. Поддерживает практически все популярные сегодня микроконтроллеры и готовые платформы, такие как Arduino, ESP32, ESP8266. Содержит большое число различных примеров и библиотек. Для своей работы требует установленного на компьютер Python.

Почему стоит перейти с Arduino IDE на PlatformIO

В сети выделяют следующие недостатки Arduino IDE:

  • отсутствие кастомизации (темы, подсветка синтаксиса);
  • нет автодополнения кода (как в современных IDE);
  • не очень удобная организация проектов;
  • нет поддержки каких-либо плагинов;
  • неудобный менеджер библиотек;
  • не очень вразумительный builder, с которым достаточно трудно искать ошибки в программе;
  • другие мелкие баги, которые чаще всего встречаются при работе с Arduino IDE с операционной системе Windows.

Именно эти недостатки и вынуждают ряд пользователей переходить с Arduino IDE на PlatformIO или другие аналогичные платформы.

Преимущества PlatformIO

PlatformIO позволяет производить быструю разработку приложений и, подобно C/C++, поддерживает быстрое завершение кода и интеллектуальный код линтера, недоступные в Arduino IDE. В дополнение к этому PlatformIO предлагает полную поддержку тем с темными и светлыми цветами, умную навигацию по коду и форматирование кода. Ядро платформы включает мультиплатформенный builder, менеджер библиотек, монитор последовательного порта и многое другое.

Единый (унифицированный) отладчик поддерживает множество архитектур и платформ разработки. В отладчике есть такие функции как условные точки останова, выражения и точки наблюдения (Watchpoints), диспетчер памяти, “горячий” рестарт текущей сессии отладки. Ядро PlatformIO написано на Python 2.7 и работает на Windows, macOS, Linux, FreeBSD и даже на некоторых платформах с ARM-архитектурой: Raspberry Pi, BeagleBone, CubieBoard, Samsung ARTIK и т.п. Также в составе PlatformIO есть проводник файлов (File Explorer), который помогает в удобной организации хранения ваших проектов.

Установка PlatformIO для работы с Arduino Uno

Как уже указывалось, ядро PlatformIO написано на Python 2.7, поэтому PlatformIO не поддерживает Python 3. В связи с этим рекомендуется установить Python версии 2 и затем переходить к установке PlatformIO IDE. PlatformIO представляет собой интегрированную среду разработки (IDE) и содержит в себе еще дополнительные инструменты (плагины, расширения) для работы с другими популярными IDE.

Можно произвести установку PlatformIO с такими текстовыми редакторами как Atom и Visual Studio Code. Нужно выбрать один из них. Если вы хотите больше кастомизации, всяких крутых плагинов и экспериментов – выбирайте Atom, если же вам нужно просто красивую, удобную IDE с отличным автодополнением кода из коробки, выбирайте Visual Studio Code. В этой статье мы выбрали Visual Studio Code.

Перейдем к установке PlatformIO для последующей разработки в ней кода для Arduino Uno.

Вначале установите Visual Studio Code с ее официального сайта. Ее установка ничем не отличается от установки обычных программ для Windows, поэтому здесь процесс ее установки мы рассматривать не будем.

Когда Visual Studio Code будет установлена она будет выглядеть примерно следующим образом:

Внешний вид установленной Visual Studio Code

Следующим шагом мы будем устанавливать PlatformIO используя VS Code Extensions (расширения кода для Visual Studio). Для этого в левом сайдбаре выберите квадратную иконку (пятую по счету если считать сверху) как показано на следующем рисунке. После клика на этой иконке в основном окне появится окно поиска (search box), в котором вы можете найти расширения для большинства известных языков программирования: C/C++, C#, Python, PHP, Go, JavaScript, TypeScript, Node.js и т.д.

Запустите в этом окне поиск “PlatformIO”, в результате этого вы увидите иконку PlatformIO с именем и описанием. Просто кликните на ней и установите PlatformIO. При этом может потребоваться некоторое время для установки наборов инструментов и других дополнений.

Поиск PlatformIO для ее последующей установки

Когда процесс установки будет завершен, вы увидите интерфейс, показанный на следующем рисунке. Интерфейс включает все необходимые компоненты: New Project (новый проект), Import Arduino Project (импортировать Arduino проект), Open Project (открыть проект), Project Examples (примеры проектов) и т.д. После установки PlatformIO рекомендуется перезапустить Visual Studio Code Editor.

Вид установленной PlatformIO

После этого PlatformIO будет готова к использованию. В ней мы запустим простую программу мигания светодиодом и загрузим ее в плату Arduino Uno.

Главное окно PlatformIO

Программирование Arduino Uno с помощью PlatformIO

Мы рассмотрим программирование платы Arduino Uno с помощью PlatformIO на примере простой программы мигания светодиодом. Для этого выполните следующую последовательность шагов.

Выберите в PlatformIO вкладку “New Project” (новый проект) из меню быстрого доступа.

Выбор нового проекта PlatformIO

Дайте имя проекту (в нашем случае мы назвали его ‘Blink’). Выберите тип платы, с которой будете работать – в нашем случае это Arduino Uno. Поскольку мы собираемся работать во фреймворке Arduino, то в поле фреймворк (framework) необходимо выбрать Arduino. После заполнения всех полей нажмите Finish.

Выбор настроек проекта в PlatformIO

Подождите некоторое время пока ваш новый проект создастся и “подтянет” к себе необходимые ресурсы и расширения.

Создание нового проекта требует некоторого времени

Когда проект успешно создастся вы увидите всплывающее сообщение “Project has been successfully initialized” как показано на следующем рисунке.

Проект успешно создан

Чтобы открыть созданный проект пролистайте вниз Home Menu (главное меню) PlatformIO и вы увидите список всех созданных проектов. В правой стороне напротив интересующего вас проекта нажмите ссылку ‘Open’ чтобы перейти к редактированию проекта.

Переход к редактированию проекта в PlatformIO

Когда проект будет открыт первоначально он будет отображаться как скрытый, но не беспокойтесь, PlatformIO имеет весьма продвинутые опции для работы с файлами, поэтому вы без труда найдете все файлы проекта. Просто идите в левый верхний угол и нажмите там ‘Untitled (Workplace)’. Когда вы нажмете эту ссылку, все файлы проекта появятся в выпадающем меню. Чтобы открыть окно редактирования кода, выберите в выпавшем списке ‘src’ и затем ‘main.cpp’. Окно редактора кода появится в главном экране (Home Screen) с открытием новой вкладки (Tab). После этого вы сможете писать/редактировать код вашей программы.

Открытие редактора кода в PlatformIO

Напишите код программы для простого мигания светодиодом в плате Arduino Uno. Следует отметить, что PlatformIO по умолчанию не имеет прямого доступа к библиотекам Arduino, поэтому для написания даже самой простой программы (не требующей никаких библиотек) всегда добавляйте строку “#include <Arduino.h>” в самом начале программы.

Написание кода программы для мигания светодиодом

Следующим шагом будет компиляция и загрузка кода программы в плату Arduino Uno. PlatformIO изначально выбирает тот COM порт, который стоит в системе по умолчанию. Но если это не тот COM порт, который вам нужен, то его можно изменить – это будет объяснено далее в статье. PlatformIO имеет такие функции для работы с кодом программы как Build, Upload, Upload to Remote Device (загрузка в удаленное устройство), Clean, Test, Run Task, Serial Monitor, New Terminal. Все эти функции доступны в левом нижнем углу редактора как показано на следующем рисунке. Когда вы будете наводить мышкой на иконки этих функций, то будет показываться их описание.

Функции для работы с кодом программы в PlatformIO

Чтобы скомпилировать скетч нажмите на ‘Build’, а чтобы загрузить его в плату Arduino – нажмите на ‘Upload’. Когда загрузка кода в плату будет закончена вы сможете увидеть время, которое потребовалось для загрузки кода, и другие параметры загрузки. Также появится сообщение “Success” (успех). Когда загрузка кода программы в плату будет закончена вы сможете увидеть результат работы программы.

Успешное завершение загрузки кода программы

Тестирование работы проекта

Чтобы выбрать или изменить COM порт, перейдите на главный экран (Home Screen) PlatformIO, выберите там пункт меню Devices (устройства) как показано на следующем рисунке. После этого вы увидите все доступные (подключенные) устройства. Выберите нужный вам COM порт.

Изменение COM порта в PlatformIO

Программирование STM32 с помощью PlatformIO

Для поклонников микроконтроллеров, построенных на основе платформы STM32, мы в данной статье рассмотрим их программирование с помощью PlatformIO. Процесс программирования STM32 будет практически таким же, как и рассмотренная процедура программирования Arduino UNO с помощью PlatformIO. Различие будет состоять в том, что необходимо будет выбрать соответствующую плату STM32 когда будете создавать новый проект для STM32. Достоинством PlatformIO в данном случае является то, что при работе в ней нет необходимости отдельно скачивать какие либо внешние пакеты для работы с любой платой, PlatformIO скачивает все необходимые пакеты автоматически, поэтому нам необходимо просто выбрать плату и затем можно переходить к редактору. Мы будем использовать внешний JLink/ JTAG/ STLink/ Serial Programmer чтобы загружать скетч в STM32. Также следует отметить, что STM32 можно программировать и с помощью Arduino IDE.

Чтобы произвести программирование STM32 с помощью PlatformIO выполните следующую последовательность шагов.

Дайте имя новому проекту – мы его назвали ‘Blink STM32’. Затем выберите необходимую плату STM32 – в нашем случае это ‘BluePill F103C8(Generic)’. Выберите фреймворк для Arduino. После заполнения всех полей нажмите на Finish и подождите некоторое время пока проект создастся и загрузит все необходимые пакеты для работы с STM32.

Выбор настроек проекта в PlatformIO для программирования STM32

Повторное создание проекта для работы с STM32 произойдет гораздо быстрее потому что все необходимые пакеты будут уже загружены при создании первого проекта. Теперь перейдите в пункт меню Untitled(Workspace) -> src -> main.cpp как мы это уже рассматривали ранее в статье при работе с платой Arduino.

Следующим шагом идет выбор программатора – он весьма важный. Для программирования плат STM32 могут быть использованы такие программаторы как JTAG, STLink, JLink, Serial и т.п. Все они рабочие, но вам необходимо соответствующим образом сконфигурировать страницу конфигурации ‘platformio.ini’

В этом проекте мы используем программатор Serial Programmer CP210x USB to UART Bridge. Подсоедините этот последовательный программатор к плате STM32 (как показано в следующей таблице) и к вашему компьютеру.

USB to Serial Programmer STM32 Board
5V 5V
Gnd Gnd
Rx A9
Tx A10

После этого перейдите в менеджер проектов (project explorer), откройте в нем страницу ‘platformio.ini’ и внесите в нее изменения как показано на следующем рисунке. Протокол загрузки кода (upload_protocol) определяет какой программатор следует использовать ((STLink, JLink, Serial и т.д.). В качестве параметра upload_port следует указать используемый вами COM порт. Вы можете изменить/выбрать используемый COM порт в пункте меню ‘Devices’ на главной странице PlatformIO.

Внесение изменений в настройки проекта

После этого перейдите в ‘main.cpp’ и напишите/измените программу мигания светодиодом. Далее загрузите код программы в плату. В случае успешной загрузки кода будут показаны параметры его загрузки. После загрузки кода вы сможете наблюдать мигание светодиода, подключенного к контакту PC13 платы STM32.

Написание кода программы мигания светодиодом для STM32

Исходный код программы (скетча)

Простая программа для мигания светодиодом. Надеюсь, она не вызовет у вас затруднений.

Видео, демонстрирующее работу проекта

Также можете посмотреть еще два обучающих видео (на русском языке) про то, как перейти с Arduino IDE на PlatformIO.

(Проголосуй первым!)
Загрузка...
10 037 просмотров

Комментарии

Программирование Arduino Uno и STM32 с помощью PlatformIO — 8 комментариев

  1. Хотел бы попробовать ддя стм32, но не понял, можно конфигурировать контроллер под свои платы? Использовать ремап и прочие плюшки от стм.

    • Статья, в основном, для Arduino, поэтому точно, к сожалению по вашему вопросу не подскажу. Возможность использовать PlatformIO для STM32 есть и это описано в статье, но чтобы рассмотреть такие тонкости, какие вы просите, нужна статья значительно большего размера. Поэтому я бы рекомендовал вам установить PlatformIO (это же никак не навредит ни вашему компьютеру, ни вашему STM32) и самостоятельно посмотреть все эти тонкие моменты, про которые вы спрашиваете

  2. Интересная платформа, мне VSCode и теперь там можно бесплатно мк прошивать, это очевидный плюс, но фреймворк Arduino для моей платы STM32F3Discovery не заработал, так что скорей всего кто хочет писать для stm в ардуино ide здесь разочаруются.

    P.S.
    CMSIS отработал как надо

    • К сожалению, у каждой платформы есть свои недостатки. Но несмотря на недостатки, PlatformIO все равно достаточно популярна сейчас, этого не отнять

  3. platformio...
    Уже множество раз я пробовал перейти на platformio
    Но постоянно возвращался в ArdinoIDE, точнее пишу код в VScode а заливаю и отлаживаю в ArdinoIDE.
    Потому что в ArdinoIDE это быстрее. От идеи до готового устройства меньше времени.
    Вот тут чел объяснил подробнее и в целом я с ним согласен: alexgyver.ru/bad-platformio/

    • Ну идеального инструмента в нашем мире не существует, кому то нравится одно, кому то другое. Я не призываю всех переходить с Arduino IDE на platformio, большинству, на мой взгляд, действительно лучше подойдет Arduino IDE. Но всегда найдутся те, для кого platformio будет лучше чем Arduino IDE - и эта статья для них.

    • По вашей ссылке уже ничего нет, зато появилась такая статья alexgyver.ru/platformio-замена-arduino-ide/

      • Почему по моей ссылке ничего нет? Моя статья более подробная чем та, которую вы привели

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

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