王雅志 , 王绍源
( 湖南大学 电气与信息工程学院 , 湖南 长沙 410082)
摘要 : 介绍了一种基于蓝牙技术的智能家居网关中数据采集处理系统的实现方案 , 该系统以 ARM - Linux 嵌入式系统为开发平台 ; 首先讨论了 U SB 蓝牙驱动在 ARM9 ( S3C2410) 上的实现和蓝牙协议栈 BlueZ 的移植 ; 针对家庭环境数据流量较小的特点 , 采用蓝牙串 口操作模式 ( SPP) 建立无线虚拟串口 , 实现了家庭网关与家居设备之间的无线通信 , 应用多线程技术实现了家居网关对多个节点设备 的实时监控 ; 最后 , 详细介绍了一种数据包优先级处理算法 , 实现了对数据包的有效处理 , 提高了对家居设备监控的效率 。 关键词 : 数据采集处理 ; ARM9 ; 蓝牙 ; 无线通信
Design and Implementation of Home G way Data Collecting and ate Processing System Based on Bluetooth Technology
Wang Yazhi , Wang Shaoyuan
(College of Elect rical and Info rmation Engineering , Hunan U niversity , Changsha 410082 , China)
per , t his system take ARM - Linux embedded system as develop ment platform. Firstly , t he realization of U SB Bluetoot h driver in ARM9 Abstract : A solution of data collecting and p rocessing system in intelligent home based on bluetoot h technology is int roduced in t his pa2 Key words : data collecting and p rocessing ; ARM9 ; bluetoot h ; wireless co mmunication
( S3C2410) and t he porting of t he BlueZ are discussed respectively. Aim at t he feat ure t hat t he data flow is relatively smaller in t he home ,
Serial Port Profile ( SPP) is adopted to establish wireless virt ual serial port , so t he communiation bet ween gateway and home appliances is
proved t he efficiency of monitoring to t he home appliances.
0 引言
随着现代无线通信技术的发展 , 人们对家居的舒适程度和 智能化程度要求日益提高 , 传统家用电器已经无法满足家庭的 需要 。智能家居网络将计算机数字化技术和现代通信技术融入 传统的家用电器中 , 使之智能化并具有网络信息终端主动发 布 、获取和处理信息等功能 。将蓝牙技术应用在智能家居网络 中 , 除了蓝牙技术自身的特点 [1 ] : 蓝牙使用于短距离范围替代 联机 ; 蓝牙的抗干扰能力非常强 , 由于采用快速跳频 , 可以使 系统更稳定 ; 蓝牙具有连接的通用性 、标准的开放性以及强大 的扩展性 , 这些特点使得蓝牙技术更适合应用在智能家居网络 中 。此外 , 采用蓝牙技术 , 还具有两方面的优点 : (1) 无线化 。即不消耗任何的空间资源 , 将嵌入式系统和 无线蓝牙模块通过 U SB/ RS - 232 连接 , 即可对智能家居设备 实现一对多的双工无线网络互动 ; ( 2) 网络化 。即通过无线蓝牙模块以及 Internet 实现智能 家居设备的同步控制 , 实现网络可视化 [2 ] 。 基于蓝牙技术的家庭网关是一个具备蓝牙无线通信能力的 嵌入式设备 , 是专用的信息处理平台 , 它是智能家居网络中的 核心部分 , 主要完成家庭内部网络各种不同通信协议之间的转 换 , 以及同外部通信网络之间的数据交换功能 , 还负责家居设
收稿日期 :2009 - 09 - 14 ; 修回日期 :2009 - 10 - 27 。 入式系统与应用方向的研究 。
作者简介 : 王雅志 (1984 - ) , 男 , 甘肃人 , 硕士研究生 , 主要从事嵌
established , and t he real - time monitoring of ho me get way to ot her appliances is realized by t he utilization of multi - t hread technique. Fi2 nally , a kind of data packet priorit y p rocess algorit hm is f ully int roduced , which make t he packet be p rocessed efficiently , and it also im2
备的管理和控制 , 并通过 Internet 实现对家居设备的远程访 问 , 包括状态查询和操作控制等 。蓝牙技术是开放式标准 , 嵌 入式 Linux 是开放式的源码系统 , 本文以蓝牙技术为基础 , 将 蓝牙 BlueZ 协议栈移植到 Linux A RM 平台 , 设计实现了一种 智能家居网关中数据采集处理系统 。
1 系统的结构与工作原理
11 1 系统结构
基于蓝牙的智能家居网关中数据采集处理系统的核心是基 于 A RM920 T 内核的微处理器 S3C2410 。通过微控制单元外扩 存储器 ( Flash/ SDRAM) 、蓝牙模块 、液晶显示屏 、小键盘和 以太网接口等构成了整个系统 , 如图 1 所示 。家庭网关通过蓝 牙技术将智能家居设备组成一个蓝牙微微网 ( Pico net ) 。每个 智能家居设备从节点与家庭网关之间 , 通过蓝牙技术进行无线 通信 。其中智能家居节点已集成了传感器 、微处理器和无线蓝 牙接口 , 分别负责数据采集 、数据处理 、数据传输和接收 。家 庭网关作为微微网的主设备 , 负责对每个从节点的管理 , 接收 节点发来的数据信息 , 并对这些数据进行分析 、处理和显示 , 同时还负责向节点发送控制信息 。通过 Et hernet 模块的远程 控制指令可以实现对智能设备的远程访问和控制 。在家庭内还 可以通过 L CD/ 小键盘来控制和管理智能家居设备 。 11 2 工作原理 蓝牙网络具有 Ad hoc 的特性 , 各个设备可以方便地进入 和离开网络 , 智能设备从节点散布在指定的蓝牙通信范围内 , 通过自组网方式构成网络 , 整个智能家庭网络采用了星型拓扑
・ 712 ・
计算机测量与控制
第 18 卷
图1 系统结构框图
结构 , 即所有的智能设备从节点直接与家庭网关进行通信 , 而 节点之间不需要互相通信 , 这样可以实现家庭网关对各个节点 实时访问和控制 。集成在智能设备节点中的传感器将采集到的 数据信息按照已经设置好的格式进行打包 , 再通过蓝牙接口传 送给家庭网关 。家庭网关对各个节点采集到的数据信息进行集 中分析 、处理和显示 。当通过 Internet 对智能家居设备进行远 程控制时 , 家庭网关通过 Et hernet 接口接收到用户通过 Inter2
net 发送的各种指令 , 然后将控制信息按照已经设置的格式打 包 , 最后通过蓝牙接口发送给智能家居设备 。
2 系统的实现
随着内核进行编译的 , 所以在编译内核的时候应该根据所设计 系统的需要对蓝牙的相关内容做一定的配置选择 。在 PC 宿主 机上 , 使用 make menuco nfig 命令打开图形配置工具 , 进行内 核配置 。在配置过程中 , 进入 Bluetoot h suppo rt 选项 , 选择
COMM p rotocol support 、RFCOMM T T Y suppo rt 这几项 , 使
Bluetoot h subsystem support 、L2CA P p rotocol suppo rt 、RF2
内核支持 BlueZ 协议栈 、L2CA P 和 RFCOMM 协议 。然后进 入 Bluetoot h device drivers , 选择 HCI U SB driver , 使内核支
持 BlueZ 硬件 。在宿主机上 , 指定交叉编译器 , 使用 make zImage 命令 , 编译所定制的内核映像文件以供烧写 。
21 2 Linux 下蓝牙协议栈 BlueZ 的移植 BlueZ 的移植 [3 ] , 主要包括 Linux 蓝牙应用程序库 bluez -
libs 的移植和 Linux 蓝牙主工具集 bluez - utiles 的移植 。下载
BlueZ 的工具集就安装到指定的目录下 。
基础库 bluez - libs - 21 251 tar1 gz , 用 tar 命 令 解 压 后 , 进 入 bluez - libs - 21 25/ 目录下 , 首先用运行 1 / co nigure 命令 , 自 动配置成功后 , 将在当前目录下生成 makefile 文件 , 以及其它 用 make 和 make install 完成安装 , 然后用 In 命令为蓝牙库建 立动态链接 , 完成以上步骤后 , BlueZ 的基础库就被安装到了 环境变量 p refix 所指定的目录下 。下载 、安装 BlueZ 工具集 完成内核的配置编译和 BlueZ 软件包的安装后 , 将宿主机
的安装配置文件 。通过在命令行设置 p refix , CC 等环境变量 ,
21 1 蓝牙模块驱动
在 Linux 系统下 , 蓝牙的驱动是放置在内核 ( kernel ) 中 ,
bluez - utils - 21 251 tar1 gz , 其 步 骤 与 基 础库 类 似 , 完 成 后 ,
在蓝牙家庭网关系统的设计中 , 要实现对多路通道即多个 蓝牙设备实时地进行访问和监控 , 往往需要实现循环扫描多路 通道 , 接收各个节点发来的数据信息 , 以及发送数据对各个节 点进行访问和监控 。因此 , 在蓝牙设备正常工作的前提下 , 为 达到实时 、高速和数据同步的目的 , 采用了多线程技术和条件 变量机制 。主线程负责实时接收各个节点设备发来的数据信 息 , 并将数据存储到一个共享的数据区中 。辅助线程则负责数 据的处理 , 包括数据的存储 , 数据的页面显示 。条件变量是 Linux 下线程间的一种同步机制 , 它允许线程等待某些事件的 发生 。几个线程可以等待同一个条件变量直到其它线程激活该
与目标板通过交叉网线连接 , 通过 tftp 将内核映像 、文件系统 以及 BlueZ 软件包移植到目标板上 。完成后 , 重启目标板后 , 系统首先会执行/ etc/ rc1 d/ init1 d 下的脚本文件 initBlueZ , 加 载蓝牙协议栈各模块 , 启动 hcid 后台进程和 sdpd 后台进程 。 用 hcico nfig ∃ a 命令查看蓝牙模块的配置情况 , 以验证 U SB [4 蓝牙驱动已经安装成功 。 ] 21 3 蓝牙无线通信的建立 针对家庭环境中数据流量较小的特点 , 在系统中 , 采用蓝 牙串口操作模式 [ 1 ] ( Serial Po rt Profile) , 它定义了使用蓝牙设 备模拟 RS232 串口通信的协议和规范 。图 2 给出了系统使用 的蓝牙协议栈及其连接过程 。其中设备 A 和设备 B 分别对应 连接的发起方 ( Initiator) 和连接的接收方 ( Acceptor ) 。串口 仿真实体对上层标准串口应用提供一个 Linux 所能识别的虚拟 串口 , 在内部完成从 Linux 平台的串行通信到蓝牙通信的映 射 [5 ] 。在两个设备之间建立虚拟串口 , 任何现成的应用都可以 在两个设备上运行 。当蓝牙设备完成虚拟串口上的链接 , 我们 就可以使用标准的方式进行串口编程 , 由于之前已完成对蓝牙 模块驱动的配置 , 所以可以将蓝牙设备作为文件进行操作 , 系 统中程序利用 Linux A PI 函数实现了对蓝牙设备的操作 , 操作 的一般步骤如下 : [6 ] ( 1) 打开蓝牙端口 。调用函数 open ( “dev/ com1 ” O _ , RDWR) 打开蓝牙设备对应的设备文件/ dev/ com1 , 返回一个 文件描述字 fd , 用于串口的设置 , 以及设备的读写和关闭 ; (2) 设置串口参数 。主要对波特率 、数据位 、停止位等参 数的设置 。最后调用 tcsetatt r () 函数保存设置 ; ( 3) 对蓝牙设备进行读写 。使用 read () 方式进行蓝牙端 口的读数据 , 使用 write () 方式进行蓝牙端口的写数据 ; ( 4) 关闭蓝牙端口 , 使用 clo se () 函数 。
图2 蓝牙协议栈与连接过程
21 4 蓝牙无线通信中数据的自动收发 [ 7 ]
第3期
王雅志 , 等 : 基于蓝牙的家居网关数据采集处理系统的设计与实现
31 2 算法的软件实现
・ 713 ・
条件变量为止 , 这类似于发送一个通知 , 此外 , 条件变量的引 入可以减小应用程序对 CPU 时间的消耗 , 这对资源有限的嵌 入式系统来说 , 有重要的实际意义 。具体到本系统 , 即主线程 在接受到数据并存储到共享的数据区后 , 就会向辅助线程发送 一个类似于通知的信号 , 辅助线程在接受到信号后就会被激 活 , 然后从共享数据区中读取数据 , 进行相应的处理 。
3 包处理关键技术的实现
家庭网关能够实时接收到各个节点发来的数据 , 并进行相 应的处理 , 这对了解整个家庭环境的状态以便采取相应的措施 有着重要的意义 。系统设计中 , 利用多线程技术 , 主线程将接 收的数据包先存储到共享的数据区中 , 辅助线程从数据区中取 数据进行处理和显示 , 条件变量机制的引入保证了线程间的协 调同步 。在整个家庭环境中 , 家庭网关可能同时收到多个节点 发来的数据包 , 或者数据区中还有没处理完的数据包 , 这时可 能又会收到新的数据包 , 因此 , 对数据包的处理就会发生延 时 。对于一些数据包类型 , 它们的延时处理并不会造成什么影 响 , 例如电视机 、DVD 或者空调等设备节点发来的数据包 , 但是 , 还有一些数据包的延时处理可能会造成很严重的后果 , 比如 , 天然气或者火灾报警设备发来的数据包 , 对这些数据包 如果不及时进行处理 , 可能会造成严重的后果 。 为了解决上述问题 , 在程序设计时 , 我们采用一种数据包 优先级算法 。如图 3 所示 , 主线程接收各个节点发来的数据 包 , 然后将数据包存储到一个链表中 , 而辅助线程则从链表中 取数据 , 其中 headList 指向链表的表头 , lastList 指向表尾 。 链表中节点的存放顺序是按照每个数据包的优先级来排列的 , 优先级是节点设备发送数据
包时设置好的 , 表 1 显示了 Data 的数据结构 , Ho meID 表示家居设备的 ID 号 , 它唯一标识了 一个设备 。Data Info 表示具体的数据信息 。 Ho mePrio r 表示数 据包的优先级 , 它的取值范围为 0 ~ 7 的整数 , 其中 0 的优先 级最低 , 7 的优先级最高 , 随着数字的增大 , 优先级也随之增 大 。主线程在接收到数据包后 , 首先获取优先级 , 然后再根据 优先级算法 , 将数据包插入到链表中 。
31 1 数据包优先级处理算法
HomeID 2 个字节
对数据包处理步骤的描述如图 4 所示 。为了保护线程代码 中共享存储区数据的完整性 , 采用 Linux 下互斥锁机制 , 调用 函数 pt hread _ mutex _ lock () 对 “关键”代码进行加锁 , 这 样可以保证在某一时间内 , 只有一个线程能执行 “关键”代 码 , 所谓 “关键”代码是用于修改共享存储区数据的 , 从而保 证数据的完整性 。处理程序实现过程 : 判断存储区是否为空 , 如果为空将数据包插入到链表头 , 否则读取数据包的优先级 ; 如果优先级等于 0 , 则表明其优先级别最低 , 因此直接将包插 入到链表尾 ; 如果优先级等于 7 , 表明优先级别最高 , 则直接 插入到表头 。如果两者都不是就从表头开始 , 与链表中每个结 点的优先级别依次进行比较 , 并插入到合适的位置 , 将数据包 存储到链表中后 , 调用 pt hread _ mutex _ unlock () 函数为互 斥锁解锁 。最后调用 pt hread _ cond _ signal () 函数 , 通知辅 助线程从共享存储区中读取数据 , 并进行相应的处理和显示 。
图4 数据包处理算法的实现步骤
4 结论
图3 数据包处理的过程 表1 Data 的数据结构
dataInfo HomePrior 1 个字长
N 个字节
采用蓝牙技术中的 RFCOMM 协议建立无线虚拟串口 , 并 在此基础上设计实现了一种智能家居网关中数据采集处理系 统 。系统中 , 采用多线程技术 , 实现了对多个设备节点的实时 监控 。此外 , 在程序设计中 , 还采用了条件变量和互斥锁机 制 , 实现了线程间的同步以及保证了存储区数据的完整性 。在 对数据包的处理中 , 采用了一种包优先级处理算法 , 通过对数 据包设置优先级 , 家庭网关可以提前处理一些紧急信息 , 因
・ 714 ・
计算机测量与控制
第 18 卷
此 , 提高了对家居设备监控的效率 。 整个系统采用蓝牙无线通信 , 很好地克服了有线方式的连 线烦琐 、安装复杂和维护困难等缺点 。由于现代家庭环境的进 一步复杂化 , 蓝牙通信的质量也受到了其它因素的影响 , 比 如 : 室内空间的大小 、家居设备中传感器放置位置 、家庭网关 的放置位置以及诸如微波炉等其它电磁设备的干扰等 , 关于此 类问题也需要进一步的研究 。
参考文献 :
[ 1 ] 金 纯 , 林金朝 , 万宝红 . 蓝牙协议及其源代码分析 [ M ] . 北
[ 2 ] 麦汉荣 , 廖劲光 , 韩 , 等 . 基于蓝牙技术的网络空调程控系 波
统的设计与实现 [J ] . 电子技术应用 , 2008 , (1) : 85 - 89.
[ 3 ] 欧阳鑫 , 于红岩 , 吕 . 蓝牙协议栈 BlueZ 的移植与开发 [J ] . 杨
微计算机信息 , 2007 , 23 (2) : 221 - 222.
[ 4 ] 陈 , 秦贵和 , 徐华中 , 等 . ARM9 嵌入式技术及 Linux 高级 赜
实践教程 [ M ] . 北京 : 北京航天行空出版社 , 2005.
[ 5 ] 周敬利 , 陈 , 余胜生 . 蓝牙仿真串口的研究与实现 [J ] . 计 纪
算机应用 , 2004 , 24 (1) : 28 - 30.
[ 6 ] RO GER W. Linux Unwired [ M ] . O’ Reilly , 2004. [ 7 ] 黄志伟 , 唐 , 王 . 嵌入式智能家居系统网关无线收发模 冬 彦
京 : 国防工业出版社 , 2006.
块电路设计 [J ] . 计算机测量与控制 , 2004 , 12 (6) : 572 - 574.
( 上接第 710 页) 练系统主机与飞控地面站之间的网络通信 。
图4 网络通信流程图
4 综合评价模块实现
本软件可以对操作手进行很多科目的训练评价 , 包括手控飞 行训练评价、程控飞行训练评价、手控压航线评价、一级故障处 理训练评价、 二级故障处理训练评价和三级故障处理训练评价等。 综合评价模块设计的基本思想就是与标准参数比较。每个科目训 练结束后都能得到一套参数 , 通过与对应科目的一套标准参数对 比得到最终的训练结果。具体程序流程如图 5 所示。
图5 评价软件流程图
H GLOBAL hg = LoadResource ( h , hr) ; L PCS TR lp = (L PCSTR) LockResource ( hg) ; sndPlaySound (lp , SND _ MEMOR Y | SND _ AS YNC | SND _ NODEFAUL T) ; 最 后 在 故 障 代 码 段 调 用 这 个 声 音 函 数
即可 。
6 结束语
通过系统的实际联调测试 , 该套模拟训练系统软件能够达 到预期的功能和要求的稳定性 , 同时也具有较强的实时性 , 并 且由于整个系统是基于 VC + + 环境开发的可视化软件 , 具有 良好的可扩展性 。
参考文献 :
[ 1 ] 欧干良 , 陈 . 无人机飞行控制系统模拟器设计 [J ] . 计算机 欣
5 故障模拟模块实现
故障模拟模块是由故障指令发送 、模拟故障和故障回报组 成的 。 点击故障指令发送界面的故障模拟按钮后 , 故障指令代码 就会通过串口发送给模型机 , 模型机接收到指令后就会模拟对 应的故障 , 这时飞控主机就会检测到故障 , 并且把故障码下传 到飞控地面站 , 然后故障码就会通过网络发送到模拟训练系统 主机 , 当模拟训练系统接收到故障回报后 , 故障指令界面上对 应的故障灯就会闪烁并且发出报警声音 。 故障灯闪烁通过设置位图 (B ITMA P) 的方式实现的 , 当 故障出现时 , 设置灯为红色 —Set Ico n ( IDB _ R ED) ; 运行正 常时 , 设置灯为绿色 —Set Icon ( IDB _ BL U E) 。故障声音添加 方法是 : 首先在资源视图中添加以 wav 为后缀的报警声音文 件 , 然后定义一个声音函数 , 其中关键代码如下 :
HINS TANCE h = Af x Get Instance Handle () ; HRSRC hr = FindResource ( h , MA KEIN TR ESOU RCE ( IDR _ WARN IN G) , _ T (" WAV E" ) ) ;
测量与控制 , 2006 , 14 (3) : 339 - 342.
[ 2 ] Huang Yong ; Wang Yongsheng ; Li Xiangpeng. System of simula2 tion t raining for unmanned aircraft [ J ] . Aero space and Elect ronic Systems Magazine , IEEE , 1998 , 13 (12) : 11 - 13. [ 3 ] 李明柱 , 单 . Visual C + + 最新编程实践与技巧 [ M ] . 北京 : 肃
北京航空航天出版社 , 2000. 社 , 2004.
[ 4 ] 杨永国 . Visual C + + 6. 0 实用教程 [ M ] . 北京 : 清华大学出版 [ 5 ] 龚建伟 , 熊光明 . VC + + / Turbo C — 串口通信编程实践 [ M ] . 北
京 : 电子工业出版社 , 2007.