• 本<泰凌微ble mesh蓝牙模组天猫精灵学习之旅>系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

1、小白也痴迷,如何在 Linux环境搭建编译烧录 安信可TB02,点亮一盏LED灯;
2、如何实现 微信小程序蓝牙控制 Ble Mesh模组 安信可TB02,全部开源!

文章目录

    • 前言
  • 一、材料准备
  • 二、实现过程
  • 三、蓝牙模块初始化
  • 四、微信小程序编程
    • 4.1 搜索设备
    • 4.2 连接设备
    • 4.3 获取服务列表
    • 4.4 获取服务下的特征列表
    • 4.5 如何接受设备发来的数据
    • 4.6 如何发送数据到设备
    • 另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!

前言

接着上篇环境搭建,我们这篇玩下如何通过微信小程序蓝牙控制TB02开发板;

接触微信硬件生态已经有2年了,微信客户端如果能够实现以蓝牙控制设备,无非是从微信公众号或微信小程序入手,但微信公众号蓝牙控制设备,那么设备必须支持AirSync协议;

AirSync协议已经很久很久没有维护了,个人认为官网已经不维护了!如果想要通过微信公众号蓝牙控制设备,那么设备必须支持AirSync协议,而且要经过微信硬件平台认证才可以发布!而安信可TB02开发板暂不开放支持AirSync协议!

微信AirSync协议介绍: https://iot.weixin.qq.com/wiki/new/index.html?page=4-2-1

而安信可TB02开发板支持ble 普通连接控制,所以,支持低功耗蓝牙连接和控制,幸运,我就花了半天时间做出来了,并以此分享出来!共勉!!!

欲要了解更多微信控制硬件,清关注我的微信硬件专题:点我访问。


一、材料准备


这里务必声明一下,硬件对接需要一点成本请自行出资,并不像纯软件就可以搞的!下面推荐的蓝牙模块自行某宝购买哈!本人写技术文章,不是带货写,而是正真分享出来实现过程,不喜勿喷!

  1. ble蓝牙模块一个,可从淘宝购买!我使用的是安信可TB02模块开发版-普通版
  2. 微信小程序开发账号,自行从微信公众号注册!请自行入门小程序哦!


二、实现过程



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

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

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


三、蓝牙模块初始化


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

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

本人不玩AT指令开发,因做微信小程序,所以需了解此设备的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 字段中加上自定义数据,这样就可以跨平台搜索设备回调时候,通过判断这个字段是否为我想要搜索的设备;

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('发送成功')}})

最后贴上源码链接:GitHub :https://github.com/Ai-Thinker-Open/AiTBxxForWeChat

有任何疑问联系本人下方邮箱或加qq群或文章留言,不要私信我,我已经屏蔽私信!多多支持!


另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!

  • 玩转esp8266带你飞、加群QQ群,不喜的朋友勿喷勿加:434878850
  • 个人邮箱:xuhongv@yeah.net 24小时在线,有回必回复!
  • esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
  • esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
  • 关注下面微信公众号二维码,干货多多,第一时间推送!

泰凌微ble mesh蓝牙模组天猫精灵学习之旅 ② 如何实现 微信小程序蓝牙控制 Ble Mesh模组 安信可TB02,全部开源!相关推荐

  1. 泰凌微ble mesh蓝牙模组天猫精灵学习之旅 ① 小白也痴迷,如何在 Linux环境搭建编译烧录 安信可TB02,点亮一盏LED灯;

    本<泰凌微ble mesh蓝牙模组天猫精灵学习之旅>系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.小 ...

  2. 泰凌微ble mesh蓝牙模组天猫精灵学习之旅④如何在Android开发低功耗蓝牙ble控制 TB-02 模块,代码工程全部开源!(附带Demo)

    本<泰凌微ble mesh蓝牙模组天猫精灵学习之旅>系列博客学习由半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.小白也痴迷,如 ...

  3. 泰凌微ble mesh蓝牙模组天猫精灵学习之旅 ⑤ 阿里天猫精灵官方Genie BT mesh Stack框架:编译天猫精灵例程,实现语音控制!

    本<泰凌微ble mesh蓝牙模组天猫精灵学习之旅>系列博客学习由半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.小白也痴迷,如 ...

  4. 泰凌微ble mesh蓝牙模组天猫精灵学习之旅③简单入门安信可TB-02开发开发板轻松接入天猫精灵,语音控制冷暖灯so easy!

    本<泰凌微ble mesh蓝牙模组天猫精灵学习之旅>系列博客学习由半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.小白也痴迷,如 ...

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

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

  6. 微信小程序蓝牙BLE开发——关于进制转换(四)

    微信小程序蓝牙BLE开发--进制转换 这段时间开发共享设备,对接蓝牙BLE设备通信协议,过程中用到一些进制转换, 记录下方便使用. 有些参考大神们,感谢分享. 文章目录 微信小程序蓝牙BLE开发--进 ...

  7. 微信小程序 - 蓝牙BLE小程序开发

    1.前言 最近领导看我比较闲,安排我开发一个蓝牙BLE微信小程序,刚开始接到这个项目时,我第一反应时,"卧槽"".老子在公司的岗位是做Windows和Android 软件 ...

  8. 微信小程序蓝牙BLE开发实战——案例(二)

    微信小程序蓝牙BLE开发实战(二) 上篇主要介绍在开发过程中应用到相关API操作.接下来介绍个人在项目开发中应用蓝牙BLE一些事情. 由于时间比较仓促, 有些注释没那么详细.请理解~写的不好欢迎各位大 ...

  9. 微信小程序蓝牙模块BLE开发说明基础知识

    微信小程序蓝牙模块说明 一.简介 微信小程序作为轻量级应用的载体,确实方便了很多的应用场景.传统的产品如果要和手机互联互通,那么必须要开发两套APP,即IOS和安卓.十分的麻烦和成本巨高.但是微信小程 ...

最新文章

  1. 关键基础设施是否会成为DDoS攻击的新目标?答案是不大会
  2. eDrawings Pro 2020中文版
  3. 线程的状态 Thread.State||NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED
  4. 【数据结构与算法】之深入解析图的拓扑排序
  5. Linux下内存问题检测神器 valgrind
  6. python编写图像识别_python实现识别相似图片小结
  7. IOS开发—UIGestureRecognizer Tutorial in iOS 5: Pinch
  8. kis商贸系列加密服务器,金蝶KIS商贸系列V3.0发版说明教程.doc
  9. 操作系统启动后 计算机处于 模式,电脑开机出现选择操作系统。怎么办?
  10. python中backward是什么意思_python-PyTorch函数中的下划线后缀是什么意思...
  11. php8网站,教你从零搭建php8环境
  12. 程序员就业大数据报告出炉:平均月薪近2万,90后成主力
  13. 董宝珍:赔钱别赖公司 股民该怨自己
  14. HHUOJ 1395 彩票
  15. [渝粤教育] 深圳信息职业技术学院 《新理念英语》English For You 参考 资料
  16. 定义一个点类(Point)、圆类(Circle)和圆柱体类(Cylinder)的层次结构。圆包括圆心和半径两个数据成员,圆心具有点类的所有特征。圆柱体类由半径和高构成。要求各类提供支持初始化的构造函数
  17. 2.光栅图形显示技术
  18. android 如何获得附近的wifi,Android细节:扫描获取附近wifi,并以列表形式进行展示...
  19. 拓嘉辰丰电商:拼多多开店绑定的身份证能不能改?
  20. 文献综述撰写格式及写作技巧

热门文章

  1. U盘重装 Windows 系统笔记
  2. 几种主板BIOS报警声音的含义
  3. 破解WMp11的install
  4. 数据恢复实战技术总结
  5. 计算机工程毕业论文任务书,计算机工程毕业设计论文任务书开题报告模板.doc...
  6. 魔域中文乱码还不让更新
  7. [转]地球坐标 火星坐标 百度坐标 相互转换
  8. 一个64位操作系统的实现
  9. 怀旧单机版游戏菜单,欢迎下载
  10. python词云图库一般装多久_Python数据可视化:词云库的讲解和如何制作词云