基于Android的车联网车载终端的设计

时间:2022-09-06 08:33:00

基于Android的车联网车载终端的设计

【摘 要】介绍了一种基于Android的车联网车载终端的实现方法,其中包括硬件设计、开发环境搭建、Android下Linux C程序的运行环境配置、Android应用与C程序进程间通讯的实现方法。本方法具有开发周期短、开发成本低、用户界面美观友好、稳定可靠等特点。

【关键词】Android 嵌入式 车联网车载终端

1 引言

芯片技术的发展让嵌入式处理器的性能不断提高,当嵌入式处理器的处理能力不再是系统设计的主要问题的时候,良好的用户界面、多媒体支持等渐渐成为人们在嵌入式控制系统设计中考虑的因素。

Android[1]构建于Linux系统之上,而Linux已经在一些苛刻的环境下使用和测试了数十年,被证明是一个非常安全和稳定的系统。Linux可以轻松地移植到各种不同的硬件平台上。Linux的绝大多数底层代码都是用可移植的C代码编写,因此第三方开发者可以将Android移植到很多不同的设备上。

Android主要设计用于便携设备,如智能手机和平板电脑。Android具有完备的网络、图形及多媒体等支持库,符合当今车联网对端系统的要求,加上其具有完善的开发调试环境,极大地方便了开发人员在Android系统中开发应用。

在本文的车载终端中,Android系统板通过串行通讯接口和信号采集模块及GPS模块通讯,采集车辆的状态和位置信息,并通过基于802.11p技术的短距无线通讯模块,与网络中的其它车辆通讯,发送车辆的即时信息给相关车辆,并将实时数据通过LCD显示。

2 硬件总体设计

终端设计基于Android系统板,其主要组成部分为:信号采集模块、GPS模块、音频输入输出模块、以太网模块、LCD、3G模块、短距无线通讯模块、蓝牙模块和Wi-Fi模块。系统硬件框图如图1所示:

其中,Android系统板已经集成了串口、USB、音频输入输出、以太网、LCD、蓝牙、Wi-Fi等与外界通讯的模块,Android系统层对这些模块有完善的支持,这大大简化了车载终端的设计。

信号采集模块[2]使用意法半导体公司生产的STM32F103[3]系列微控制器作为主控模块,主要用于实时采集车辆信息,如速度、ACC、刹车、车辆方向等,并将采集得到的信号处理加工为系统需要的格式,通过事先定义的协议从串口发送到Android系统板。

STM32F103系列微控制器基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核,其增强型系列时钟频率达到72MHz,内置64K到512K的闪存,满足本系统应用需求。另外,STM32F103系列微控制器还有以下特点:具有丰富的外设接口如I2C、USART、SPI、CAN、USB2.0等;ARM Cortex?微控制器提供支持CMSIS[4]的标准外设库;软件接口标准(CMSIS,Cortex Microcontroller Software Interface Standard)是Cortex-M处理器系列的与供应商无关的硬件抽象层,使用CMSIS可以为处理器和外设实现一致且简单的软件接口,从而简化软件的重用、缩短微控制器新开发人员的学习过程,缩短新设备的上市时间。

GPS模块使用Ublox NEO-6M通用定位模块,输出标准报文,通过TTL电平的串行口发送到Android系统板。

3 软件设计

3.1 开发环境搭建

Android系统有多种完善的开发环境,比较常用的是使用Eclipse集成开发环境。Eclipse是著名的跨平台的自由集成开发环境,可以在Windows和Linux操作系统下运行。Eclipse最初主要用于Java语言开发,但通过添加插件的方式可以使Eclipse支持多种不同的开发及调试环境。如CDT插件支持C/C++语言开发、ADT插件支持Android应用程序开发、NDK插件支持Android应用程序的JNI接口的开发等。

本系统开发环境为Centos5.8操作系统(Linux桌面系统的发行版)安装Eclipse集成开发环境,并添加CDT、ADT、NDK等插件。

为了方便Android系统板和开发主机之间的文件复制,需要配置NFS文件系统。NFS是Network File System的简写,NFS允许一个系统在网络上与他人共享目录,通过使用NFS,用户就可以像访问本地文件一样访问远端系统上的文件。这样在开发主机上通过交叉编译环境编译出来的二进制文件就可以直接在Android系统板上运行,就像Android系统板使用本地文件一样,这大大方便了开发调试,节省开发时间。配置NFS需要在开发主机和Android系统板上分别配置。Centos5.8操作系统已经提供了对NFS支持,使用时只需要在/etc/exports文件中加入想要共享的目录及相应的用户权限并启动NFS服务即可,如需要共享/usr/nfs目录的内容,可进行如下步骤:

(1)创建目录/usr/nfs用于保存需要共享的文件。

(2)打开/etc/exports文件,并写入以下配置信息:

/usr/nfs *(rw,sync,no_root_squash)

其中,/usr/nfs表示需要共享的目录,*表示允许所有IP地址访问/usr/nfs。括号中rw参数表示对此目录访问的权限为读/写,如果此参数为ro则表示对此目录的访问权限为只读。参数no_root_squash表示如果用户为root,那么对于这个共享目录来说就具有root权限。

(3)启动NFS服务器,使用命令:

service nfs start

一般情况下,Android的Linux内核配置不支持NFS,因此需要配置Linux内核使其支持NFS,步骤如下:

(1)假设Linux内核目录树下已有正确的默认配置文件.config,在Linux内核树下执行:

#make menuconfig

(2)选择File systemsNetwork File Systems进入NFS配置选项,将NFS client support和NFS client support for NFS version 3设置为“[*]built-in”,操作界面如图2所示:

(3)保存后退出,执行make命令编译Linux内核,将生成的内核映像烧入设备运行。

(4)在Android系统中创建/nfs目录,使用mount命令挂载NFS文件系统。如下:

mount -t nfs -o nolock -o tcp 192.168.0.138:/usr/nfs /nfs

其中,-t后面的参数指定了所要挂载文件系统的类型,在本系统中文件系统的类型为NFS。-o后面的参数为可选项,nolock表示不上锁,tcp表示跟NFS文件服务器通讯时使用TCP方式。指定NFS服务器的IP为192.168.0.138,服务器目录为/usr/nfs,本地挂载点为/nfs目录。

挂载NFS完成后,就可以在Android系统板上的/nfs目录下访问开发主机上共享目录的文件,也可以将Android系统板上的文件复制到开发主机上进行备份。

3.2 运行环境配置

在车载终端软件设计中常常需要使用C/C++语言来进行系统级的调用,但Android因为版权问题未提供标准glibc库,而是使用自己开发的Bionic libc库。这样使用标准方式编译的C/C++代码就不能正常运行在Android环境下。可以通过以下两种方法来解决这个问题:

(1)在交叉编译程序时使用-static参数将动态链接库编译到程序中。在Eclipse集成开发环境下,可通过右键点击想要修改的工程,选择[Properties],在弹出的对话框中选择[C/C++ Build]下的[Settings],然后在[Tool Settings]选择[GCC C Linker]下的[General],将复选框No shared libraries(-static)选中,保存后重新编译程序。

(2)使用ldd命令查看目标程序需要使用哪些动态库,然后将交叉开发工具链中对应的库文件复制到Android系统板的/bin目录下。

3.3 程序设计

车联网终端程序用户界面使用Java语言开发,使用了Android应用程序框架库,运行在Dalvik虚拟机下。底层数据采集和处理使用C语言开发,使用了交叉开发环境提供的标准glibc库,运行在Linux操作系统下。

这样既充分利用了Android美观的用户操作界面、完善的多媒体支持,又具有C语言灵活、直接操作硬件的能力。由于终端的用户界面和数据的处理运行在不同的运行环境且处于不同的进程,两个进程之间的数据通讯就成了必须考虑的问题之一。在Linux下可供选择的进程间通讯方式有很多,如命名管道、System V IPC[5](信号量、共享内存、消息队列)、套接字等。但是Android从系统安全角度考虑,不提供对System V IPC的支持,而相对于命名管道,套接字通讯方式在C语言和Java语言上都有很好的支持,使用起来也更方便,因此在本系统中使用套接字作为进程间通讯的方式。在本系统中,C程序作为Socket通讯的服务器端,Android应用程序作为客户端。车联网程序示意图如图3所示。

其中,数据采集模块实时采集车辆的信息,如ACC、油路状态、电路状态、车门状态、发动机状态、车辆速度、CAN等基本信息,并通过外接陀螺仪和疲劳驾驶检测模块采集车辆安全相关的信息,如车辆碰撞、车辆侧翻、司机疲劳驾驶等。

C程序的数据处理模块负责接收GPS模块发送的位置信息和数据采集模块发送过来的车辆信息,经过处理后通过短距无线通讯模块发送给其它车辆,短距无线通讯模块也可以接收其它车辆发送过来的信息,使车辆能在一定范围内共享信息。另外此模块还是Socket通讯的服务器端,接收Android应用程序的Socket请求,在建立通讯连接后也发送车辆数据到Android应用程序。

Android应用程序的数据处理模块负责接收和处理来自Socket的数据并将数据发送给界面显示模块,显示给用户。

用户界面也能与用户交互,接收用户的命令,通过Socket将命令发送给C程序,C程序再通过短距无线通讯将命令发送到其它车辆。例如车与车之间互相发送短信、语音或视频。

4 结束语

在《交通运输“十二五”发展规划》中,智能交通将成为国内未来交通运输业优先发展的主题,而智能车载终端是智能交通的重要组成部分,本文基于Android的车载终端,具有开发周期短、开发成本低、操作界面美观友好等特点。经过实际测试,该系统车载终端运行稳定可靠,具有较高的应用价值。

参考文献:

[1] Gargenta M. Learning Android[M]. 李亚舟,任中龙,杜钢,译. 北京: 电子工业出版社, 2012.

[2] 李朝青. 单片机原理及接口技术[M]. 3版. 北京: 北京航空航天大学出版社, 2005.

[3] STMicroelectronics. STM32F103CDE Performance Line Datasheet[Z]. ST Co.Ltd, 2008.

[4] ARM. Cortex Microcontroller Software Interface Standard[Z]. ARM Ltd, 2010.

[5] Neil Matthew, Richard Stones. Linux 程序设计[M]. 陈健,宋健健,译. 北京: 人民邮电出版社, 2010.

上一篇:RFID技术在室内覆盖系统中的应用研究 下一篇:直流电源独立远供系统在移动通信基站中的应用...