Android CSRMesh蓝牙组网开发总结

来源:互联网 发布:java jdbc 删除数据 编辑:程序博客网 时间:2024/05/17 14:14

CSRmesh蓝牙组网开发总结

对于CSRmesh蓝牙,以前是闻所未闻,但因项目上用到啦CSRmesh蓝牙组网进行通信,便开始了CSR蓝牙的学习之旅。开始时一窍不通,让我头痛欲裂;百度上找了半天;资料少之又少,只看到了子非渔的一篇博客,在这里先说声谢谢;历经半月的艰苦奋斗;终有所获,今天分享出来,有很多不足之处望各位大神指教,在下感激不尽,好啦,下面进入主题;

一:扫描连接蓝牙组网:

MeshService这个服务是非常非常重要的,很多操作都在这个类里面;废话不多说,介绍一下连接的流程:

首先绑定服务,大家都懂的,代码如下

Intent bindIntent = new Intent(this, MeshService.class);
bindService(bindIntent, mServiceConnection, Context.BIND_AUTO_CREATE);

其中mServiceConnectionMeshServiceActivity通信的回调,相信大家都知道的,

然后进入连接,代码如下:

mService.setHandler(mMeshHandler);
mService.setLeScanCallback(mScanCallBack);
mService.setMeshListeningMode(true, true);
mService.autoConnect(1, 15000, 0, 2);

mService.setHandler(mMeshHandler)方法需要一个Handler对象;蓝牙组网的所有消息都会回到这个HandlermService.setLeScanCallback(mScanCallBack);方法需要ScanCallBack对象,这是扫描到外围设备的回调,在ScanCallBack的回调方法中调用mService.processMeshAdvert(device, scanRecord, rssi);方法后便会开始连接外围蓝牙设备,连接成功的回调是MeshService.MESSAGE_LE_CONNECTED:

:关联设备

蓝牙开发板在未关联之前处于持续的广播模式,开发板的蓝光持续闪烁,此时开发板可连接,但手机APP不能和开发板通信;关联设备的作用就是将未关联的设备关联到组网中去;关联成功后会得到一个deviceID;他是蓝牙开发板的标识;可以说deviceID是整个CSRmesh蓝牙库中最重要的东东啦吧;因为所有和蓝牙组网的交互都会用到它,下面看看关联的代码,主要的三个方法:

mService.setDeviceDiscoveryFilterEnabled(true);

这个方法是设置APP扫描处于关联状态的方法,需要注意的是这个扫描不是扫描连接蓝牙组网的扫描;扫描成功后回调到Handler的中的MeshService.MESSAGE_DEVICE_DISCOVERED

然后会得到uuidhash;uuidhash是关联设备最重要的一个参数;

mService.associateDevice(uuidhash,authorizationCode,authorizationCodeKnown);

关联过程中会回调到HandlerMeshService.MESSAGE_ASSOCIATING_DEVICE

此时便会得到关联的进度;

关联成功后回调到HandlerMeshService.MESSAGE_DEVICE_ASSOCIATED中,此时便可得到我们想要的deviceID啦,deviceID是由CSRmesh库生成并发送到开发板,由开发板保存,生成的deviceID默认从327690x8001)开始,可通过mService.setNextDeviceId();方法设置下一个生成的deviceID,然后在程序未关闭的情况下每关联一次就加1;程序关闭后从新从32769开始。而且每个手机端(中心设备)的deviceID都是327680x8000);

三.通信:

APP和开发板通信之前必须必须必须要调用

mService.setTTL();
mService.setNetworkPassPhrase();

方法进行安全密码设置,不然无法发送信息到蓝牙开发板,CSRmesh库中有很多API,通信用的是DataModelApi中的sendData()方法,里面的第一个参数便是关联得到的deviceID,第二个参数是发送的数据包,需要注意的是发送的数据包不能超过10个字节;否则无法发送信息,第三个参数是是否需要发送成功的回复;通信的信息接收都会回调到MeshService.MESSAGE_RECEIVE_BLOCK_DATA

其他的API的使用也都大同小异,在此就不做过多赘述;

四.结尾:

终于他妈的写完啦,敲得老子手痛,最后,希望我的这篇博客能对各位苦逼的同行苦逼的码农有所帮助。不再过我苦逼的研究生活;如有不足之处,希望各位大牛指正,在下感激不尽,啊啊啊啊啊,下班了