Pull to refresh

Программирование Arduino в CLion

Reading time 4 min
Views 41K
В этой статье я расскажу о небольшом how to о разработке для Arduino в CLion www.jetbrains.com/clion.
CLion — новая IDE для C/C++ от JetBrains. По стилю и поведению очень похожа на IDEA (IDE для Java). А так как я пишу на Java под IDEA с использованием «фишек» это IDE, то хотелось бы все эти «фишки» и use case разработки перенести на разработку для Arduino.

Вообще я пробовал разные IDE для Arduino — Arduino IDE, Eclipse с плагином для Arduino, Eclipse с плагином для AVR, Atmel Studio, Visual Studio с плагином VisualMicro и ReSharper C++. Последнее время остановился на Eclipse с плагином для Arduino. Но всё же некоторых привычных возможностей из IDEA не хватало.

И вот наконец JetBrains сделали IDE для C\C++ — CLion. Но пока без Arduino плагина. Но с поддержкой CMake. Вот этим можно воспользоваться!

arduino-cmake


В задаче по поддержке Arduino youtrack.jetbrains.com/issue/CPP-364 упоминается сборка CMake для Arduino github.com/queezythegreat/arduino-cmake вот ей то и воспользуемся.

Для этого установим Arduino SDK в папку, указанную в arduino-cmake (в Win это Program Files(x86)\Arduino). Использовать нужно именно 1.0.x версию, т.к. версия 1.5.x не поддерживается. Я брал последнюю версию 1.0.6.

Потом скачаем github.com/queezythegreat/arduino-cmake, далее вся работа будет построена на основе него. Для Windows нужно в файле cmake/Platform/Arduino.cmake исправить в строчках 1177, 1178 названия переменных с TARGET_PATH на TARGET_NAME. Это нужно сделать потому что в Windows не корректно формируется путь к hex файлу прошивки для avrdude. Скорее всего из за Win-like пути с буквой диска. Как это экранировать я не нашёл, поэтому просто указал относительный путь. Тем более что перед вызовом команды avrdude происходит переход в каталог с hex файлом. Эти изменения нужны, чтобы происходил upload программы в Arduino. Если не сделать, то будет только компилироваться.

Далее просто в CLion открываем этот CMake проект, через File->Import project.


Немного ждём, пока CLion обработает CMake файлы. И всё, проект готов.

Что бы настроить этот проект для загрузки в Arduino нужно выбрать конкретную Arduino-плату и порт с Arduino для загрузки программы. В example проекте это настраивается в example/CMakeLists.txt. Вся информация по настройке с примерами есть в arduino-cmake/README.rst

Создание своей программы


Сначала я пробовал использовать «скетчи» из Arduino, но в CLion у них не работал autocomplite, хотя контекст (в CLion справа внизу) был указан корректно. Поэтому я использовал просто cpp файл, который по содержимому был всего на пару строк больше «скетча».
При настройке своего CMakeLists.txt я использовал пример из duinoworks.bakketti.com/?p=11

Сначала создадим папку serial в корневой папке приложение (на одном уровне в папкой example) и добавим туда два файла — serial.cpp с кодом программы и CMakeLists.txt с настройкой проекта.

Содержимое serial/CMakeLists.txt
# Set a variable for commands below
set(PROJECT_NAME serial)

# Define your project and language
project(${PROJECT_NAME} C CXX)

set(${PROJECT_NAME}_BOARD nano328)

# Define the source code
set(${PROJECT_NAME}_SRCS serial.cpp)

# Define the port for uploading code to the Arduino
set(${PROJECT_NAME}_PORT COM8)

# Command to generate code arduino firmware (.hex file)
generate_arduino_firmware(${PROJECT_NAME})


Обратите внимание, что в качестве платы я выбрал Arduino Nano с ATMEGA328 на порту COM8. Список всех поддерживаемых плат есть в C:\Program Files (x86)\Arduino\hardware\arduino\boards.txt (это название параметра до точки — uno, atmega328, diecimila и т.д.)

Содержимое serial/serial.cpp
#if ARDUINO >= 100
#include "Arduino.h"
#else
    #include "WProgram.h"
#endif

void setup() {
    Serial.begin(9600);
}

void loop() {
    Serial.println("Hello from CLion!");
    delay(5000);
}


И подключаем папку serial — в корневом CMakeLists.txt добавляем строчку
add_subdirectory(serial)


Далее в CLion в окне CMake выбираем Reload CMake project:


Далее можно писать код как обычно. Пример редактирование кода с поддержкой autocomplite:


В CLion должны создаться конфигурации serial, serial-size, serial-upload. Нас интересует конфигурация serial-upload — она собирает и загружает программу.

Выбираем её и нажимаем либо Run->Buid (Ctrl+F9) либо просто кнопки Run или Debug возле выпадающего списка с конфигурациями. В первом случае произойдёт сборка и загрузка в Arduino, во втором тоже самое, но ещё попробует запуститься elf файл, что не получится и будет ошибка, но на результат это не влияет.

Работа с Arduino Library


Для работы с Arduino Library нужно явно указать путь к папке libraries. Это можно сделать добавив
link_directories(${ARDUINO_SDK}/libraries)
в корневой CMakeLists.txt. Далее в программе просто подключает header как обычно, например
 #include "LiquidCrystal.h"


Пример


Пример программы есть у меня на GitHub:
github.com/TimReset/arduino-cmake

Заключение


Сейчас из CLion нельзя подключиться к COM порту для общения с Arduino — я для этого использовал возможности мониторинга COM порта из Arduino IDE или Eclipse. Хотя в arduino-cmake можно добавить задачу запуска программы мониторинга COM порта (в CMakeLists.txt указать set(${PROJECT_NAME}_SERIAL <Имя_имя_программы @SERIAL_PORT@)). Так же при загрузке программы через avrdude COM порт не должен ни кем использоваться (например, нельзя параллельно к нему подключиться через Arduino IDE), иначе загрузка не произойдёт, но при этом ни каких ошибок не будет. Так что при каждой загрузке нужно закрывать соединение.

Для себя пока решил использовать CLion в разработке — основные возможности по написанию C\C++ кода он поддерживает, а этого для меня вполне достаточно плюс привычная среда разработки. Хотя пока практически не работает с CMakeLists.txt — есть только подсветка синтаксиса, но не работает даже комментирование.
Tags:
Hubs:
+19
Comments 20
Comments Comments 20

Articles