(USB HOST SHIELD + ARDUINO MEGA 2560)
By:MobotRoid
一、背景
Google在今年5,6月份的时候更新Android到2.3.4开始支持外接扩展硬件,这里无疑为我们描绘了未来嵌入式智能的发展蓝图,在任何你需要智能计算的地方,可以是汽车里,可以是家庭智能计算中心,甚至可以在天文台都可以即时插入手机获取手机的计算资源.当然就目前来看最大的应用还是在机器人智能上.
很久以前就一直萌生有自己做机器人的想法,苦于对数电模电单片机了解太粗浅,一直没能下手,这次ADK的开放可以说对于做软件的人来说是敞开了机器人的大门.
因为ADK发布并不久,算是比较新的技术,网上的资源相对较少,特别是国内的资源更少,这里就我这段时间对ADK环境搭建的经验分享出来给大家.
Google本身发布了一个专用于ADK的板子,要价400美刀,当然实际上用arduino + usb host shield(在淘宝上2560 + USB HOST SHIELD 2.0 只需要300人民币左右)也是可以达到的,虽然实际做起来有点曲折.
二、相关文件的生成
先附上google标准教程:(你严格按照这个做如果能完成最好,如果不能完成还是看我这个吧)
http://developer.android.com/guide/topics/usb/adk.html
你需要在这步产生两个文件,一个手机端用的apk以及一个用于上传到板子上的pde.
严格按照谷歌官方的步骤走,
第一步,下载googleADK包(https://dl-ssl.google.com/android/adk/adk_release_0512.zip)
第二步,搭建android开发环境(网上一搜一把,我这里就不重复了), 通过SDK Manager下载Adds-on(Google APIs),如果手机就2.3.3,level10,如果是pad就需要3.0(安装图可以见http://code.google.com/android/add-ons/google-apis/installing.html)
第三步,在eclipse中,通过建立已存在工程的方式把ADK包中的\app工程建立出来,target选google API,或者2.3.3或者3.0,根据需要建立,建立完了以后,在工程下就会有bin文件夹产生了,下面那个apk就是我们要用的apk了
第四步,下载arduino开发IDE(http://arduino.cc/en/Guide/HomePage),完了安装,之后将ADK包中的\firmware\arduino_libs下的两个文件夹拷贝到arduinoIDE安装目录下的\libraries中,然后打开IDE,从IDE中打开ADK包中的\firmware\demokit\demokit.pde,编译就行了
通过第三步产生的apk传到手机,以及第四步的pde选择好对应的板子后传到板子上,我们就完成了google标准教程中的内容,如果你的apk能在手机上顺利安装,并且在板子连上打印线(用于供电,你也可以用电源线供电)后,USB HOST SHIELD连上手机时如果出现了警告窗口,恭喜你,剩下的内容你不用看了,你已经打通了手机和板子的通信,剩下的就是写你想要的功能了.
如果APK没装成功,或者线连通了手机上没有出现警告窗口,接下来的内容可能会对你有些帮助.
三、手机端开发环境的搭建
手机端最硬性的条件是手机必须支持到android2.3.4以上的rom,从实际情况来说,即使G1也能刷到2.3.4以后,所以理论上说所有的android手机都能支持(实际上根据老外研究貌似galaxy S系的手机不支持).我这里使用的就是很早期的HTC G2来做的.
有可能你在按google标准做法做了以后,APK安装不上,LOG中显示
Package com.google.android.DemoKit requires unavailable shared library com.android.future.usb.accessory; failing!
这需要你按照下面步骤进行测试和调整
(1)关于rom
1.如果你的手机通过官方升级渠道能够升级到2.3.4以后
恭喜你,你不用为rom发愁,什么都不做或者做一点拷贝工作就能完成手机端的布置.
2.如果你的手机官方升级早已停滞(比如我用的HTC G2)
那么你只能刷MOD版的rom,国内比较常见的可以去安卓网或者机锋网搜索你想要的rom,由于不是专门的开发网站,他们的rom比较有局限性,一般都是从国外的rom拉过来改的,国外比较权威的是xda论坛,一般的rom都能找到(http://forum.xda-developers.com/),刷机过程我这里就不赘述了,内容比较多,请不太清楚的读者转到安卓机锋网先学习一下.一般来说,MOD版的rom都有root权限,可以通过如下方式检查你的rom是否支持ADK,拉取根目录下/proc/config.gz出来,解压缩,搜索"CONFIG_USB_ANDROID_ACCESSORY",如果搜索不到或者搜索出来的结果是"# CONFIG_USB_ANDROID_ACCESSORY is not set"那很不幸,这个rom是不支持ADK的,需要再刷其他rom(以HTC G1或者G2这些早期版本来说,ezGingerBread的rom是支持的,但是安装后需要自己设置语言为中文,ezGingerBread的网址:http://forum.xda-developers.com/showthread.php?t=882356)
(2)关于运行库以及权限
Rom的问题解决后,可以尝试安装一下,很可能还是安装不上,是因为缺少运行库的原因,你可以把模拟器文件中/system/framework/下面的com.android.future.usb.accessory.jar文件拷到手机的对应目录下,同时需要把/system/etc/permissions/目录下的android.hardware.usb.accessory.xml拷贝到对应目录下,这个目录也被链接到/etc/permissions的.(如果没有root提权需要用adb命令push文件),这里附上国外解决这个问题的原始链接:
https://github.com/ezterry/manifest-gingerbread-DS/issues/32
经过这两步,按道理来说应该可以顺利安装上APK了,这时你可以尝试下把板子跟手机连一下观察是否有警告框弹出,如果没有,接着往下看
四、ARDUINO端开发环境搭建
非常恶心地,google原始提供的pde以及USB HOST SHIELD库并不支持目前市面上常见的USB HOST SHIELD,只需要做一个简单替换即可.先下载USB HOST SHIELD LIB 2.0,地址如下https://github.com/felis/USB_Host_Shield_2.0/downloads
解压
将arduinoIDE目录下原来的USB_Host_Shield做个备份后删掉,然后将解压得到的目录重命名为USB_Host_Shield
打开新USB_Host_Shield目录下\examples\adk\demokit_20\下的pde文件通过arduinoIDE打开,编译,上传到板子上,重新插拔与手机连接的USB线,Cheers,应该有警告框弹出了:),连接打通!
附上USB_HOST_SHIELD lib 2.0地址
如果还有问题可以联系我,虽然我未必能回答也未必回答及时,但是我会尽力做出反馈的
zidongmo@gmail.com