最近经常搞这个,有些点还是记录一下。
1、关于模块。我用的都是BLE透传模块,即:模块通过蓝牙接口收到的数据会转发到一个串口上,一般是TTL串口,同时,从串口收到的数据会转发到蓝牙接口上。这个串口就可以连在设备上。
2、关于长数据分包的问题。蓝牙模块有个参数规定了每个数据包长度的最大值,默认值一般是20字节。超过这个长度的数据不接受。所以,小程序向蓝牙写入数据时,如果数据长度超过了这个值,必须拆分成多次发送。设备向向模块串口中写入数据时也有这个要求,并且,两次写入操作之间要有时间间隔。我测试的结果是:如果模块设定值时20字节,那么,两次发送数据的间隔要10ms。小程序向蓝牙写数据时不用加间隔(但仍然要分包),我估计微信或者操作系统已经做过处理。设备向模块串口发数据时,有些模块需要分包和发送间隔,有些模块不需要分包发送,看具体的模块特性。
3、关于开发中用得着的工具,至少手机上得有个GATTBrowser之类的吧。可以看各种设置,也可以收发数据。吐槽一下BLE调试宝,功能和GATTBrowser类似,只不过广告太多了,而且貌似不登录还不给发数据。
4、BLE模块的供货商还是比较多的,但不同的模块还是有一些区别,开发之前要好好看厂商提供的源码。
5、关于BLE模块的服务和特征值。服务和特征值是BLE开发相关的特有概念。对于透传BLE,每个厂商都会通过模块中的“服务+特征值”的特定组合提供数据收发通道。注意,不同的厂商使用的方法是不同的。某些厂商,通过一个服务下的两个特征值分别实现收发,也有的用两个服务+特征值的方式分别实现收发。每个特征值有唯一的访问方法:read,write,notify,它们是互斥的。所以,开发时首先要搞清楚发送数据的服务+特征值是什么,接收数据用的服务+特征值是什么。可以通过看厂商提供的例子,也可以直接用手机上的GATT工具来看。
6、小程序搜索蓝牙的过程也要多注意。第一,windows平台下,用小程序开发工具仿真是不能连接蓝牙。第二,通过小程序开发工具的“真机调试”和小程序发布后在手机上运行的特形是不一样的。操作过程都一样,无非是:
打开蓝牙-》搜索-》获取设备列表-》遍历设备列表,找到目标设备-》连接-》收发数据。
需要注意的点是:
a、连续操作之间要加适当的延迟。比如打开蓝牙成功了,停1000ms再开始搜索;
b、打开蓝牙和关闭蓝牙,开始搜索和停止搜索,都要成对调用;
c、如果搜不到需要的设备,要多试几次。所有的fail都增加一定数量的重试是比较保险的;
d、开始搜索后,在获取了设备列表和遍历过之后再停止搜索,否则有可能得不到需要的结果。