Android手机串口调试助手设计与实现
2015-01-17张佳进陈立畅杨晓东唐君君
张佳进,陈立畅,杨晓东,唐君君
(1.云南农业大学 基础与信息工程学院,云南 昆明 650201;2.云南农业大学 工程技术学院,云南 昆明 650201)
随着移动互联网的高速发展,越来越多的人开始使用智能手机,其中Android智能手机市场占有率高达60%以上。除了基本的通话功能以外,智能手机已经成为物联网时代中新型的终端节点。
现在Android手机主要集成了Wifi、蓝牙通信接口,它们具有传输速率高、通用性好等优点。但是在物联网领域中,由于成本、功耗、硬件资源等因素的限制,许多传感器、控制设备往往采用传统的串行通信技术,例如UART、I2C、SPI等串行模式。然而当前Android手机往往缺乏这些硬件接口,因此导致Android手机和传统串行设备之间的通信比较困难[1]。
串口调试助手是专门用于测试串口通信使用的工具。串口调试助手具备了方便、稳定、交互性强的特点,给嵌入式系统开发人员带来了极大的便利。但是由于上述原因,目前在Android手机领域还没有面向嵌入式系统的串口调试工具。
为了描述的方便,可以把UART串行通信接口抽象成一个传感器系统。目前很多Android智能手机厂商将传感器的软硬件开发工作视为手机研发过程中一个非常重要的组成部分。但有趣的是到目前为止,Google公司在Android系统的Java框架层仅仅只提供了对常见的八种类型传感器的支持,没有规定各个类型的传感器需遵循的通信协议和设备参数。
而在Android智能手机的研发过程中,传感器底层软件的设计和开发工作的流程、传感器驱动程序与上层应用进行交互的接口方式均无统一的标准和解决方案,这就要求传感器底层软件设计开发人员根据项目所使用的传感器的硬件特点,以及其对于 Android架构和Linux内核的熟悉程度,设计出一套最适合自己特定环境下传感器底层驱动程序,这很大程度加大了智能手机传感器的软件开发难度[2-3]。
IOIO模块是国际著名开源公司SparkFun出品的一款专门为Android系统设计的通用型I/O扩展及控制模块。该硬件模块通过USB接口与Android手机相连,高度集成了多路数字I/O端口、I2C,SPI及UART串行控制器等功能组件,只需通过简单、直观的Java API即可直接操作外部硬件I/O,不需要额外的嵌入式软件编程和其它硬件设备,使用方便灵活,开发便捷。目前众多国际著名品牌的Android手机和平板电脑都兼容支持IOIO模块,例如谷歌、三星、索尼等[4-5]。
鉴于以上因素,文中采用国际开源的IOIO模块实现android手机的UART串行通信硬件接口,它能直接支持TTL串行通信,同时基于IOIO提供的IOIOLib库,使用Java语言,在Android手机上开发串口通信调试助手软件。
1 IOIO硬件结构
IOIO硬件模块主要采用了低功耗的PIC24FJ256DA206单片机作为系统控制器,电路板上集成了多路UART、I2C、GPIO等多个功能接口部件。对于UART串行口的管脚定义见图1所示。
图1 IOIO模块硬件实物图Fig.1 Picture of IOIOhardware module
表1 IOIO串口UART管脚定义Tab.1 Pins of UART in IOIO
如上表1所示,一个IOIO模块可以同时支持多达4个串口UART,能满足复杂的串口通信系统应用。
2 串口调试助手软件开发环境要求
基于android手机和IOIO硬件接口,串口调试助手采用Java语言进行开发,其开发环境配置及所需组件如表2所示[6-7]。
表2 串口调试助手开发环境要求Tab.2 Development environment required for Serial UART debugging assistant
3 串口调试助手软件的实现
3.1 软件系统的组成
与PC端的传统串口调试助手类似,Android手机环境下的串口调试助手软件功能主要包括接收和发送两个模块,详见图2。其中接收模块支持以十六进制或ASCII字符格式接收数据。发送模块具备手动发送和自动定时发送功能,同样也支持十六进制或ASCII字符格式数据的发送。如图3所示,在软件接收区旁有“hex-re”和“hex-se”复选框,前者打钩则表明以十六进制的方式接收,否则以ASCII字符方式接收数据。同理,“hex-se”则定义了以十六进制或ASCII字符方式发送数据。
3.2 系统软件设计方法
图2 系统的软件设计结构图Fig.2 Schematic diagram of the software test system
图3 系统软件界面Fig.3 Interface chart of the test system
IOIO模块在IOIOLib库中提供了丰富的API接口,在本系统中主要采用了Uart接口函数。为了提高系统吞吐率,有效利用系统资源,改善用户任务之间的通信效率,本软件采用Java多线程技术。限于篇幅,本文只对其中的核心接口函数和类进行介绍。
1) 串口初始化 IOIO.openUart()
实 例 :Uart uart=ioio.openUart (rxPin, txPin, baud,parity, stopBits);
其中“rxPin”与“txPin”分别代表接收管脚和发送管脚所对应的序号;“baud”代表的是波特率;“parity”为奇偶校验位;“stopBits”是停止位数的定义。
例如 Uart uart=ioio.openUart(9, 14, 9 600, 0,1),该命令行表示打开一个串行口,9号管脚为接收端,发送端为14号管脚,9 600波特率,无校验位,1位停止位。
2)数据接收与发送
IOIO提供了uart.getInputStream数据接收和uart.getOutputStream数据发送接口API函数。
另外采用了Java标准的InputStream类和OutputStream类。InputStream是所有输入数据流的父类,它是一个抽象类,定义了所有输入数据流都具有的共通特性,用于输入单个字节或者字节数组。而OutputStream衍生的所有类都拥有基本方法write(),用于输出单个字节或者字节数组。示例代码如下:
InputStream in=uart.getInputStream();’读入一个字节的数据
OutputStream out=uart.getOutputStream(); ‘发送一个字节数据
3)关闭串行口
当完成串行口的发送或接收工作后,退出软件前需要使用uart.close()函数对其进行正确关闭。
4 串口调试助手软件的实际测试
4.1 系统硬件连接
在测试实验中,笔记本电脑端使用了串口调试助手软件串口调试助手SComAssistant;三星N7100 Android手机作为测试用样机,其微型USB接口通过数据线连接到IOIO模块,而IOIO模块通过USB转TTL(UART)数据线和笔记本电脑进行串行通信,详见图4。
图4 Android手机与笔记本电脑间的串行通信实验系统Fig.4 Serial communication between android phone and laptop
4.2 测试内容
测试实验内容重点是串行口的初始化设置、数据的接收和发送。
4.2.1 串行口的初始化设置
主要内容包括发送和接收端管脚定义、波特率、校验位和停止位的设置。
4.2.2 数据的接收和发送
从图5中,手机端串口调试助手自动定时向笔记本电脑发送十六进制数“fd”,而电脑端向手机发送十六进制数“ac”,从实验截图上明显可以看出,通过IOIO模块上的UART串行口,笔记本电脑和Android手机间的串行通信稳定可靠。
经过多次反复的测试与实验表明,以IOIO模块为核心,基于Android手机串口调试助手软件通信正常,尚未发现数据传输错误现象,完全能满足嵌入式系统串口调试的实际需要。
5 结 论
本中讨论了以IOIO模块为核心,基于Android手机平台,采用Java多线程技术,实现了手机串口调试助手软件。实验表明该系统设计方案简单易行,通信稳定可靠,通用性好,具有一定的实际应用价值。
图5 串行口数据接收和发送实验Fig.5 Experiment of RX and TX between serial UARTs
另外IOIO是一个开放的人机交互平台,给Android手机提供了丰富的I/O接口资源,包含了UART、I2C、SPI等模式,能拓展Android手机的应用领域,通过对其进行适当的扩展与延伸,相信在android手机或平板电脑上可以提供更多的个性化创意体验。
[1]张佳进,陈立畅,唐秀英,等.IOIO在Android手机中的应用与研究[J].单片机与嵌入式系统应用,2013,13(2):42-44.ZHANG Jia-jin,CHEN Li-chang,TANG Xiu-ying,et al.Research and application of IOIO in android phone[J].Microcontrollers&Embedded Systems,2013,13(2):42-44.
[2]SparkFun Electronics.IOIO for Android[EB/OL].[20-07-2013].https://www.sparkfun.com/products/10748.
[3]GitHub.Supported Devices[EB/OL].[20-07-2013].https://github.com/ytai/ioio/wiki/Supported-Devices.
[4]Chaudhri R,Brunette W,Goel M,et al.Open data kit sensors:mobile data collection with wired and wireless sensors [C]//In Proc.Of the 2nd ACM Symposium on Computing for Development, MIT,USA,March 2012:1-10.
[5]LIN Cheng-min,LANG Kuo-chen,CHU Yi-lun Chu,et al.An Implementation for Connecting Android Powered Device to External World [C]//The 2nd International Conference on Innovations in Bio-inspired Computing and Applications(BICA 2011), Shenzhen, Guangdong, China, December 2011:303-325.
[6]韩超,梁泉.Android系统原理及开发要点详解[M].北京:电子工业出版社,2010.
[7]陈宏希,邹益民.用Matlabcontrol实现Java与Matlab的混合编程[J].工业仪表与自动化装置,2012(3):27-30.CHEN Hong-xi,ZOU Yi-min.Implementation of the hybrid programming with Java and matlab based on matlabcontrol[J].Industrial Instrumentation&Automation,2012(3):27-30.