从去年起就和几个同学一起申请了一个项目做利用手机蓝牙来控制应用程序,洋洋洒洒做了一年,现在终于竣工了。我们整个系统分三大块: 1、电脑端蓝牙服务程序,我们利用这个程序发布蓝牙服务,让手机客户端与之建立连接通信。 2、手机端蓝牙客户程序,我们利用这个程序搜索蓝牙服务,与电脑服务端建立连接实现通信。 3、蓝牙信号中继器,这个是我们作品中的电子产品,主要用来增加蓝牙传输范围。 然后具体介绍一下三个部分的具体实现: 1、电脑端蓝牙服务程序: 我们是在windows上面开发的,通过调用windows sdk中关于蓝牙服务发布、信息接收、信息发送的API函数(主要包含在<ws2bth.h>中 )。然后利用socket通信的方法(<winsock2.h>)分配端口,开启监听等等,但是这里我们用的是RFCOMM协议,所以有些不同,具体操作可参考附件示例。然后我把对蓝牙的操作封装到一个dll中,已被后用。这个基础通信被搞定了后面的程序就容易了。我们主题程序使用c#写的,程序会记录下用户对每个应程序的配置信息,然后利用蓝牙将电脑上面的可控制程序发送给手机端,当手机需要操控某个应用程序时就发送操控这个程序的指令,电脑端对这条指令进行解析,然后对该应用程序进行操作(譬如,电脑端把所有程序发送到手机后,手机发送给电脑“openapp|kugou|end,电脑接收到这条信息后首先对其完整性,可用性进行验证,如果可用就执行定义好的操作,当然这些指令的格式都要自己定义,并且电脑端和手机端都要严格按照这个指令格式传输”)。{zh1}就是对应用程序的控制了,我们主要是通过对应用程序的窗口发送系统消息实现的,主要是找到你要控制的窗口句柄,有了句柄发送系统消息就不是问题了。 2、手机端蓝牙客户端程序:我们是在s60系统上面开发的,在它的sdk中也有相应的API供调用。可以通过调用相应的API来搜索蓝牙设备、蓝牙服务,然后与之建立连接。建立连接后就是一系列的指令字符串的发送和接收了。只要定义好了指令格式在对指令的解析生成就是水到渠成的了。但是手机开发始终是比较麻烦,而且其内存也不大,所以大部分逻辑处理还是让电脑端去做,手机端只需做一些简单的处理。 3、蓝牙信号中继器,但是考虑到蓝牙传输不是很远,就构思做个蓝牙中继器出来。于是我们就买了单片机,买了AT89S52和nRF24L01芯片用c语言写了个程序,做了一块电路板,然后就调试啊,调试,现在还在调试中。。。。 其实说这么多也没啥用还是上段代码吧,但是这个代码量还是挺大的,就上段主要的: //BTServer.h: // extern "C" _declspec(dllexport) int WINAPI Advertise(wchar_t *sevName); //////////////////////////////////////////////////////////////////////////////////////////////// // BTServer.cpp : 定义 DLL 应用程序的导出函数。 #include "stdafx.h" ...................鉴于篇幅有限一下代码省略,如有需要可联系本id |