在开发微信小程序通过蓝牙连接设备并发送指令时,我遇到了一些问题。尽管在论坛中有不少关于蓝牙的讨论帖,但大多未能提供有效的解决方案。为此,我记录了自己的排查思路,希望能对大家有所帮助。
一、微信小程序通过蓝牙连接设备后写入指令无反应
该问题的主要原因通常是服务ID和特征值ID选择不正确,并非所有可写的特征值都能用于写入指令。我起初认为只要找到一个write
属性为true
的特征值即可写入指令,但尝试了各种方式后,设备仍无反应。后来查看了硬件厂商提供的Android应用源码后发现,只有特定的特征值才能用于写入指令。因此,特征值的write
属性为true
并不一定意味着可以写入。当出现无法写入指令的情况时,应首先与硬件工程师确认特征值的使用是否有特殊要求。
如果特征值使用正确但仍无法发送指令,则需要考虑传输数据是否过大。Android手机可以通过setBLEMUT
(设置蓝牙低功耗最大传输单元)方法设置传输数据的大小。如果设置为最大值后仍无法成功写入指令,可以考虑将数据包分割后循环写入(一般指令不会太大,因此分包发送的情况较少)。
二、微信小程序通过蓝牙连接设备后收不到设备通知
该问题的原因与无法写入指令的情况类似,均可从特征值和传输数据大小两方面进行排查。尽管特征值的notify
属性为true
,也不一定能收到通知,最好与硬件工程师确认。如果因为传输数据过大导致无法接收通知,通常表现为iOS设备可以收到通知,而Android设备无法收到。这种情况下,可以调用setBLEMUT
方法设置最大传输单元来解决问题。
三、微信小程序通过蓝牙连接设备后连续发送指令可能会失败
这种情况一般分为两类:
- 如果小程序发送指令后,设备会发送通知给小程序(通知开发者当前指令业务操作是否成功,相当于回调),则必须等待当前指令的特征值变化回调后才能发送下一条指令。
- 如果设备不会对指令发送进行回调,则可以在指令发送成功后延时执行下一条指令。
总结
以上排查步骤均基于确保设备本身没有问题的前提下。一般来说,成熟的硬件通常不会存在硬件问题。如果硬件也处于开发阶段,除了上述排查思路外,还需要与硬件开发人员多沟通。以上只是排查问题的思路,如有其他问题,欢迎评论补充。
大家都会在安卓原生上开发,为啥挪到小程序感觉好多问题