Практикум «Intel IoT». Galileo Gen2 - Програмування

Настав час зібрати і запустити на Galileo свій «Hello, world!» (і не тільки), вивчивши в процесі, як зробити це найбільш технічним чином.

image

Хардкор
Для створення програм для Intel Galileo можна взагалі не користуватися якимись середовищами розробки. В образі Yocto, який ми підготували і встановили попередній частині «практикуму» — є все необхідне:

  • Редактор
  • Бібліотеки
  • Компілятор
Тому приступимо:

1. Підключаємося до нашої цільової системи через SSH (при цьому за замовчуванням поточна папка — /home/root/)

2. Запускаємо текстовий редактор з створюваним файлом:

nano blink.cpp

3. Вводимо наступний код:

#include "mraa.h"

int main() {
mraa_gpio_context gpio; 
gpio = mraa_gpio_init(13);
mraa_gpio_dir(gpio, MRAA_GPIO_OUT); 
bool ledState=true;
while(true){
mraa_gpio_write(gpio, ledState?1:0); 
ledState=!ledState;
sleep(1);
}
}

Виходимо (Ctrl+X) і підтверджуємо збереження.

4. Компілюємо:

g++ blink.cpp -lmraa-o blink

Якщо все добре, то ніяких повідомлень про помилки не буде.

5. Запустимо додаток:

./blink

Після цього вбудований світлодіод на платі очікувано заморгає.

Наведений вище код вимагає пояснень: для такого простого маніпулювання пінами використовується бібліотека libmraa.

Бібліотека libmraa
Як вже писалося раніше, це «велосипед», який винайшли у Intel для того, щоб забезпечити максимально простий доступ до пінів, присутніх на налагоджувальних платформах Galileo (і Edison). Бібліотека є «обгорткою» для конфігурації і управління цими пінами.
Оскільки бібліотека з відкритим кодом — можна просто подивитися, як же можна працювати з відповідними портами безпосередньо, без абстракцій, що надаються libmraa.
Це максимально спрощує «вхід» в розробку для «колишніх ардуинщиков» або новачків. Бібліотека libmraa дозволяє сконфігурувати піни як GPIO, ADC, PWM, I2C, SPI і RS232. Дуже допомагає те, що бібліотека добре документована.

Це добре (для платформи Intel), але платформа Arduino ще дуже приваблива для простих користувачів (особливо початківців) тим, що існує величезна кількість різних бібліотек, які реалізують максимально просте взаємодію з різними датчиками/дисплеями/«виконавцями» і т. п. Intel вирішили запропонувати своє рішення і в даному питанні:

Бібліотека UPM
UPM працює поверх libmraa і нічого не знає про «железячной» складової платформи. Ця бібліотека реалізує логіку роботи з підключеними пристроями. На жаль, список сумісних пристроїв, із якими можна працювати через UPM поки досить скромний, але, впевнений, що це тимчасове явище.

Бібліотека UPM теж з відкритим кодом — при бажанні можна розібратися і дописати підтримку відсутнього пристрою.

Але повернемося безпосередньо до процесу програмування. Писати код в консольному редакторі — задоволення не найбільше і підходить тільки для «справжніх джедаїв», більшість розробників вважають за краще використовувати зручні інструменти розробки з підсвічуванням коду, автодополнением та іншими плюшками, і один з таких інструментів — Eclipse. Хлопці з Intel подбали і підготували цю середу для роботи з налагоджувальні платами Galileo (і Edison).

Установка і перший запуск
Установка максимально спрощена для всіх платформ — достатньо завантажити відповідний файл з архівом преднастроенной середовища розробки (включає в себе безпосередньо Eclipse, бібліотеки і приклади) і розпакувати його в будь-яке зручне місце на диску.

Зовнішній вигляд середовища розробки при першому запуску

Оскільки ми плануємо вести розробку для Intel Galileo Gen2 — необхідно середовищі вказати на це. Для цього потрібно перейти на вкладку Remote System Explorer (в правому верхньому куті інтерфейсу Eclipse). Оскільки в Intel вже майже все підготували, в розпочатому дереві віддалених систем вже є сайт «galileo» — залишається тільки вказати IP-адреса цільової системи (як дізнатися IP-адресу Intel Galileo Gen2 описував попередній частині «практикуму»). Після цього можна підключитися до сайту контекстне меню на сайті «galileo» -> «Connect»). Якщо все зроблено правильно, буде запит пароля:

Після успішного з'єднання з Intel Galileo Gen2 у кожного елемента вузла «galileo» з'являться зелені «плюсики», показують, що все гаразд і можна працювати.

Далі звично робимо Build. Оскільки все вже налаштовано — проект з прикладу «збереться» без помилок (дивимося повідомлення в консолі знизу і там же — поглядаємо в розділ «Problems»). Готово, запускаємо проект (Run) — у нижній частині бачимо дані з налагоджувальною плати (як якщо б додаток запускали безпосередньо через консоль SSH):

Готове. Тепер можна поекспериментувати з уже підготовленими прикладами.

Оновлення libmraa і upm
При вивченні прикладів, з'ясувалося, що версії бібліотек, що входять в комплект Intel IoT Developer Kit (iotdk) дещо застаріли і потребують оновлення. Оновиться:

На Intel Galileo Gen2
Оновлення робиться наступним чином:

echo "src maa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/intel-iotdk.conf
opkg update
opkg upgrade

Можу порекомендувати робити це регулярно, оскільки проект розвивається.

На настільному ПК
Викачуємо свіжі версії бібліотек (з максимальними номерами) mraa і upm і просто разархивируем їх в ту папку, де у вас встановлена IDE. Природно, потрібно завантажувати версію під свою платформу. Тепер у нас актуальні версії бібліотек і середовище розробки готова «у бій»!

Преднастроенный Eclipse з прикладами просто чудовий, але нічого не сказано про те, як створити новий проект таким чином, щоб він працював так само, як і приклади. Виправляю цю ситуацію.

Створення нового проекту
Тут я трохи лукавлю: я скористаюся одним з проектів, який підготували хлопці в Intel, оскільки створення проекту з нуля, що вся його налаштування для складання та підготовка всіх змінних оточень — дуже клопітка заняття.
Природно, можна створити і проект заново, попередньо «срисовав» параметри «зразкового» проекту, але це більш складний шлях (хоча, можливо, і більш правильний). Я ж піду по простому і быстровоспроизводимому шляху з гарантованим результатом і мінімальними можливостями для помилки.
За основу я візьму проект 3_c_onboard_LED_blink.

Перше, що необхідно зробити для успішного копіювання проекту — треба закрити всі інші проекти. Для цього правою клавішею миші клацаємо на потрібному проекті і в випадаючому меню вибираємо «Close Unrelated Projects» (при цьому папки у дереві проектів — «закриються»). Після цього можна вихідний проект піддати процедурі Copy/Paste (можна через контекстне меню проекту) — з'явиться діалогове вікно для введення назви нового проекту:

Свій проект я назвав myTest. Початковий проект можна закрити (щоб не займав місце в дереві проектів). Якщо розгорнути дерево нового проекту, то видно, що там залишилися всі вихідні коди і бінарники. Їх можна видалити в будь-який час — вони більше не потрібні, а от вміст папки includes рекомендую залишити — воно є частиною «магії», яка дозволить зібратися нашого проекту і заробити на Intel Galileo Gen2. Потім в цю папку можна додати інші, відсутні для проекту бібліотеки.

Видалив в проекті все зайве, і в папці src (не плутайте з папкою Debug/src) створив новий файл-оригінал (правою кнопкою миші на папці src і в випадаючому меню «New» -> «Source File»:

У новому файлі напишемо що-небудь просте (можна взяти, наприклад, код blink, який я навів на початку цього посту). «Билдим» проект: якщо все гаразд — проект скомпилировался, в розділі «Problems» — порожньо.

Залишився всього один крок до запуску готового додатку. Потрібно пояснити Eclipse, що треба запустити додаток віддалено (а не локально). Для цього натискаємо правою клавішею миші на отриманому бінарники (у дереві проекту) і в контекстному меню вибираємо: «Run As» -> «Run Configurations...». Діалогове вікно виглядає приблизно так:

Особливу увагу зверніть на розділи, позначені стрілочками. У верхньому необхідно вибрати наше цільове з'єднання (galileo). Два поля заповнити приблизно так, як у мене на скріншоті. У першому полі вказується повний шлях до програми на цільовому пристрої, у другому полі — команда, яка повинна бути виконана перед запуском нашого додатка (в моєму випадку скомпільованого файлу даються права на запуск). Далі просто — Apply і Run. Якщо все зроблено правильно, світлодіод на платі почне блимати. Після цього вже можна користуватися кнопкою Run на панелі інструментів Eclipse.

Безумовно, програмування в Eclipse набагато зручніше, ніж в консолі (або Arduino IDE), що робить платформу Intel дуже привабливою для розробників. Але не Eclipse-ом єдиним користується розробник, є ще і Intel® XDK.

ІМХО
Таким чином, Intel надає максимальні можливості: відмінна налагоджувальна плата Intel Galileo Gen2, бібліотеки, інструменти розробки і підтримку.

Але ж і навіть це ще не все! В наступній частині «практикуму»:

<b class=«spoiler_title>Увага, спойлер!

Пишіть в коментарях, що вам в першу чергу цікаво дізнатися про вміст спойлера. Адже ви заглянули? :)

p.s. В обговоренні першої частини «практикуму» були питання з приводу того, що незважаючи на швидкий процесор Intel Galileo Gen2 не надто видатні показники при зміні стану піна. Поки готував цей матеріал натрапив на цю сторінку, де написано, що можна забезпечити частоту перемикання аж до 2.9 МГц (у порівнянні з «базовими» 385кГц), правда такі частоти доступні не для всіх пінів — це пов'язано з апаратною реалізацією.

» Перша частина «практикуму»: Galileo Gen2 — Перше знайомство.
» Друга частина «практикуму»: Galileo Gen2 — Linux & Arduino.

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

0 коментарів

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