1i7 (1i7) wrote,
1i7
1i7

Category:

ChipKIT и Ётафон: у нас тут не всё так однозначно

ChipKIT Max32 и Yotaphone from 1i7 on Vimeo.


Управление роботом со смартфона напрямую: приложение на смартфоне или планшете с операционной системой Google Android включает и выключает лампочку на плате, плата подключена к смартфону напрямую через USB-провод.

В роли смартфона с Android выступает Yotaphone, в роли платы с лампочкой - ChipKIT Max32 с NetworkShield.

Очевидно, что из этой простейшей демонстрации прямого канала связи через USB-шнурок вырастает довольно широкое поле возможностей применительно к созданию автономных роботов - у современных смартфонов гораздо более серьезные вычислительные возможности по сравнению с любой микроконтроллерной платой, новые модели более часто выходят на рынок, плюс в одном комплекте идет набор устройств (камера, GPS, ГЛОНАСС, компас, блютус, GSM, мобильный интернет, акселерометр), которые гарантированно работают и доступны программно через стандартный API на языке Java. Плата, в свою очередь, позволяет смартфону работать с более широким кругом внешних устройств, которые можно подключать к ней голыми проводами - конечно в первую очередь это моторчики и датчики.

Польза микроконтроллера может также заключаться в том, что с его помощью могут быть реализованы элементы управления роботом, которые должны работать в реальном времени (Linux, лежащий внутри Android, операционной системой реального времени RTOS не является, хотя возможно при некотором желании чего-то похожего от него можно добиться). Т.е. микроконтроллер в данном случае для нашего робота будет играть роль спинного мозга, который будет отвечать за базовую моторику и рефлексы (ехать с нужной скоростью, не разбиться об стену), а смартфон будет осуществлять подобие высшей нервной деятельности (гулять по интернету, разглядывать фоточки с камеры), в процессе которой позволительно пофрустрировать.

WF32+Yotaphone-02.jpg



Обзор оборудования

Механизмы общения между устройством Android и внешним аксессуаром, подключаемым через провод USB или Блютус, определены в протоколе Android Open Accessory. API для работы с аксессуарами является стандартной частью системы начиная с 4й версий Андроида, для младших версий можно подключить к приложению специальную библиотеку (пример проекта для Андроид от Гугла). Также Гугл предоставляет пакет Accessory development kit (ADK), который включает набор инструментов для создания собственных аксессуаров на основе платформы Arduino. Одна из эталонных плат для ADK основана на Arduino Mega с процессором ATmega2560 16МГц и продается за $80.

Arduino-Mega-R3.jpg

Но так как мы любим архитектуру MIPS, процессоры PIC32 и платы ChipKIT от Digilent, попробуем использовать то, что есть у них на сайтах. У Digilent нашлось 3 решения, которые могли бы подойти под задачу, т.к. имеют встроенный контроллер USB OTG (On-the-go)  с возможностью работы в режиме USB-хоста:

Комбинация ChipKIT Max32 ($50) + NetworkShield ($55)


плата ChipKIT WF32 ($70)


и плата ChipKIT Wi-FIRE ($80)




В Max32 и WF32 используются 32хразрядные процессоры PIC32MX с частотой 80МГц, плюс на WF32 навешаны дополнительные приятные вещи типа модуля WiFi и разъема для SD-карты. Плата ChipKIT Wi-FIRE обладает всеми преимуществами платы WF32, но при этом в её основе лежит новый процессор Microchip PIC32MZ с тактовой частотой 200МГц, а разница в цене с WF32 составляет всего $10. Есть один небольшой минус - Wi-FIRE поступят в продажу только в первой половине июня, а я и так уже затянул с этим постом.

Таким образом, в роли аксессуара для Андроида плата WF32 побеждает Max32 и тем более Arduino Mega R3 ADK Board с большим отрывом как по цене, так и по качеству, но она уже готовится в ближайшее время передать эстафету лидера плате Wi-FIRE.

и небольшая предыстория

Очевидно, что дистрибутив ADK от Гугла, основанный на среде Arduino, для плат ChipKIT не подойдет, потому что в платах ChipKIT используется совершенно другое железо. К счастью, Digilent предоставляет все необходимые библиотеки и инструменты разработки для своих плат: среда MPIDE (тоже основана на MPIDE из Arduino, модифированной для работы с процессорами PIC32) и набор дополнительных библиотек для работы с USB-стеком (ссылка на странице платы).

Но здесь же начинаются первые сюрпризы. В примерах работы с USB, которые появляются в меню MPIDE после установки библиотек, приведено всего 2 случая: USB HID (Human interface device) и USB MSD (Mass storage device), т.е. в них показано только то, как можно подключать к плате мышку и флешку, а про режим простого обмена данными с устройством или режим Android Accessory ничего не сказано.

Как выяснилось, это было не просто так - в библиотеки ChipKIT входят элементы реализации USB-стека для PIC32 от Microchip и С++ обертки для некоторых подсистем от команды ChipKIT. USB-стек Microchip в свою очередь состоит из 2х уровней: внизу общий для всех слой USB Host, который обеспечивает жизненный цикл работы с подключенным USB-устройством и базовый обмен данными, а уже над ним параллельно строятся уровни специальных USB-протоколов: HID, MSD, Android Accessory и что-то еще в виде отдельных модулей. В библиотеках Microchip (MLA - Microchip libraries for applications) уже был модуль релизации протокола Android accessory, но разработчики ChipKIT его в стандартную поставку пока что не включили.

Пришлось самостоятельно импортировать этот модуль usb_host_android.c из пакета MLA в пакет библиотек ChipKIT, решив при этом некоторое количество проблем, и дописать к нему для единообразия C++ обертку chipKITUSBAndroidHost.

Подробности по установке модифицированной библиотеки ChipKIT для работы в режиме Android Accessory на форуме chipkit.net; надеюсь, что в будущих обновлениях эта возможность будет включена в нее по умолчанию, тогда никаких дополнительных телодвижений не потребуется.

Платы Max32+NetworkShield и WF32 заработали в режиме аксессуара с одним из моих андроид-планшетов и каким-то старым Htc-смартфоном.

И я уже собрался записать видео и написать пост про то, как WF32 работает вместе с моим Ётафоном, но здесь внезапно появился второй сюрприз: WF32 видела все андроид-устройства, которые были у меня под рукой, но не видела Ётафон. Ётафон в свою очередь также определялся с USB на всех компьютерах, но только не на WF32; более того, он смог заработать даже с платой Max32+NetworkShield как и положено в режиме аксессуара.

После некоторого количества исследований стало понятно, что они не видят друг друга на каком-то совсем глубоком аппаратном уровне (на WF32 не приходят прерывания от подсистемы USB при подключении именно Ётафона). В ветке youtaphone на 4pda на эту тему ничего хорошего не сообщили кроме того, что Ётафон работает с Arduino Mega ОК. На форуме chipkit.net на днях пришел совет попробовать поиграть с внешним источником питания и настройками на WF32, который пока не дошли руки попробовать, да и после 3х сгоревших WF32 играть с внешним питанием приходится осторожно.

Поэтому на всех рабочих картинках и видео пока Max32+NetworkShield, хотя WF32 в главной роли для любого другого смартфона будет смотреться привлекательнее.


ChipKIT WF32 не хочет Ётафон:
WF32+Yotaphone-02.jpg

А у Max32 и NetworkShield'а с Ётафоном всё ОК:
Max32+Yotaphone-03-ledon.jpg



Следующий пост с подробным кодом.
Tags: android, arduino, chipkit, типовые задачи
Subscribe

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 2 comments