某酱の博客
为逐梦努力~
© 繁星(FXIT)博客
粤ICP备15059744号
All Rights Reserved.
Powered by FXIT!

[实战]微信小程序蓝牙BLE连接esp32并发送数据

近期在为原来的微信小程序物联网通信新增蓝牙通信功能,在阅读无数教程之后终于写出了差不多能实现的微信小程序蓝牙通信功能。

但是终究还是学浅,急匆匆将小程序审核上线后,发现IOS设备竟然无法正常连接蓝牙通信。

结果就是debug了两天才解决好问题,问题就出在ios的微信小程序上不能靠mac地址来连接设备,以及一些方法的先先后后执行都是要遵循间隔时间以及顺序的,众多的问题暴露出来,不得已让我推翻之前的代码,重新开写。

其实说实话看了很多教程,对新手来理解还是很困难的一件事情,尤其蓝牙通信我之前并没有对该领域有所了解,所以做好一个项目确实还是需要一定的功底,不能急于求成。

话不多说,我这里尽量简单地说明一下如何实现小程序蓝牙连接并发送数据。


一、关闭蓝牙

可能很多人好奇,为什么第一步是关闭蓝牙呢?其实这个坑还是微信挖的(https://developers.weixin.qq.com/community/develop/doc/000a6287404ee8c64f8888fa056800),可以看链接提到的问题,具体不好说清楚,但是在做连接之前,最好还是先关闭一下蓝牙(反正也不耗多少时间是8(狗头))。

二、初始化蓝牙适配器

初始化蓝牙适配器,说白了就是用蓝牙功能之前先初始化一下,判断一下设备支不支持蓝牙、有没有开启蓝牙,不然还硬往下执行肯定就报错了。我们执行wx.openBluetoothAdapter,如果成功了就说明蓝牙功能正常,如果失败了,就直接说明蓝牙不可用(可以搞个弹窗提示用户)。

这里,我们可以设定一个5s的延时执行函数,5s后看一下有没有找到我们的设备,如果没有找到,那就报设备没有找到,然后停止蓝牙。

这样,我们就比较完美做好了初始化。

三、扫描周围的蓝牙设备,然后通过一些方法来获取指定设备的serviceID

注意到Android和IOS的serviceID是不一样的,Android是MAC,IOS则是UUID,而且这个UUID还不是固定的,不同设备还不一定保证相同。这就想起了我之前写的代码,直接把serviceID写死了,肯定是要出兼容性问题的。

这里对应上面的fxble_startsearch()函数。

这里我因为懒得改esp32上面的代码,所以没有靠蓝牙广播里面插特殊值来判断设备,直接省事用了蓝牙名字来判断。其实这样并不好,但是在我的生产环境中已经足矣。

四、连接蓝牙设备

这里我们先使用wx.createBLEConnection来连接到指定的蓝牙设备,然后wx.getBLEDeviceServices获取serviceID,notify_id,write_id,read_id(其实写数据的话,只要write_id就可以了)。

对应fxble_connect()函数。

五、写入数据

其实已经快接近尾声了,这里有个难点就是要把字符串转换一下对应的格式(字符串转byte),然后传入buffer,不能直接发送。

对应上面的fxble_write()。

六、关闭连接

做完所有操作之后,就要关闭连接了,以免资源占用,常规操作了。

©版权声明:本文为【繁星(FXIT)博客】(blog.fxit.top)原创文章,转载时请注明出自“繁星博客”,并加上链接,谢谢!
•本文作者:某酱 FXIT


•邮箱:[email protected]


•共为繁星博客贡献了:92篇博文


•个人简介:QQ:1229488344


2021-01-17
14,637 浏览量