Практикум «Intel IoT». Galileo Gen2 - Перше знайомство

Компанія Intel випускає кілька пристроїв для розробників: Galileo, Galileo Gen2 і Edison — продукти, сумісні з платформою Arduino, основне призначення яких — створення рішень в сфері інтернету речей (IoT).

Сьогодні я хочу вас познайомити з Intel Galileo Gen2:



Комплектація
Intel Galileo Gen2 позиціонується як налагоджувальна плата для вивчення ключових можливостей і особливостей Intel-платформи і не призначена для вбудовування в кінцеві пристрої. Для застосування в готових пристроях призначений Intel Edison (декларується проста міграція Gilileo -> Edison).

Galileo Gen2 поставляється в красивій (не тільки зовні, але і всередині) упаковці, однак, перелік вмісту досить скромний:



Власне, всередині тільки сама плата Intel Galileo Gen2, джерело живлення (12В 1.5 А, в комплекті 5 різних адаптерів під різноманітні розетки) і один листочок з важливою інформацією про безпечність (видрукуваний ультрамелким шрифтом, записи на всіх можливих мовах, окрім російської).
до Речі, в цьому папірці написано, що під час роботи Intel Quark SoC може нагріватися і чіпати його не рекомендується.
Дивно, що в комплекті немає usb-кабелю, який вимагається для роботи з платою, ну да ладно — такого добра в господарстві будь-якого гіка достатньо.

Зовнішній вигляд
Розмір плати Intel Galileo Gen2 становить 124х72 мм (роз'єми трохи виступають за межі плати):


На фото для порівняння: Intel Galileo Gen 2, «малина» і компактна версія клону Arduino Mega.

Основні роз'єми на платі (починаючи з лівого нижнього кута і далі за годинниковою стрілкою):

  • Слот для microSD-карти
  • Роз'єм живлення (від 7 до 15В)
  • Ethernet-порт (10/100)
  • UART (6-піновий роз'єм)
  • USBclient
  • USBhost
  • Роз'єм DEDIPROG (білий, може знадобитися, наприклад, для відновлення після «окирпичивания»)
  • ICSP (6-піновий роз'єм)


У правій частині плати також видно характерні «гребінки» для Arduino-шилдов (повністю відповідають Arduino Uno R3). Всі піни дбайливо підписані в кращих традиціях Arduino-плат.

Трохи нижче UART-роз'єму знаходиться єдиний джампер (IOREF) на два положення (5В і 3.3) — він дозволяє вибрати планку логічних рівнів, з яким будуть працювати підключені шилды. Неправильний вибір напруги може пошкодити як шілд, так і порти введення/виводу Intel Galileo.

Ліворуч і трохи нижче SoC знаходиться двухпиновый роз'єм для підключення резервної батареї (3В) для RTC (підписаний «COIN»). RTC інтегрований в процесор.

На верхній стороні плати також знаходяться дві кнопки: RESET (перезавантаження ардуїнов-складової) і REBOOT (перезавантаження всієї системи).

Для індикації активності на Intel Galileo Gen2 знаходяться 5 світлодіодів (всі розташовані поруч з роз'ємом USBhost):

  • OC (червоний) — для індикації перевантаження з харчування
  • USB (зелений) — готовність до підключення через USB
  • L (зелений) — інтерфейс світлодіод (підключений до D13)
  • ON (зелений) — харчування
  • SD (зелений) — індикація доступу до SD карті
Подивимося на плату з нижньої сторони:



Перше, що кинулося в очі — залишки флюсу майже на всій нижній поверхні плати. Дивно бачити подібне у іменитого виробника (та ще й з такою привабливою упаковкою). Ну да ладно, «на швидкість не впливає».

Зате на нижній стороні плати розміщено повноцінний mini-PCI Express слот для можливих розширень (модулі WiFi, модеми тощо). Поруч з ним знаходиться 10-піновий роз'єм JTAG для налагодження. Там же передбачається підключати і опціональний модуль PoE (відповідні контакти підписані «POWER OVER ETHERNET»).

Ключові особливості плати наводити не буду, оскільки це вже багато разів робили. Кому цікаво, можна ознайомитися, наприклад, з інформацією на самому сайті компанії.

let's go!
Плата подібного класу для мене — велика новинка. До цього я досить щільно працював спочатку з різними ардуїнов-платами, а потім і просто з пристроями на базі МК atmega.

Intel Galileo позиціонується (принаймні, як це декларується в маркетингових матеріалах Intel) як плата з великими можливостями linux-систем і простим прототипированием Arduino, а так само з можливістю організації взаємодії цих двох «підсистем». Подивимося, як йдуть справи насправді.

Вивчення я почну з тієї частини, яка для мене є добре знайомою: Arduino. Всі дії буду описувати під Mac.

Плата в заводському стані (без якої-небудь підготовки) вже придатна для роботи в середовищі Arduino (8Mb вбудованого флеш-сховища знаходиться полегшена версія linux, яка забезпечує цей функціонал).

Але «вистачить відкладати — пора висиджувати»: жахнем з головного калібру по горобцях (поморгаем світлодіодом). Перше, що потрібно — завантажити і встановити спеціальну версію Arduino IDE (доступна Galileo Software Downloads для своєї ОС.

Тепер, нарешті, можна підключити саму плату. Тут є невеликий нюанс — після підключення живлення необхідно трохи почекати кілька секунд, поки система завантажиться. При цьому на платі послідовно загоряться два зелених світлодіода (по різні сторони від USBhost-роз'єму) — тільки після цього можна підключати microUSB-кабель.

Arduino IDE необхідно вибрати свою плату (в цьому середовищі доступні варіанти Intel Galileo, Intel Galileo Gen2 і Intel Edison) і з'явився після підключення плати порт. Для Mac-адресу порту має вигляд: /dev/cu.usbmodemXXXXX, де XXXXX виглядає як fd121.

У перший раз рекомендується зробити перевірку версії прошивки і оновлення, якщо воно потрібне, звичайно. Моя плата таке оновлення отримала:


Оновлення прошивки займає близько 5 хвилин.

Тепер плата повністю готова до роботи. В якості першого експерименту завантажуємо «Hello World!» для МК — приклад Blink. Звично натискаємо кнопку «завантажити» і через кілька миттєвостей на платі починає завзято моргати зелений світлодіод в USB-роз'єму.

Готово! Перший скетч вже працює. Після перезавантаження системи — почне працювати заново. Таким чином, можна відразу використовувати Arduino-можливості плати. Arduino IDE знаходяться всі основні приклади і включені базові бібліотеки (зі своїми прикладами), що дозволяють швидко ознайомитися з можливостями плати і її програмування. Власне, нічого незвичайного в цьому поки не виявлено — все працює, як очікувалося (нехай і «поморгати светиком» це занадто просто і банально).

Цікаво, що через ардуїнов-складову можна працювати з Ethernet-портом (через штатну адаптовану однойменну бібліотеку) і SD-картою. При цьому не використовуються ніякі піни для підключення шилдов.

Intel заявляє, що забезпечується сумісність практично з будь-яким ардуїнов-шилдом.

Всі шилды я, звичайно, перевіряти не буду (тим більше, що є ось такий документ — під руку попався EM Shield. Цей модуль містить популярний рк-дисплей (аналогічний Nokia 5510), дві кнопки (підключені до одного аналоговому піну), три роз'єми для підключення струмових датчиків (теж заведені на аналогові піни) і інтерфейс для підключення популярного трансивера nRF24l01+ (на ардуїнов використовується апаратний SPI). Мета експрес-перевірки — спробувати запустити якісь приклади з готових бібліотек, які не входять до складу «підготовленою» IDE.

Для наочності почав з дисплея. бібліотека LCD5110_Graph (очікувано) не «завелася»… Основні помилки при компіляції: робота з регістрами прямо. А ось якщо переписати відповідні шматки коду на digitalWrite() і т. п. — дисплей «оживає». Власне, КДПВ зроблена саме при цих експериментах.

Аналогічні проблеми (не компілюється, не працює) з'явилися при роботі з таймерами. Виявилися проблеми при роботі з перериваннями — вони (переривання) обробляються, але тільки «за зміну» (нагадаю, у звичайній Arduino можна налаштовувати переривання «з фронту», «по спаду» і «при зміні»).

Певно, є якісь ще особливості — проявляться в подальшому вивченні. Поки писав цей пост, знайшов ось такий документ — у ньому описані відповідні обмеження. Краще їх попередньо вивчити, щоб не ходити по вже відомим «граблях». Особливо слід звернути увагу на суттєво менші струми з кожного піна: 16мая@5В або 8мА@3.3В (на звичайній Arduino — 50мА@5В). Тобто в разі чого можна запросто випалити пін — будьте уважні.

Також було дуже цікаво, наскільки швидше Intel Galileo виконує стандартні функції — наприклад, digitalWrite(). Для цього я взяв скетч blink, прибрав затримки з циклу loop() і залив один скетч в ардуїнов (atmega328p), і аналогічний у Galileo. Підключив осцилограф і побачив наступне:


Перший канал (блакитний) — Arduino, другий (жовтий) — Intel Galileo.

Виходить, що плата від Intel працює приблизно в чотири рази швидше (385кГц, проти 116кГц у Arduino).

Незважаючи на попередження, я все-таки помацав SoC під час проведення останнього експерименту… і практично обпік палець.

Гаряче серце системи — Intel® Quark™ SoC X1000 і дві мікросхеми пам'яті (DDR3, 256Mb).

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

На Intel Galileo можна запустити цілком функціональну версію linux — Yocto, при цьому можна використати як звичайний linux-комп'ютер. А організувавши взаємодію «linux-комп'ютер» і «arduino-пристрої» — реалізовувати набагато більш функціонально-просунуті речі.

У наступних частинах «практикуму» я постараюся висвітлити і ці можливості. Продовження слідує…

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

0 коментарів

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