Практикум «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 может нагреваться и трогать его не рекомендуется.
Странно, что в комплекте нет microUSB-кабеля, который требуется для работы с платой, ну да ладно — такого добра в хозяйстве любого гика достаточно.Внешний вид Размер платы 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-устройства» — реализовывать гораздо более функционально-продвинутые вещи.
В следующих частях «практикума» я постараюсь осветить и эти возможности. Продолжение следует…