Часть 1. Управляемые микроплаты
Какие ассоциации возникают у вас, когда вы слышите словосочетание «электронный конструктор»? Люди разных поколений, скорее всего, ответят на этот вопрос по-разному. Рожденные в конце 70-х и начале 80-х годов прошлого века и раньше наверняка вспомнят самодельные радиоприемники, приложение к журналу «Юный Техник», а также целую серию радио- и электронных конструкторов «Старт», с помощью которых можно было собрать вполне работающую электронику. Увлеченные радиотехникой, но более молодые читатели наверняка вспомнят прочие наборы, как для самостоятельной сборки, так и готовых узлов и даже готовых устройств. На ассортимент оказало влияние развитие такой отрасли, как микроконтроллеры — микросхемы, которые могут быть «запрограммированы» на выполнение того или иного действия. На стыке тысячелетий повальным стало увлечение по написанию программ на программируемых кулькуляторах и первых домашних ПК типа Агат или серия БK0010. Те, у кого были возможности и средства, привозили и первые Commodore 64 и Atari. Правда, писать для них можно было только на примитивных разновидностях Basic, но даже это позволяло получать радость от самого процесса, особенно если что-то получалось.
Безусловно, отдельного внимания заслуживали именно зарубежный опыт. В США вокруг движения DIY (do it yourself) зародился целый бизнес. Взять хотя бы Adafruit Industries — компанию, основанную выпускницей Массачусетского Технологического Института Limor «Ladyada» Fried. Их история начинается с 2005 года и сейчас это процветающая фирма, продукция которой представляет собой электронные наборы для самостоятельной сборки под названием DIY electronic kits. Ну и, конечно же, квинтэссенцией этой «отрасли» является такой проект, как Arduino (http://arduino.cc/en/Main/arduinoBoardUno), который перевернул вообще все представление о радиоэлектронике, как хобби. В основе Arduino лежит микроконтроллер фирмы ATMEL — ATmega. Изначально плата была задумана, как учебное пособие для студентов, но ситуация начала развиваться по более благоприятному сценарию. Благодаря низкой цене, простому языку Wiring и открытости архитектуры Arduino снискал огромную популярность среди армии радиолюбителей всех стран. Второе преимущество заключалось в стандартизованном интерфейсе. Платы Arduino имеют стандартное расположение разъемов, что позволяет проектировать так называемые «шилды» (платы «второго и выше этажей»). На этих платах реализуется дополнительная периферия, как индикаторы всех мастей, средства связи, органы управления и интерфейсы с другими устройствами. Самый простой клон Arduino можно собрать на беспаечной макетной плате быстрее, чем за час, при условии, что вы знаете, что делаете, и у вас есть программатор.
Сегодня приобрести или собрать Arduino не составляет труда. Arduino действительно стал знаменательным явлением и по прошествии 10 лет с момента его появления тематические форумы только множатся, устройство прекрасно продается, а проекты продолжают появляться.
Эта плата, являясь объектом абсолютно свободным от коммерческого права (ее выпуск может наладить кто угодно, не выплачивая при этом royalty владельцам авторского права), дала очень мощный толчок для развития управляемых и самое главное недорогих микрокомпьютеров. Под управлением Arduino без всяких сложных компонентов и даже не занимаясь пайкой и радиомонтажом можно просто «надевая» платы расширения на контактные ножки создавать системы удаленного и программируемого управления различных механизмов, таких, как реле, сервоприводы, электромоторы и т.д. до бесконечности. Можно даже самостоятельно воплотить идею «умного дома». Arduino стал очень важным компонентом такого модного направления, как «Интернет Вещей».
Само собой, гигант современной электронной промышленности в лице корпорация Intel не смог долго оставаться в стороне, и выпустила свой аналог под названием Galileo — Arduino-совместимый микрокомпьютер на платформе Intel. Впервые в Азербайджане модифицированная версия данной платы (Galileo Gen 2) была представлена в рамках выставки Bakutel 2014 и после нее сразу же попала в нашу редакцию. И сегодня мы с великим удовольствием познакомим читателей с ее возможностями, правда, далеко не полными.
Как известно, все лучшее познается в сравнении, поэтому мы будем частично сравнивать наш тестовый образец с его ближайшим аналогом — Arduino Uno R3, пусть хоть и заочно. Итак, давайте сначала посмотрим на начинку и компоненты. В отличие от системы Arduino Intel Galileo базируется на 32-битном процессоре Intel Quark SoC X1000. Хоть он одноядерный и однопоточный, но зато позволяет помимо программирования специализированного микрочипа запустить полноценный дистрибутив Linux. Одноядерным процессором сегодня вряд ли кого-то можно удивить, но на нем есть набор полноценных процессорных инструкций Pentium и все это работает на частоте 400 MHz. Далее на плате вы найдете полноценный слот mini-PCI Express, чип памяти 256 Mb DDR3, 8 MByte NOR Flash, сетевой порт Ethernet 100 Mb/s, USB host port, USB client port, а также слот для карт памяти формата microSD (поддерживает карты емкостью до 32 Gb).
Микроплата поддерживает весь спектр Arduino R3 совместимых плат расширения, а также стандартные PC-устройства, которые вы сможете вставить в слот mini-PCI Express. Работает все это или под специализированными дистрибутивами Linux (например, Yocto 1.4 Poky Linux), или программируется тем же стандартным способом, что и Arduino — через софтверный программатор, подсоединяемый на USB host port. В нашем случае вендор даже озаботился созданием специализированного программного обеспечения «Intel Arduino» IDE, которое, по сути, представляет собой среду разработки нативного и крайне несложного кода, наподобие Eclipse или Netbeans IDE, но с той лишь разницей, что код напрямую грузится и сразу исполняется на устройстве. Само ПО доступно по ссылке: https://communities.intel.com/docs/DOC-22226 или здесь https://downloadcenter.intel.com/Detail_Desc.aspx?DwnldID=24355.
При распаковке комплекта вы найдете блок питания с насадками под розетки для различных регионов мира, простенькая инструкция по нормам и стандартам безопасности, а также сама плата в электростатической упаковке. Все остальное пользователь должен приобрести самостоятельно. Мы для эксперимента использовали стандартный USB host-кабель и карту памяти объемом в 1 Gb для заливки дистрибутива Linux.
На внутренней стороне коробки есть адрес web-сайта, где вы найдете всевозможные ссылки на информацию, позволяющую максимально упростить процесс работы с устройством, но мы бы посоветовали не терять время и сразу пройти по этой ссылке, где пошагово объясняется, что необходимо сделать, чтобы запустить устройство. При чем, все описывается достаточно подробно и с иллюстрациями, поэтому мы не будем заострять на этом внимание.
После того, как вы успешно скачали и установили программное обеспечение, а также драйвер, который будет объявлен как Galileo с привязкой порта (в нашем случае это был COM9), можно запускать Intel Arduino IDE и приступить непосредственно к работе с устройством.
Первым делом вам следует согласно той же инструкции произвести обновление встроенной прошивки на устройстве.
Данный процесс может занять до 5 минут и поэтому следует напомнить читателю еще раз, что питание устройства и соединение по USB-кабелю не должно при этом прерываться.
После обновления прошивки последним из шагов по первоначальной настройке станет заливка на устройство простейшего кода, при котором установленный светодиод будет просто мигать. Мы предлагаем сделать то же самое, и залить подобный код, только лишь с той разницей, что частота мигания будет чаще, чем в примере от разработчиков. Для этого выберите следующие пункты меню «Files» -> «Examples» -> «02.Digital» -> «BlinkWithoutDelay», и после того, как код успешно отобразится во вновь появившемся окне, произведите его заливку на устройство, нажав кнопку Upload. В конце в строчке логов должна появиться надпись «Transfer complete». Как видно на фотографии, заливка кода привела к частому миганию светодиода L возле USB-порта. Отменить действие данной программы можно заливкой кода по умолчанию, который всегда доступен в стартовом окне. Точно так же залейте код через кнопку Upload и любое предыдущее действие будет остановлено.
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
Как вы уже могли заметить, процесс крайне простой и не требует каких-либо особых навыков. На устройство можно передать достаточно большое количество кода, которые может управлять массой устройств, часть из которых упоминалась выше.
К сожалению, любые дальнейшие эксперименты с таким замечательным устройством в настоящий момент невозможны, так как это требует дополнительных модулей расширения, сервоприводов и табло. Но мы можем показать, как настроить и соединиться с мини-дистрибутивом Linux, что выгодно отличает данную плату от стандартных Аrduino-контроллеров.
По ссылке https://software.intel.com/en-us/iot/downloads скачиваем файл Intel Galileo Board (Linux Boot Image), который представляет собой сильно урезанный дистрибутив Linux размером 207 Mb (при распаковке он превращается в образ диска объемом в 1 Gb, поэтому карты памяти с 2 Gb свободного места будет более чем достаточно). Затем, при помощи утилиты win32disk imager (http://sourceforge.net/projects/win32diskimager) распаковываем образ на данную SD-карту. Как это сделать, вам объяснит видеоролик, любезно предоставленный сотрудниками Intel (https://software.intel.com/en-us/videos/creating-a-bootable-sd-card-for-an-intel-galileo-board).
После распаковки образа диска на SD-карту, вставьте ее в специальный слот и, отключив питание, верните кабель питания обратно, запустив плату еще раз. После этого к карте памяти можно будет подсоединиться двумя способами: через сеть (при условии, что Ethernet-кабель подсоединен) или по COM-интерфейсу. Мы остановились на первом варианте и, осмотрев «админку» домашнего роутера, поняли, что устройство взяло себе адрес 192.168.1.50. После этого необходимо сразу же ввести этот адрес в адресную строку браузера (получив стандартный ответ web-сервера It works!) и ssh-клиента (putty). Получив заветное приглашение набрать логин пользователя, мы набирали root. Пароль вводить не пришлось, так как система сразу же пригласила нас в командную строку:
login as: root
root@quark019b3d:~#
Сразу же проверяем тип дистрибутива:
root@quark019b3d:~# cat /etc/issue
iot-devkit (Intel IoT Development Kit) 1.1 \n \l
Затем размер занимаемого места (как и предполагалось, это 1 Gb):
root@quark019b3d:~# df -lha
Filesystem Size Used Avail Use% Mounted on
rootfs 969M 732M 188M 80% /
/dev/root 969M 732M 188M 80% /
devtmpfs 117M 0 117M 0% /dev
proc 0 0 0 — /proc
sysfs 0 0 0 — /sys
tmpfs 117M 0 117M 0% /dev/shm
devpts 0 0 0 — /dev/pts
tmpfs 117M 4.4M 112M 4% /run
tmpfs 117M 0 117M 0% /sys/fs/cgroup
cgroup 0 0 0 — /sys/fs/cgroup/systemd
cgroup 0 0 0 — /sys/fs/cgroup/cpuset
cgroup 0 0 0 — /sys/fs/cgroup/cpu,cpuacct
cgroup 0 0 0 — /sys/fs/cgroup/freezer
tmpfs 117M 0 117M 0% /tmp
mqueue 0 0 0 — /dev/mqueue
hugetlbfs 0 0 0 — /dev/hugepages
debugfs 0 0 0 — /sys/kernel/debug
tmpfs 117M 36K 117M 1% /var/volatile
/dev/mmcblk0p1 50M 9.0M 41M 19% /media/card
fusectl 0 0 0 — /sys/fs/fuse/connections
Посмотрим, какие сервисы запущены, и на каких портах они висят. Оказалось, что здесь на 58888 порту есть даже Node.JS.
root@quark019b3d:/etc# netstat -antp | grep LISTEN
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 165/redis-server
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 153/lighttpd
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 131/connmand
tcp 0 0 0.0.0.0:1534 0.0.0.0:* LISTEN 146/tcf-agent
tcp 0 0 0.0.0.0:58888 0.0.0.0:* LISTEN 168/node
tcp 0 0 ::1:53 :::* LISTEN 131/connmand
tcp 0 0 :::22 :::* LISTEN 1/init
И в самом конце мы решили посмотреть, сильно ли отличается расположение каталогов системы от стандартного Linux.
root@quark019b3d:/# ls -la
total 84
drwxr-xr-x 23 root root 4096 Sep 3 10:52 .
drwxr-xr-x 23 root root 4096 Sep 3 10:52 ..
drwxr-xr-x 2 root root 4096 Sep 3 10:48 bin
drwxr-xr-x 2 root root 4096 Sep 3 10:44 boot
drwxr-xr-x 14 root root 4040 Sep 3 11:30 dev
drwxr-xr-x 39 root root 4096 Sep 3 11:30 etc
drwxr-xr-x 3 root root 4096 Sep 3 10:44 home
drwxr-xr-x 9 root root 4096 Sep 3 10:48 lib
drwxr-xr-x 2 root root 4096 Sep 3 10:46 lib32
drwx—— 2 root root 16384 Sep 3 10:52 lost+found
drwxr-xr-x 3 root root 4096 Sep 3 10:47 media
drwxr-xr-x 2 root root 4096 Sep 3 09:14 mnt
drwxr-xr-x 2 root root 4096 Sep 3 10:47 node_app_slot
drwxr-xr-x 4 root root 4096 Sep 3 10:45 opt
dr-xr-xr-x 69 root root 0 Jan 1 2001 proc
drwxr-xr-x 12 root root 300 Sep 3 11:30 run
drwxr-xr-x 3 root root 4096 Sep 3 10:48 sbin
drwxr-xr-x 2 root root 4096 Sep 3 10:47 sketch
dr-xr-xr-x 12 root root 0 Jan 1 2001 sys
drwxrwxrwt 7 root root 160 Sep 3 11:30 tmp
drwxr-xr-x 11 root root 4096 Sep 3 10:32 usr
drwxr-xr-x 8 root root 4096 Sep 3 09:38 var
drwxr-xr-x 3 root root 4096 Sep 3 10:44 www
Как видим, все выглядит довольно стандартно, за исключением, пожалуй, того, что домашняя папка /root расположена внутри папки обычных пользователей /home. В целом же это ничуть не мешает полноценному использованию системы.
Несколько слов в заключение хотелось бы сказать о том, как заполучить Intel Galileo. Сегодня это можно сделать на таких площадках электронной торговли, как http://www.seeedstudio.com/depot/Intel-Galileo-Gen-2-p-2014.html и http://www.amazon.com/Intel-Galileo-Board-Single-GALILEO2/dp/B00MF753JY/ref=sr_1_1?ie=UTF8&qid=1419341069&sr=8-1&keywords=Galileo+Gen+2. Сразу же отметим, что цена данного микрокомпьютера (более 55 долларов) не в пример выше цены любой, даже самой навороченной платы Arduino. Например, плата с множеством дополнительных модулей, LCD-экраном и даже RFID-брелком на известном китайском портале Aliexpress стоит каких-то 30 долларов с доставкой http://www.aliexpress.com/item/UNO-R3-KIT-Upgraded-version-of-the-For-Starter-Kit-the-RFID-learn-Suite-Stepper-Motor/1725140138.html. Но, как мы сказали ранее, в данном случае это уже не совсем микроконтроллерная плата, а с легкостью превращаемое в полноценный микрокомпьютер устройство, которое прекрасно подойдет тем, кто хочет заниматься тестированием и отладкой своего кода, и при этом не хочет переделывать его под ARM-процессоры. Единственное, что хотелось бы порекомендовать вам в таком случае, так это ознакомиться с книгой Intel Galileo and Intel Galileo Gen 2: API Features and Arduino Projects for Linux Programmers. Книга на английском языке, предназначена для программистов на Linux и cодержит примеры кода. Советуем вам обратить на нее внимание, так как она вам явно пригодится!
Кстати, осенью прошлого года корпорация Microsoft представила новую версию операционной системы Windows 8, которая была создана специально, чтобы раскрыть потенциал инженерной платы Intel Galileo Gen2. Система доступна для скачивания на сайте Github Microsoft. Урезанная версия Windows 8 использовалась на плате Galileo, установленной на пианино, подключенном к облачному сервису Microsoft Azure, а также на роботе-доставщике напитков. Эти экспериментальные работы являются частью плана Microsoft по расширению своего участия в рынке «Интернета Вещей». Так что вы вполне можете попробовать самостоятельно создать связку Intel Galileo и Windows.
Полезные ссылки:
Описание платы на сайте вендора:
http://www.intel.com/content/www/us/en/do-it-yourself/galileo-maker-quark-board.html
Список всех совместимых Arduino-плат:
http://en.wikipedia.org/wiki/List_of_Arduino_boards_and_compatible_systems
Образцы кода Arduino:
http://arduino.cc/en/Reference/HomePage
Часть урока на Youtube, посвященного работе с Intel Galileo:
Книга Intel Galileo and Intel Galileo Gen 2: API Features and Arduino Projects for Linux Programmers:
Автор статьи: Фархад Бадалов