geektimes

Содержимое Intel IOT development kit

  • пятница, 14 ноября 2014 г. в 02:11:01
http://habrahabr.ru/company/intel/blog/236179/

В феврале я писал о сборке Yocto для Galileo gen1, которая несколько облегчает разработку для Galileo. С тех пор прошел почти год, и у Galileo появились последователи — Galileo gen2, Edison. Про Edison (уже два месяца в продаже) надо писать отдельно, этот же пост об Intel IOT Development Kit.

image

Из железок на моем рабочем столе (извините за беспорядок) он совместим с Galileo gen1, gen2 и Edison.
С декабря 2013 по октябрь 2014 я был архитектором этого продукта, и сейчас я опишу, как продвигался проект, что уже получилось, и что запланировано.

Зачем вообще мы все это начали? «Родная» (от создателей платформы) Yocto сборка для Galileo должна умещаться в 8 MB, и поэтому использует uClibc. Даже если загружаться с 8GB SD-card. Также она заточена, в основном, для программирования только посредством Arduino IDE. Однако Galileo — это не только Arduino Uno совместимая плата, но и компьютер, сравнимый с персоналкой пятнадцатилетней давности по производительности, но с поддержкой современной периферии. Поэтому очень логично максимально облегчить его программирование как Linux компьютера с PC и Arduino периферией.

Поэтому мы начали с создания Yocto 1.6 сборки, включающей средства разработки, библиотеки и драйвера популярной периферии. «Из коробки» можно писать на C/C++, Python, Node.JS, shell. Образ диска весит всего 200 MB, но есть еще многогигабайтный репозиторий для opkg, из которого можно проинсталлировать еще несколько тысяч нужных пакетов (Если у вас найдется достаточно большая SD-Card для /root файловой системы). По сравнению с февральской альфой, текущий билд грузится в 3 раза быстрее, несмотря на кучу новых сервисов в загрузке. А всего-то systemd вместо sysvinit.

Для того, чтобы сохранить совместимость с Arduino IDE, образ диска включает и uclibc, и eglibc. К сожалению, поэтому не получается из скетчей достучаться до всяких полезных библиотек, и приходится использовать IPC.

Если для периферии РС библиотек хватает, то для большинства простых и дешевых сенсоров/актуаторов есть только Arduino или mbed библиотеки. Их пришлось бы портировать, так как в драйверах продвинутых сенсоров хватает кода, специфичного для платформы. Поэтому мы решили изобрести велосипед, и опубликовали на Github два полностью открытых проекта с MIT лицензией — libmraa и UPM. libmraa написана на C, а UPM на С++ (нативном C++ aka С c классами). Они обе при сборке также генерируют библиотеки, который можно использовать при программировании на Python и Node.JS.

libmraa предоставляет интерфейс к Galileo/Edison пинам, которые можно использовать как GPIO, ADC, PWM, I2C, SPI, RS232. Это не драйвер, все происходит в usermode (прощай, риалтайм!). Как и скетчи Arduino, на Galileo gen1, gen2, Edison она работает поверх /sys/class/* устройств. То есть это был бы простой wrapper, если бы привязка этих устройств к Arduino пинам была однообразной и тривиальной. К сожалению, каждая из перечисленных платформ имеет свои особенности и ограничения в области ввода-вывода. Например, подробнее о Galileo gen2 можно почитать здесь. Скоро появится поддержка Minnow max и Baytrail NUC.

UPM работает поверх libmraa и реализует логику сенсоров/актуаторов. Таким образом, в коде сенсоров/актуаторов нет никакой логики, связанной с платформой, на которой они работают. (Сравните с Arduino, где глаза рябит от #ifdef UNO/DUO/TRE.) Пока UPM поддерживает всего штук сорок устройств, но наша команда с помощью сообщества, надеюсь, за год еще под пару сотен других напишет.

Помимо обычных средств программирования, в образе диска IOT devkit для Intel Galileo также содержится одно не совсем обычное. Румынский стартап Wyliodrin разработал среду программирования на основе Blockly, облегчающая графическое программирование сенсоров/актуаторов на Intel Galileo, Edison и Raspberry Pi. Ребята из Wyliodrin и их специальное предложение для владельцев Intel Galileo достойны отдельной статьи.

Также в сборку вошел node.js демон и API, упрощающий работу с Intel IoT analytics cloud. Вообще cloud backend для IoT — сейчас жутко модная тема, и многие известные вендоры уже анонсировали (Azure Intelligent Systems Service) или выпустили свой вариант. Я протестировал несколько, и данные с сенсоров, подсоединенных к Galileo или Edison легко посылаются в клауд для дальнейшей обработки. Конечно, Intel IOT Analytics сейчас использовать проще всего — он уже встроен в IOT devkit, есть примеры.

Выше я много раз упоминал наш образ диска для Galileo — часть IOT devkit. У некоторых читателей могло возникнуть два вопроса: какие еще части есть в devkit, и что насчет Edison?

Кроме образа диска, репозитория пакетов opkg, cloud сервисов IoT Analytics и Wyliodrin, мы включили две вещи, облегчающие разработку на хосте (все-таки разрабатывать большие вещи непосредственно на Galileo или даже на Edison может быть не совсем комфортно). IOT devkit поддерживает Intel XDK для разработки на Node.JS и специальный билд Eclipse под Linux, Windows и Mac OS, сконфигурированный как host для разработки на C/C++.

Кроме того, IOT devkit можно получить в осязаемой форме, поучаствовав в хакатоне (например, скоро один будет проведен в Москве), некоторых академических программах, или просто купить Galileo gen1 kit или gen2 kit.

По поводу второго вопроса все просто: команда, создавшая платформу Edison, не была ограничена необходимостью использования uClibc, и собрала неплохой образ диска для Edison на основе Yocto 1.6.1. Они включили в свою сборку libmraa и UPM и обеспечили совместимость со всеми плюшками, которые я перечислил выше — XDK, IOT devkit билд Eclipse, IoT analytics, Wyliodrin, и Arduino IDE, совместимое со всеми библиотеками на таргете.

Во время осеннего Intel Developer Forum мы открыли сайт devkit и форум. Но у Galileo и Edison уже есть свой сайт и форумы, поэтому получилась некоторая путаница. Часть информации есть только на этом сайте мейкеров, часть — только на нашем, а часть дублируется. Например, недавно про devkit написали в Dr Dobbs, но мне показалось, что автор статьи не смог до конца разобраться в этой путанице. Надеюсь, читатели этой статьи разберутся лучше, чем редактор старейшего журнала для программистов.

На сайте мы выложили для скачивания образ диска и Eclipse IDE и назвали все это IOT devkit 1.1 beta. Beta потому, что у нас в команде был только один part time QA инженер (но мы все сами кушали свою собачью еду, так что очевидные баги подмели). Через пару месяцев планируем от обидного слова «beta» избавиться, попутно исправив все баги, добавив поддержку новых интересных сенсоров, добавив в Eclipse IDE визард для создания новых проектов, и учтя тонны пожеланий участников хакатонов.

Темы для флейма в комментах, которые автор будет особенно рад поддержать:
1. Кому нужен ваш Yocto, надо было портировать Ubuntu/Debian/Gentoo/Slackware!
2. Зачем столько много опций/языков программирования/IDE, надо было оставить что-то одно, но сделать это хорошо.
3. Почему вы перешли на systemd, на embedded платформе все должно быть в легко редактируемых shell скриптах.
4. Почему нет прямо из коробки Java/Mono/Haskell/Brainf*&ck?
5. У меня не работает DHT22 сенсор X, которому нужно посылать микросекундные импульсы в точные временные отрезки — а Arduino это умеет.
6. Я сделал pull request в UPM, добавив поддержку моего любимого сенсора влажности почвы в цветочном горшке, но злой github user arfoll не делает коммит.
7. Ну и чем это лучше RasPi/BBB/etc/etc/etc?"
8. Carthago delenda estПочему даже в Quark не отказались от устаревшего набора x86 инструкций, даешь еще один RISC микроконтроллер!