最近业界的开展显现,智能手机/便携体系与自动化体系或机械体系之间存在巨大的市场潜力。2011年春季谷歌引进的Android敞开拜访架构,敞开了根据Android操作体系的设备的巨大或许–答应智能手机和平板电脑操控外部硬件。这种敞开的附件结构为便携设备可以推进商务,消费和工业环境的自动化进程供给了渠道,运用现已广泛选用并为用户所了解的操作体系,衔接从厨房电器到重型机械的全部设备。
现在获取微处理器和移动设备之间点对点通讯电线的最盛行的一种办法是运用通用串行总线(USB)接口。因为广泛遍及而遭到工程师们的喜爱(特别是在消费电子和计算机范畴)。下面的章节就如安在根据Android的平板和具有USB操控功用的微处理器之间树立这样的通讯介绍一个根本的计划。
USB主控的一个要害特点是能为USB设备(或从设备)供电,并供给了一个十分丰富的通讯协议,支撑传输相对许多的数据。可是,就协议处理的复杂性来说对工程师来说总有必定的缺点,尤其是在设备端。
首要的妨碍是, 假如工程师想要完成他们自己的固件,不同的半导体供货商供给的微处理器的运用程序接口(API) 会有些改变。为处理这一问题首要有两个办法可以选用:
1. 在设备端运用有点像硬件状态机的微处理器。可是这样做需求许多的工程资源。
2. 运用USB-串行转换器,此计划可供给USB底层相关的协议,然后下降USB主控端和设备端的软件完成的复杂度。这或许对工程师们愈加可行,尤其是对那些在Android操作体系或Android USB运用程序接口经历少或许没有经历的工程师。
在本文中, 供给了第二个办法运用USB串行转换器的比方。比方中的参阅代码,是针对运用FTDI Vinculum-II (VNC2) USB主控端IC所规划,可是,它也可以用于其它操控器作业。
经过Android操控
Android发布了一整套API给开发者完成自己的运用而且供给USB通讯的才能。可是,现在为止只要一小部分Android平板供给全面的USB主控接口衔接。因为这一约束, 谷歌开发了一个API用于Android经过USB设备端口与外部USB通讯。这被称为Android敞开拜访开发套件(ADK)。虽然这儿说到API, 意味着与运转Android 的设备通讯的办法,规划师依然需求意识到一系列的要害问题:
1. 外部设备有必要自己供电,并需求作为Android 硬件的USB主控端。比方,Android敞开拜访结构的一个潜在运用便是根据Android的便携设备和一些健身设备之间的互动–因而用户可以将他们的心率,卡路里耗费等的数据传输到便携设备上用于剖析或与以往观测的统计数据比较。明显便携设备可以给跑步机之类的东西供电。不同於曾经的运用场景,当PC衔接一个鼠标之类的串行设备时,此设备也必需供给电源。
2. 现在可以作为主控端的设备不是许多。尤其是,大多数智能手机模块依然短少USB主控衔接功用。将来会有更多的智能手机运用USB OTG (比方新发布的三星Galaxy Nexus),这将答应根据Android体系操控各种家用消费电子。比方,运用智能电话作为游戏操控器或操控智能家居产品。
运用实例
便携设备经常要做的一件工作是经过Android敞开附件结构来操控各种形式的电子马达。并用简略的办法办理方向和速度等材料。这儿将经过一个简略风趣的比方进一步了解这些原理,这个典范运用平板电脑操控玩具赛车展现Android的功用。
创立一个根据Android的操控体系所需求的部件如下(相应的原理框图如图1所示)。在这个比方中,供给了玩具赛车典范的详细细节(图2进一步指示)。
1. 一个能供给遥控功用运用的Android平板(这相同能运用到操控任何其它硬件元件如马达,泵等)。在这个比方中,选用ACER A500 Android平板电脑(运转Android3.2)。
2. 一个经过USB连线与平板衔接的微处理器,用作USB设备。为简化固件在设备端运用USB转串行驱动器。这个比方中指定运用FTDI Vinco开发板,具有双通道USB 主/从设备操控器功用。
3. 经过GPIO,PWM, I2C和SPI接口操控的用户硬件组件。本例中,是经过GPIO接口履行无线遥控。
代码创立
操控玩具车的用户接口适当的简化。在平板电脑的触摸屏上呈现两个按钮,一个用于将车子向前移动,另一个用于向后移动。经过相应旋转平板电脑完成左右移动车子。无限操控信号可以被拆成字节串行传输。比方,字节0X01用于右转,0X08是向前。相同,两个值的组合0X09使车子右转且向前。
不需求为此运用编译一个专用的Android核,也不需求绕过厂商默许的登陆权限来登陆平板电脑。他们所需求的仅仅装置Android运用程序[http://www.nexus-computing.ch/files/Racer.apk],然后经过USB 接口刺进Vinco板。Android平板和Vinculum II之间的衔接,是运用新发布的Android USB 主控API来保护的。Android上的JAVA软件与运用USB 批量和操控传输的微处理器交互,因而是一个软的USB 转串行驱动器。微操控器的固件被设为经过USB转串行驱动与平板电脑接口,它接纳单个字节,将相应的无线摇控管脚拉低,终究操控玩具车。
下面几行的Java代码用于初始化串行通讯:
UsbDeviceConnection conn = usbm.openDevice(dev);
conn.controlTransfer(0x40, 0, 0, 0, null, 0, 0);// reset
conn.controlTransfer(0x40, 0, 1, 0, null, 0, 0);// clear Rx
conn.controlTransfer(0x40, 0, 2, 0, null, 0, 0);// clear Tx
conn.controlTransfer(0x40, 0x03, 0x4138, 0, null, 0, 0);// set baudrate 9600
这些代码与libftdi函数十分相似:
int ftdi_usb_reset(struct ftdi_context *ftdi)
int ftdi_usb_purge_rx_buffer(struct ftdi_context *ftdi)
int ftdi_usb_purge_tx_buffer(struct ftdi_context *ftdi)
int ftdi_set_baudrate(struct ftdi_context *ftdi, int baudrate)
一旦衔接被初始化,将经过Android操作体系的USB API作相似的进一步的批量传输。
定论
本文评论的运用典范阐明,虽然存在必定的困难,仍是可以经过USB 接口完成根据Android的操控功用。运用Android主控API结合适宜的硬件和相关固件开发,只需求对Android操作体系和差异之处有很少的了解,就可以创立出想象的运用。