В 2011 г. корпорация Google представила стандарт Android Open Accessory, который обеспечивает взаимосвязь между внешними USB-устройствами (Arduino-подобными платами и др.) и Android-устройством. Начиная с версии Android 3.1 (поддержка AOA портирована и в Android 2.3.4) по замыслу Google все устройства должны поддерживать USB соединение в режиме «accessory mode». В данном режиме подключенное устройство (к примеру плата Arduino) является хостом (в т.ч. питает шину 5В/500мА), а Android устройство является периферийным. В дополнении ко всему Google выпустила предназначенную для разработчиков плату ADK 2011 на базе Mega2560. В версии ADK 2012 используется микроконтроллер ARM 32-bit Cortex M3.
Для чего это необходимо? Данная взаимосвязь между устройством на базе Android и Arduino-подобными платами открывает массу возможностей для разработчика и радиолюбителя: управление сервоприводами, двигателями, индикацией с Android-телефона, считывание состояние датчиков на Android телефоне или планшете, таких как гироскоп, акселерометр, компас, GPS, передачу данных через GPRS/HDSPA модуль планшета и многое другое.
В данном цикле статей я хотел бы шаг за шагом рассказать о некоторых возможностях USB-связи между Android и Arduino.
На сегодняшний день существует уже достаточное количество плат разработчика поддерживающих Android Open Accessory протокол. Приведем некоторые из них:
Google ADK Board
Плата, анонсированная Google. Используется микроконтроллер ATmega2560 (как и в большинстве других плат, анонсированных в 2011 году).
8-ми битный контроллер ATmega2560 содержит 256 КБ внутренней флэш памяти и работает на частоте 16 МГц. Память SRAM — 8 КБ и EEPROM – 4 КБ. На плате предусмотрено 54 цифровых входа/выхода (14 из которых могут работать как ШИМ выходы) и 16 аналоговых входов (10 бит АЦП).
Помимо этого на плате уже напаяна некоторая периферия: 3 кнопки, 3 RGB светодиода, джойстик, датчик температуры, фотодиод, емкостный сенсор (логотип андроида), 2 реле 24В/1А, три коннектора для подключения серво приводов.
Но есть один существенный минус – стоимость платы, которая составляет почти 400$, что делает ее совсем непривлекательной в радиолюбительских разработках. Да и найти и купить такую плату честно говоря сложновато даже в зарубежных интернет-магазинах.
Google ADK 2012 Board
На конференции Google I/O 2012 в конце июня 2012 г. была представлена новая плата для разработчиков (впрочем как и анонсирован новый протокол Android Open Accessory 2.0 с поддержкой аудио и подключением сразу нескольких устройств к Android). Данная плата также совместима с Arduino форм-фактором, однако в ней используется уже более мощный ARM процессор: 32-битный Cortex M3.
Плата Arduino DUE, выход которой намечен на 2012 также будет содержать процессор Atmel ATSAM3X8E ARM Cortex-M3
Помимо этого на плате существенно обновилась и периферия: добавился слот SD, модуль Bluetooth и NFC, акселерометр, датчик атмосферного давления, влажности, приближения, емкостной слайдер, 6 семисегментных светодиодных RGB матрицы, а также УНЧ и динамик. Ну и сама плата теперь переехала в корпус в виде будильника.
В ADK2012 добавлена возможность передачи звука по USB соединению (начиная с версии Android 4.1 – API 16 и выше). Файлы схем платы ADK2012 и программные файлы доступны для скачивания.
Цена платы на текущий момент составляет около 500$.
Arduino ADK
Это уже более доступная плата от известной итальянской компании. В плате используется микроконтроллер ATmega2560, а также микросхема USB хоста MAX3421e для соединения с Android-устройством. Плата содержит 54 цифровых входа/выхода (15 из них могут работать как ШИМ), 16 аналоговых входов, 256 КБ флэш памяти (из которых 8 КБ отведены под загрузчик), SRAM — 8 КБ, EEPROM — 4 КБ.
Более подробное описание платы на английском языке можно найти здесь. Стоимость платы Arduino ADK R3 на текущий момент составляет 50 евро.
Seeeduino ADK Main Board
Вариант платы от компании Seeed Studio, в данной плате также используется микроконтроллер ATmega2560. В плате есть 56 цифровых входа/выхода (14 из них могут работать как ШИМ), в остальном аналогично Arduino ADK. В качестве микросхемы USB-хоста используется MAX3421. На плате предусмотрен микропереключатель уровней 3.3В/5В.
Более подробное описание находится здесь. Официальная стоимость платы составляет 80$.
Именно с этой платой мы и будем в дальнейшем работать. Плата была приобретена на eBay за 60$.
IOIO
Разработка от известного за рубежом интернет-магазина SparkFun. Сердцем платы служит микроконтроллер PIC24FJ256-DA206 работающий на 32МГц и имеющий 256КБ памяти программ и 96КБ RAM-памяти. На плате установлен лишь один USB-разъем для соединения с Android-устройством. Плата содержит 48 цифровых входов/выходов, из них 16 пинов могут быть задействованы ка аналоговые входы. На любой I/O можно повесить прерывание. Более подробная документация по IOIO Board находится здесь.
Стоимость платы в SparkFun составляет 50$.
FEZ Panda II
Плата компании GHI Electronics содержащей 32-битный 72МГц процессор ARM7. Плата совместима с Arduino форм-фактором и большинством Arduino-шилдов, но разработка ПО ведется с применением .NET Micro Framework. О данной плате мы подробно писали в данной статье: обзор FEZ Panda II.
Данная плата была выпущена ещё до появления ADK, но уже имела возможность работы в качестве USB-хоста, поэтому для поддержки Android Open Accessory понадобилось всего лишь написать соответствующее ПО, которое можно взять здесь: код для FEZ, код для Android.
Справедливости ради, стоит отметить, что данный код применим не лишь к плате FEZ Panda II, а практически ко всем платам компании GHI Electronics на ядре .NET Micro Framework, а это FEZ Domino, FEZ Hydra, FEZ Cerbuino Bee и др. платы с USB хостом.
Стоимость платы FEZ Panda II на сегодняшний момент составляет 40$
USB Host Shield
Шилд к Arduino (плата, которая устанавливается сверху Arduino, в стандартные разьемы). Хороший вариант, когда у вас уже есть плата Arduino. Вариантов таких шилдов несколько: от DFRobot — USB Host Shield for Arduino, от Emartee — Arduino ADK Shield For Android, от Circuits@Home — USB Host Shield 2.0 и др., объединяет их одно – наличие микросхемы USB-хоста.
Цены на USB хост шилды варьируются в районе 20-35$.
Также, существует большое количество других плат: PhoneDrone board for Android, Teemino, DFRduino MEGA ADK.
Режимы MicroBridge и Open Accessory
Как уже было сказано выше, корпорация Google для обмена информации между устройствами Android и Arduino (и др.) представила стандарт Android Open Accessory. Но, он поддерживается Android устройствами начиная с версии 3.1 (но также был портирован на Android и в Android 2.3.4).
Существует второй режим работы – Android Debug Bridge (ADB) в MicroBridge режиме, который поддерживается устройствами на базе Android версии 1.5 и выше.
В качестве Android устройства будет выступать современный 7″ планшет Ainol Aurora с версией андроида 4.0.4, который казалось бы должен поддерживать режим Open Accessory. Но это не так, и я так и не смог получить связь в данном режиме. При чтении зарубежных форумов и информации, я выяснил, что наличие на вашем аппарате версии Android 3.1 и выше ещё не означает 100% работу в режиме Android Open Accessory.
Вот небольшой список устройств, которые совместимы с режимом Open Accessory:
Acer Iconia A100
Acer Iconia A500
ASUS Eee Pad Transfomer TF101
Dell Streak 10 Pro
Foxconn Commtiva-HD710
Google Nexus S
Google Nexus One
HTC EVO 3D
HTC PH4100
HTC Sensation 4G
HTC Nexus One
LG Optimus Pad
LG Optimus 2X
Motorola Xoom
Samsung Galaxy A
Samsung Galaxy Ace
Samsung Galaxy S
Samsung Galaxy Tab 10.1
Toshiba AT100
Для остальных устройств, возможно придется менять прошивки, ставить моды, патчи и т.п., в общем танцы с бубном. И в конце не факт, что ещё и заработает, как это и получилось у меня с планшетом Ainol Aurora.
Но, я приведу небольшой список того, что возможно поможет запустить ваш планшет с поддержкой режима Android Open Accessory:
1. Установите root права и программу Root Explorer и проверьте наличие файлов /system/framework/com.android.future.usb.accessory.jar и /system/etc/permissions/android.hardware.usb.accessory.xml. Если их нет, то режим Open Accessory работать не будет. Самый важный – это первый файл, необходимо найти прошивку или мод для вашего устройства, в котором содержится данный файл. Наиболее популярным является Cyanogen Mod.
Файл android.hardware.usb.accessory.xml вы можете скачать здесь, он служит для разрешения запуска файла com.android.future.usb.accessory.jar.
Когда файла нет, то компилятор Eclipse обычно «ругается»: INSTALL_FAILED_MISSING_SHARED_LIBRARY
2. Иногда помогает установка следующей строки CONFIG_USB_ANDROID_ACCESSORY=y в файле /proc/config.gz. Но не во всех Android устройствах есть этот файл, в моем не было.
3. Проверьте типы используемых USB библиотек Open Accessory. Иногда в проекте необходимо заменить com.android.future.usb на android.hardware.usb (плюс переделать файл манифеста, коды вызова библиотек и т.п.). Подробнее об этом написано здесь и здесь.
4. Попробуйте отключить режим ADB в настройках планшета.
Я проделал все вышеперечисленные процедуры, но на Android планшете все также красовалась надпись «Please connect a DemoKit board», а в логах планшета (для этого я использовал LogCat) для приложения DemoKit отображалось: «mAccessory is null», что означает, что Android не обнаружил Accessory-совместимых устройств на USB шине.
В то же время, в PortMonitor из Arduino IDE, был такой лог: «Device addressed… Requesting device descriptor. found possible device. swithcing to serial mode device supports protocol 1 or higher»
Т.е. моя плата Seeeduino ADK Main Board по всей видимости видела USB-устройство, но не открывало соединение по протоколу Open Accessory. Несколько дней экспериментов, правок программ и анализа логов ни к чему не привели.
Если вам так и не удалось установить связь с использованием режима Android Open Accessory, то в режиме MicroBridge, ваше Android устройство должно точно заработать. Его мы и будем использовать в наших дальнейших проектах. Если с выходом нового мода или прошивки у меня получится установить связь в режиме Open Accessory, то работу в этом режиме я постараюсь также описать.
В следующей статье мы рассмотрим необходимое программное обеспечение для работы с Android и Arduino, его установку и настройку.
Протокол Android Open Accessory 2.0
В конце июня 2012 был корпорацией Google был анонсирован протокол AOA 2.0. Основными нововведениями стали поддержка аудио и работа Android сразу с несколькими HID устройствами. Подержка AOA 2.0 будет осуществлятся устройствами с версией Android 4.1 Jelly Bean (уровень API 16) и выше.
В версии AOA 1.0, содержалось лишь два USB product ID:
0x2D00 – accessory
0x2D01 — accessory + ADB
В версии AOA 2.0 добавились следующие product ID:
0x2D02 – audio
0x2D03 — audio + ADB
0x2D04 — accessory + audio
0x2D05 — accessory + audio + ADB
Теперь с Android устройства возможно передавать аудио-поток на подключенное accessory устройство. Пока что это 2-х канальный 16-бит PCM аудио поток с битрейтом 44100 кГц, но в дальнейшем список поддерживаемых форматов может быть расширен.