Програмування 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 below for commands
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 — є тільки підсвічування синтаксису, але не працює навіть коментування.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.