Программирование Arduino в CLion
В этой статье я расскажу о небольшом 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 не хватало.И вот наконец JetBrainse сделали 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 — есть только подсветка синтаксиса, но не работает даже комментирование.