4.2蓝牙设备发现与连接实现
实现基于微软的蓝牙驱动,开发简单。通过使用Socket实现通信连接。
发现设备需要用到三个Winsock的API,分别是WSALookupServiceBegin、WSALookupServiceNext和WSALookupServiceEnd。头文件为Winsock2.h,库文件为Ws2_32.lib。
使用Socket设备发现的代码如下:
WSALookupServiceBegin(&querySet,LUP_CONTAINERS,&hLookup);WSALookupServiceNext(hLookup,flags,&dwSize,pwsaResults)WSALookupServiceEnd(hLookup);
利用pwsaResults返回的蓝牙物理地址与GUID做为socket连接参数,可与目的设备进行连接。代码如下:
SOCKETm_socketClient=socket(AF_BT,SOCK_STREAM,
BTHPROTO_RFCOMM);connect(m_socketClient,(SOCKADDR*)&sa,sizeof(sa))进行设备连接。连接成功后,可用下列代码进行数据收发:
recv(p->m_socketClient,buf,1024,0);send(m_socketClient,(char*)buf,nSize,0);
使用如下语句启动查询:
StarTInquiry();
VoidOnDeviceResponded(BD_ADDRbda,DEV_CLASSdevClass,BD_NAMEbdName,BOOLbConnected)
bda为返回设备地址,bdName为返回设备名称。当查询时间结束时,响应查询定时器函数,开启服务查找线程:
StartDiscovery(m_BdAddr,m_pServiceGuid);
Widcomm提供了各种协议的不同连接方式,基于RFCOMM协议的SPP连接代码如下:
CSppClient::CreateConnection(m_BdAddr,m_serviceName);
当设备连接成功,可以返回相关状态:
VoidOnClientStateChange(BD_ADDRbda,DEV_CLASSdev_class,BD_NAMEname,shortcom_port,SPP_STATE_CODEstate)
使用函数返回的com_port为串口号建立串口操作
CreateFile(buff,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL)。
4.3设备安全认证
无线信道具有开放性的特点,在有效的距离范围内任何符合频率的接收机都能将信号捕获。所以,无线数据传输的安全性是系统设计的重点问题之一。本系统通过三种途径确保无线数传的安全。
一是利用蓝牙标准中的信道标准来保障。蓝牙的工作频率为2.4GHZ,覆盖范围是相隔1MHz的79个通道(从2.402GHz到2.480GHz)[2]。数据传输技术使用短封包,运用了跳频展频技术,跳频频率为1600次/秒,这样从物理层上防止了偷听和避免了干扰。但是这对使用蓝牙设备的窃听和干扰是无效的。
二是使用蓝牙系统中的PIN码。如果传输设备都没有PIN的认证,任何一个蓝牙设备均可以连接获取数据的传输。设置PIN码之后,只有通过PIN码认证的设备,才能进行蓝牙设备的连接和数据传输。
三是通过认证命令实现应用层安全认证,由移动终端发起设备认证命令,等待蓝牙数据采集器返回就绪状态码,掌上终端将生成的认证码A装入特定格式的帧发送至采集器,采集器通过算法得到认证码B并返回发送,如果认证码均正确,则互发确认消息,通过设备认证。
4.4轮询模式下的伪同步与实时
同步传输的多线程实现掌上终端控制系统与蓝牙数据采集器的连接可采用两种方式:基于轮询连接的伪同步模式与实时同步连接传输。轮询模式是掌上控制终端与各采集器分时连接,同步模式是掌上控制终端与所有采集器同时连接,实现同步控制并完成数据传输。
两种连接模式均利用Windows多线程机制实现。为每一个数据采集器开启独立线程,完成数据处理。两种模式均通过事件机制(Event)进行控制,对于轮询模式,初始化时所有数据采集处理线程处于挂起状态,主程序依次触发事件唤醒相应线程进行数据采集处理。同步模式工作时,主程序同时触发所有事件,唤醒所有处理线程进行采集处理,每处理完一个数据采集器的数据,所有的线程同步一次,从而实现数据在时间上的同步。
在待采集数据变化缓慢的情况下,如在温室内监测气温与湿度,采样率低,采用轮询模式可以缩短连接时间,降低设备功耗,延长工作时间。而同步模式适用于数据变化相对较快,对各个数据采集器同步要求高的情况。
5测试结果
掌上系统能够无线连接控制4个数据采集终端,实时接收并显示各数据采集器的数据.在实时接收并绘制数据曲线的同时,可随时执行数据回显功能,实现曲线缩放。
掌上终端采用华硕A626,基于内置的蓝牙模块,与蓝牙数据采集器的通信距离达
6结论
论文基于掌上终端开发了现场数据采集的蓝牙无线控制系统,解决了蓝牙微微网连接、安全认证、同步处理接收等关键问题,实现了上位机的可移动化、便携化。克服了有线数据采集控制系统的连线不便、安装复杂等缺点,可广泛应用于工业现场控制,医疗监测,智能家居等多种不适宜布线的场所
本文作者创新点:使用移动终端作为上位机,通过蓝牙微微网技术以及其他关键技术同步控制多个下位机,并能实时处理、存储并显示接收数据。
参考文献
[1]何戟,李孝安,段渭军,基于蓝牙的移动数据采集处理系统的设计与实现[J],计算机应用研究,2006年11期
[2]BluetoothSIG,BluetoothProtocolCoreVersion2.0+EDR[S].2004
[3]陈莉,钱东平,赵东杰,蓝牙技术在地下水监测系统中的应用[J],微计算机信息,2007年26期
[4]吴建,通用型工业数据采集平台的设计与开发[J],微计算机信息,2008年24卷第3-3期
[5]王宏,用于局域监测控制系统的无线数据传输解决方案[J],计算机应用与软件,2008年2期