评论

微信小程序蓝牙开发碰到的问题(写指令设备没反应,小程序收不到设备发送的通知)问题及解决思路

本文记录了开发微信小程序通过蓝牙控制硬件时遇到的常见问题及解决方法。包括写入指令无反应、无法接收通知、连续发送指令失败等问题。通过特征值选择是否正确和数据传输大小,来解决蓝牙控制设备出现的问题。

在开发微信小程序通过蓝牙连接设备并发送指令时,我遇到了一些问题。尽管在论坛中有不少关于蓝牙的讨论帖,但大多未能提供有效的解决方案。为此,我记录了自己的排查思路,希望能对大家有所帮助。

一、微信小程序通过蓝牙连接设备后写入指令无反应

该问题的主要原因通常是服务ID和特征值ID选择不正确,并非所有可写的特征值都能用于写入指令。我起初认为只要找到一个write属性为true的特征值即可写入指令,但尝试了各种方式后,设备仍无反应。后来查看了硬件厂商提供的Android应用源码后发现,只有特定的特征值才能用于写入指令。因此,特征值的write属性为true并不一定意味着可以写入。当出现无法写入指令的情况时,应首先与硬件工程师确认特征值的使用是否有特殊要求。

如果特征值使用正确但仍无法发送指令,则需要考虑传输数据是否过大。Android手机可以通过setBLEMUT(设置蓝牙低功耗最大传输单元)方法设置传输数据的大小。如果设置为最大值后仍无法成功写入指令,可以考虑将数据包分割后循环写入(一般指令不会太大,因此分包发送的情况较少)。

二、微信小程序通过蓝牙连接设备后收不到设备通知

该问题的原因与无法写入指令的情况类似,均可从特征值和传输数据大小两方面进行排查。尽管特征值的notify属性为true,也不一定能收到通知,最好与硬件工程师确认。如果因为传输数据过大导致无法接收通知,通常表现为iOS设备可以收到通知,而Android设备无法收到。这种情况下,可以调用setBLEMUT方法设置最大传输单元来解决问题。

三、微信小程序通过蓝牙连接设备后连续发送指令可能会失败

这种情况一般分为两类:

  1. 如果小程序发送指令后,设备会发送通知给小程序(通知开发者当前指令业务操作是否成功,相当于回调),则必须等待当前指令的特征值变化回调后才能发送下一条指令。
  2. 如果设备不会对指令发送进行回调,则可以在指令发送成功后延时执行下一条指令。

总结

以上排查步骤均基于确保设备本身没有问题的前提下。一般来说,成熟的硬件通常不会存在硬件问题。如果硬件也处于开发阶段,除了上述排查思路外,还需要与硬件开发人员多沟通。以上只是排查问题的思路,如有其他问题,欢迎评论补充。

最后一次编辑于  07-25  
点赞 0
收藏
评论

1 个评论

  • Su
    Su
    10-15

    大家都会在安卓原生上开发,为啥挪到小程序感觉好多问题

    10-15
    赞同
    回复
登录 后发表内容