手机端
or

欢迎您加入我爱方案网QQ群

1.智能产品外包服务群(311606115)
2.嵌入式项目开发群(491609563)

基于蓝牙的家居网关数据采集处理系统的设计与实现

王雅志; 王绍源| 数据采集处理,ARM9,蓝牙,无线通信| 2010-11-29
1242 收藏
分享到: 
每日精选
热门推荐

【中心议题】

  • 介绍了一种基于蓝牙技术的智能家居网关中数据采集处理系统的实现方案
  • 详细介绍了一种数据包优先级处理算法

【解决方案】

  • ARM-Linux嵌入式系统为开发平台
  • 采用蓝牙串口操作模式(SPP)建立无线虚拟串口

0 引言

随着现代无线通信技术的发展,人们对家居的舒适程度和智能化程度要求日益提高,传统家用电器已经无法满足家庭的需要。智能家居网络将计算机数字化技术和现代通信技术融入传统的家用电器中,使之智能化并具有网络信息终端主动发布、获取和处理信息等功能。将蓝牙技术应用在智能家居网络中,除了蓝牙技术自身的特点:蓝牙使用于短距离范围替代联机;蓝牙的抗干扰能力非常强,由于采用快速跳频,可以使系统更稳定;蓝牙具有连接的通用性、标准的开放性以及强大的扩展性,这些特点使得蓝牙技术更适合应用在智能家居网络中。此外,采用蓝牙技术,还具有两方面的优点:

(1)无线化。即不消耗任何的空间资源,将嵌入式系统和无线蓝牙模块通过USB/RS-232连接,即可对智能家居设备实现一对多的双工无线网络互动;

(2)网络化。即通过无线蓝牙模块以及Internet实现智能家居设备的同步控制,实现网络可视化。

基于蓝牙技术的家庭网关是一个具备蓝牙无线通信能力的嵌入式设备,是专用的信息处理平台,它是智能家居网络中的核心部分,主要完成家庭内部网络各种不同通信协议之间的转换,以及同外部通信网络之间的数据交换功能,还负责家居设备的管理和控制,并通过Internet实现对家居设备的远程访问,包括状态查询和操作控制等。蓝牙技术是开放式标准,嵌入式Linux是开放式的源码系统,本文以蓝牙技术为基础,将蓝牙BlueZ协议栈移植到Linux ARM平台,设计实现了一种智能家居网关中数据采集处理系统。

1 系统的结构与工作原理

1·1 系统结构

基于蓝牙的智能家居网关中数据采集处理系统的核心是基于ARM920T内核的微处理器S3C2410。通过微控制单元外扩存储器(Flash/SDRAM)、蓝牙模块、液晶显示屏、小键盘和以太网接口等构成了整个系统,如图1所示。家庭网关通过蓝牙技术将智能家居设备组成一个蓝牙微微网(Piconet)。每个智能家居设备从节点与家庭网关之间,通过蓝牙技术进行无线通信。其中智能家居节点已集成了传感器、微处理器和无线蓝牙接口,分别负责数据采集、数据处理、数据传输和接收。家庭网关作为微微网的主设备,负责对每个从节点的管理,接收节点发来的数据信息,并对这些数据进行分析、处理和显示,同时还负责向节点发送控制信息。通过Ethernet模块的远程控制指令可以实现对智能设备的远程访问和控制。在家庭内还可以通过LCD/小键盘来控制和管理智能家居设备。

 

1·2 工作原理

蓝牙网络具有Ad hoc的特性,各个设备可以方便地进入和离开网络,智能设备从节点散布在指定的蓝牙通信范围内,通过自组网方式构成网络,整个智能家庭网络采用了星型拓扑结构,即所有的智能设备从节点直接与家庭网关进行通信,而节点之间不需要互相通信,这样可以实现家庭网关对各个节点实时访问和控制。集成在智能设备节点中的传感器将采集到的数据信息按照已经设置好的格式进行打包,再通过蓝牙接口传送给家庭网关。家庭网关对各个节点采集到的数据信息进行集中分析、处理和显示。当通过Internet对智能家居设备进行远程控制时,家庭网关通过Ethernet接口接收到用户通过Internet发送的各种指令,然后将控制信息按照已经设置的格式打包,最后通过蓝牙接口发送给智能家居设备。

2 系统的实现

2·1 蓝牙模块驱动

Linux系统下,蓝牙的驱动是放置在内核(kernel),随着内核进行编译的,所以在编译内核的时候应该根据所设计系统的需要对蓝牙的相关内容做一定的配置选择。在PC宿主机上,使用make menuconfig命令打开图形配置工具,进行内核配置。在配置过程中,进入Bluetooth support选项,选择Bluetooth subsystem supportL2CAP protocol supportRFCOMM protocol supportRFCOMM TTY support这几项,使内核支持BlueZ协议栈、L2CAPRFCOMM协议。然后进入Bluetooth device drivers,选择HCI USB driver,使内核支持BlueZ硬件。在宿主机上,指定交叉编译器,使用makezImage命令,编译所定制的内核映像文件以供烧写。

 

2·2 Linux下蓝牙协议栈BlueZ的移植

BlueZ的移植,主要包括Linux蓝牙应用程序库bluezlibs的移植和Linux蓝牙主工具集bluez-utiles的移植。下载基础库bluez-libs-2·25·tar·gz,tar命令解压后,进入bluez-libs-2·25/目录下,首先用运行·/conigure命令,自动配置成功后,将在当前目录下生成makefile文件,以及其它的安装配置文件。通过在命令行设置prefix, CC等环境变量,makemake install完成安装,然后用In命令为蓝牙库建立动态链接,完成以上步骤后, BlueZ的基础库就被安装到了环境变量prefix所指定的目录下。下载、安装BlueZ工具集bluez-utils-2·25·tar·gz,其步骤与基础库类似,完成后,BlueZ的工具集就安装到指定的目录下。

完成内核的配置编译和BlueZ软件包的安装后,将宿主机与目标板通过交叉网线连接,通过tftp将内核映像、文件系统以及BlueZ软件包移植到目标板上。完成后,重启目标板后,系统首先会执行/etc/rc·d/init·d下的脚本文件initBlueZ,加载蓝牙协议栈各模块,启动hcid后台进程和sdpd后台进程。

hciconfig?a命令查看蓝牙模块的配置情况,以验证USB蓝牙驱动已经安装成功。

2·3 蓝牙无线通信的建立

针对家庭环境中数据流量较小的特点,在系统中,采用蓝牙串口操作模式 (Serial Port Profile),它定义了使用蓝牙设备模拟RS232串口通信的协议和规范。图2给出了系统使用的蓝牙协议栈及其连接过程。其中设备A和设备B分别对应连接的发起方(Initiator)和连接的接收方(Acceptor)。串口仿真实体对上层标准串口应用提供一个Linux所能识别的虚拟串口,在内部完成从Linux平台的串行通信到蓝牙通信的映射。在两个设备之间建立虚拟串口,任何现成的应用都可以在两个设备上运行。当蓝牙设备完成虚拟串口上的链接,我们就可以使用标准的方式进行串口编程,由于之前已完成对蓝牙模块驱动的配置,所以可以将蓝牙设备作为文件进行操作,系统中程序利用Linux API函数实现了对蓝牙设备的操作,操作的一般步骤如下:

(1)打开蓝牙端口。调用函数open (dev/com1, O _RDWR)打开蓝牙设备对应的设备文件/dev/com1,返回一个文件描述字fd,用于串口的设置,以及设备的读写和关闭;

(2)设置串口参数。主要对波特率、数据位、停止位等参数的设置。最后调用tcsetattr ()函数保存设置;

(3)对蓝牙设备进行读写。使用read ()方式进行蓝牙端口的读数据,使用write ()方式进行蓝牙端口的写数据;

(4)关闭蓝牙端口,使用close ()函数。

 

2·4 蓝牙无线通信中数据的自动收发

在蓝牙家庭网关系统的设计中,要实现对多路通道即多个蓝牙设备实时地进行访问和监控,往往需要实现循环扫描多路通道,接收各个节点发来的数据信息,以及发送数据对各个节点进行访问和监控。因此,在蓝牙设备正常工作的前提下,为达到实时、高速和数据同步的目的,采用了多线程技术和条件变量机制。主线程负责实时接收各个节点设备发来的数据信息,并将数据存储到一个共享的数据区中。辅助线程则负责数据的处理,包括数据的存储,数据的页面显示。条件变量是Linux下线程间的一种同步机制,它允许线程等待某些事件的发生。几个线程可以等待同一个条件变量直到其它线程激活该条件变量为止,这类似于发送一个通知,此外,条件变量的引入可以减小应用程序对CPU时间的消耗,这对资源有限的嵌入式系统来说,有重要的实际意义。具体到本系统,即主线程在接受到数据并存储到共享的数据区后,就会向辅助线程发送一个类似于通知的信号,辅助线程在接受到信号后就会被激活,然后从共享数据区中读取数据,进行相应的处理。

3 包处理关键技术的实现

3·1 数据包优先级处理算法

家庭网关能够实时接收到各个节点发来的数据,并进行相应的处理,这对了解整个家庭环境的状态以便采取相应的措施有着重要的意义。系统设计中,利用多线程技术,主线程将接收的数据包先存储到共享的数据区中,辅助线程从数据区中取数据进行处理和显示,条件变量机制的引入保证了线程间的协调同步。在整个家庭环境中,家庭网关可能同时收到多个节点发来的数据包,或者数据区中还有没处理完的数据包,这时可能又会收到新的数据包,因此,对数据包的处理就会发生延时。对于一些数据包类型,它们的延时处理并不会造成什么影响,例如电视机、DVD或者空调等设备节点发来的数据包,但是,还有一些数据包的延时处理可能会造成很严重的后果,比如,天然气或者火灾报警设备发来的数据包,对这些数据包如果不及时进行处理,可能会造成严重的后果。

为了解决上述问题,在程序设计时,我们采用一种数据包优先级算法。如图3所示,主线程接收各个节点发来的数据包,然后将数据包存储到一个链表中,而辅助线程则从链表中取数据,其中headList指向链表的表头, lastList指向表尾。

链表中节点的存放顺序是按照每个数据包的优先级来排列的,优先级是节点设备发送数据包时设置好的,1显示了Data的数据结构, HomeID表示家居设备的ID,它唯一标识了一个设备。DataInfo表示具体的数据信息。HomePrior表示数据包的优先级,它的取值范围为0~7的整数,其中0的优先级最低, 7的优先级最高,随着数字的增大,优先级也随之增大。主线程在接收到数据包后,首先获取优先级,然后再根据优先级算法,将数据包插入到链表中。

 

3·2 算法的软件实现

对数据包处理步骤的描述如图4所示。为了保护线程代码中共享存储区数据的完整性,采用Linux下互斥锁机制,调用函数pthread _ mutex _ lock ()对“关键”代码进行加锁,这样可以保证在某一时间内,只有一个线程能执行“关键”代码,所谓“关键”代码是用于修改共享存储区数据的,从而保证数据的完整性。处理程序实现过程:判断存储区是否为空,如果为空将数据包插入到链表头,否则读取数据包的优先级;如果优先级等于0,则表明其优先级别最低,因此直接将包插入到链表尾;如果优先级等于7,表明优先级别最高,则直接插入到表头。如果两者都不是就从表头开始,与链表中每个结点的优先级别依次进行比较,并插入到合适的位置,将数据包存储到链表中后,调用pthread _ mutex _ unlock ()函数为互斥锁解锁。最后调用pthread _ cond _ signal ()函数,通知辅助线程从共享存储区中读取数据,并进行相应的处理和显示。

4 结论

采用蓝牙技术中的RFCOMM协议建立无线虚拟串口,并在此基础上设计实现了一种智能家居网关中数据采集处理系统。系统中,采用多线程技术,实现了对多个设备节点的实时监控。此外,在程序设计中,还采用了条件变量和互斥锁机制,实现了线程间的同步以及保证了存储区数据的完整性。在对数据包的处理中,采用了一种包优先级处理算法,通过对数据包设置优先级,家庭网关可以提前处理一些紧急信息,因此,提高了对家居设备监控的效率。

整个系统采用蓝牙无线通信,很好地克服了有线方式的连线烦琐、安装复杂和维护困难等缺点。由于现代家庭环境的进一步复杂化,蓝牙通信的质量也受到了其它因素的影响,比如:室内空间的大小、家居设备中传感器放置位置、家庭网关的放置位置以及诸如微波炉等其它电磁设备的干扰等,关于此类问题也需要进一步的研究。

深圳市中电网络技术有限公司 Copyright© www.52solution.com 粤ICP备10202284号