【TB-02模组专题③】微信小程序蓝牙通讯 Ble 蓝牙Mesh TB02模组;

Katherine ·
更新时间:2024-11-13
· 715 次阅读

本<安信可ble mesh蓝牙模组TB-02模组专题>系列博客学习由官方博客 CSDN安信可博客 潜心所力所写。如有不对之处,请留言,我们及时更改。

1、BLE MESH开发环境linux版搭建,点亮一盏LED灯。

2、简单学习如何对接天猫精灵语音控制的过程;

3、微信小程序蓝牙通讯 Ble 蓝牙Mesh TB02模组;

文章目录一、材料准备二、实现过程三、蓝牙模块初始化四、微信小程序编程4.1 搜索设备4.2 连接设备4.3 获取服务列表4.4 获取服务下的特征列表4.5 如何接受设备发来的数据4.6 如何发送数据到设备

在这里插入图片描述

一、材料准备

    这里务必声明一下,硬件对接需要一点成本请自行出资,并不像纯软件就可以搞的!

ble蓝牙模块一个,可从淘宝购买!我使用的是安信可TB02模块开发版-普通版; 微信小程序开发账号,自行从微信公众号注册!请自行入门小程序哦! 微信小程序源码链接:GitHub :https://github.com/Ai-Thinker-Open/AiTBxxForWeChat

在这里插入图片描述

二、实现过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9UfBSkZ1-1586527137502)(/api/project/918313/files/19200364/imagePreview)]

    这里不涉及到单片机编程,直接用串口助手模拟单片机;

蓝牙模块开启 从机模式,等待连接; 微信小程序开始搜索设备,之后成功连接; 之后读取设备服务service列表,再读取指定服务的特征列表 characters; 根据硬件厂商指定通讯的特征通道来做数据的收、发和通知特性;

     注意:一个ble蓝牙设备可拥有多个服务和特征,涉及到读取设备的服务和特征,都是需要需要设备厂商指定的!如果未能列出,那么此特征的权限是 可读可写可通知,一般为一个特征拥有此三个权限;如果不是,那需要具体问设备厂商啦!!

三、蓝牙模块初始化

     如果您的板子并没烧录AT固件,请按照第一篇文章,编译 example/at 工程,烧录到板子即可!

     默认波特率等设置,上电后会有信息打印,如下图所示:

在这里插入图片描述

     如需了解具体的AT指令集,点我:
     下面为大家列下主要指令:

序号 指令 功能
1 AT 测试 AT
2 ATE 开关回显
3 AT+GMR 查询固件版本
4 AT+RST 重启模组
5 AT+SLEEP 深度睡眠
6 AT+ RESTORE 恢复出厂设置 恢复后将重启
7 AT+BAUD 查询或设置波特率 重启后生效
8 AT+NAME 查询或设置蓝牙广播名称 重启后生效
9 AT+MAC 设置或查询模组 MAC 地址 重启后生效
10 AT+STATE 查询蓝牙连接状态
11 AT+SEND AT 模式下发送数据
12 +DATA AT 模式下收到数据
四、微信小程序编程

     微信小程序开发的API文档还是很齐全的,具体的API使用详情,请移步!点我进去查看!

4.1 搜索设备

     第一步肯定是搜索设备,通过 调用 wx.startBluetoothDevicesDiscovery(Object object) 来发现设备,入参可以指定 UUID,注意设备列表的回调是通过 wx.onBluetoothDeviceFound 方法回调。

4.2 连接设备

    上步我们已经拿到了周围的蓝牙设备列表,那么如何判断哪个是我们想要的呢?一般为名字,TB02的广播名字一般为 Ai-Thinker,于是乎,调用 wx.createBLEConnection() ,入参为搜索到的设备的 deviceID,注意这个参数不是唯一的!同一个设备对于不同手机会有不同而言,对应安卓手机是固定的 蓝牙mac地址,而对于IPhone手机又是不一样的,因为苹果手机不暴露设备的mac地址,再外加了一层!

    那么,我们如果做产品,又是如何适配这种多平台的障碍呢?我有个想法,设备在广播时候的数据的 advertisData 字段中加上自定义数据,这样就可以跨平台搜索设备回调时候,通过判断这个字段是否为我想要搜索的设备;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XKWfODzU-1586527137504)(/api/project/918313/files/19200501/imagePreview)]

4.3 获取服务列表

    上面说了,一个设备可拥有多个服务service,我们在获取时候,是在已连接成功的情况下再获取哦!

    下面获取到了服务列表,并通过判断其 uuid 是否和我们一致,从而判断是否Tb01设备,否则,就是连接了其他设备。

    也许你会问,如何获取这个uuid是否一致。参考uuid一般是厂商提供的;

wx.getBLEDeviceServices({ deviceId: that.data.connectedDeviceId, success: function(res) { var all_UUID = res.services; var index_uuid = -1; var UUID_lenght = all_UUID.length; /* 遍历服务数组 */ for (var index = 0; index < UUID_lenght; index++) { var ergodic_UUID = all_UUID[index].uuid; //取出服务里面的UUID /* 判断是否是我们需要的00010203-0405-0607-0809-0A0B0C0D1910*/ if (ergodic_UUID == '00010203-0405-0607-0809-0A0B0C0D1910') { index_uuid = index; }; }; if (index_uuid == -1) { wx.showModal({ title: '提示', content: '非我方出售的设备', showCancel: false, success: function(res) { that.setData({ searching: false }) } }) } 4.4 获取服务下的特征列表

    上面已经获取了服务,那么我们下一步就是要获此这个服务下的特征列表;

    同样道理,也是要获取到其特征的uuid,在 TB01模块里面的这个服务,只有一个特征好吧。所以只取元素第一个即可!

    下面程序中的调用 wx.notifyBLECharacteristicValueChange()方法目的是 主动监听此通道的数值变化,通俗来说就是:设备一旦发送数据在此通道,就会立刻收到通知;

wx.getBLEDeviceCharacteristics({ deviceId: options.connectedDeviceId, serviceId: res.services[index_uuid].uuid, success: function(res) { wx.notifyBLECharacteristicValueChange({ state: true, deviceId: options.connectedDeviceId, serviceId: that.data.serviceId, characteristicId: that.data.characteristics[0].uuid, success: function(res) { console.log('启用notify成功') }, fail(res) { console.log(res) } }) 4.5 如何接受设备发来的数据

    上一点已经主动监听到了某通道的数值变化,这点必须要做的;

    然后,就可以调用下面方法,接收到数据打印出来。注意:接收到的是十六进制格式,还需要转下!

wx.onBLECharacteristicValueChange(function(res) { console.log('接收到数据:' + app.buf2string(res.value)) }) 4.6 如何发送数据到设备

    发送数据时候,必须确定所在的通道是否可写 write ;发送数据时候,务必转为buffer,再传进去;

var buffer = new ArrayBuffer(that.data.inputText.length) var dataView = new Uint8Array(buffer) for (var i = 0; i < that.data.inputText.length; i++) { dataView[i] = that.data.inputText.charCodeAt(i) } wx.writeBLECharacteristicValue({ deviceId: that.data.connectedDeviceId, serviceId: that.data.serviceId, characteristicId: that.data.characteristics[0].uuid, value: buffer, success: function(res) { console.log('发送成功') } })

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-liBSPanx-1586527137505)(/api/project/918313/files/19200472/imagePreview)]


作者:安信可科技



程序 mesh ble 微信小程序 小程序 蓝牙

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章