【微信小程序控制硬件第1篇 】 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件!
【微信小程序控制硬件第2篇 】 开始微信小程序之旅,导入小程序Mqtt客户端源码,实现简单的验证和通讯于服务器!
【微信小程序控制硬件第3篇 】 从软件到硬件搭建一个微信小程序控制esp8266的项目,自定义通讯协议,为面试职位和比赛项目加分!
【微信小程序控制硬件第4篇 】 深度剖析微信公众号配网 Airkiss 原理与过程,esp8266如何自定义回调参数给微信,实现绑定设备第一步!
【微信小程序控制硬件第5篇 】理清接下来必须走的架构思想,学习下 JavaScript 的观察者模式,在微信小程序多页面同时接收到设备推送事件!
【微信小程序控制硬件第6篇 】服务器如何集成七牛云存储SDK,把用户自定义设备图片存储在第三方服务器!
【微信小程序控制硬件第7篇 】动起来做一个微信小程序Mqtt协议控制智能硬件的框架,为自己心里全栈工程师梦想浇水!!
【微信小程序控制硬件第8篇 】微信小程序以 websocket 连接阿里云IOT物联网平台mqtt服务器,封装起来使用就是这么简单!
【微信小程序控制硬件第9篇 】巧借阿里云物联网平台的免费连接,从微信小程序颜色采集控制 esp8266 输出七彩灯效果,中秋节来个直播如何?!
【微信公众号控制硬件 第10篇 】如何在微信公众号网页实现连接mqtt服务器教程!!
【微信小程序控制硬件 第11篇 】全网首发,微信小程序ble蓝牙控制esp32,实现无需网络也可以控制亮度开关。
【微信小程序控制硬件 第12篇 】微信小程序蓝牙控制硬件应如何开发?为您全面解析微信小程序蓝牙API的使用。
【微信小程序控制硬件 第13篇 】安信可B站直播学习总结,微信小程序MQTT远程控制ESP8266 NodeMCU,谈谈微信生态那些事。

文章目录

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

一、前言

近乎一个月没更新知识了,不代表自己没学习一些新的知识或做一些开源项目,人生在于奋斗!

最近最大的感触就是身边的程序员并非有自己如般的强烈学习精神,这3年来我开发领域从嵌入式到前端、后台乃至画电路图,虽不到精通的境界,但单独扛起做一个项目还是可以的。

人对未来是恐惧的,作为程序员的你,不知是否有这样的体验:如果不赶上现时代的技术潮流,就可能比不上新来的应届生,因为他们是年轻的一代充满对未来的好奇,一股加班劲! 这也是验证了为什么大多数公司会 “裁员” 的主要原因:啃老!所以存在这样的一个说法:老板宁愿花4K招一个应届生,也不想为老员工加薪4K!

当真正的为了一件事情去奋斗并且坚持下去你也会成功,不要空有一身理想就可以心安理得的混日子,要脚踏实地的走下去,才是成功最基本的开始,当你迈出第一步的时候你也就不会考虑为什么没有985学历的人往往会有高收入,也不会为什么公司不能够为你加薪而感到苦恼。

我始终觉得存在这样的一个平衡: 技术 = 薪酬 = 尊重


二、材料准备


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

本文就是基于 安信可Tb01蓝牙模块上开发,也可用其他的蓝牙模块,比如汇承HC08;注意务必是 4.0ble蓝牙

  1. ble蓝牙模块一个,可从某宝购买!像 Hc05这种非低功耗蓝牙模块不行哦!我推荐各位使用安信可TB01模块
  2. 微信小程序开发账号,自行从微信公众号注册!

三、实现过程



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

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

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

3.1 本人连线实物图

3.2 蓝牙模块连线


四、蓝牙模块初始化


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

本人不玩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使用详情,请移步!点我进去查看!

5.1 搜索设备

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

5.2 连接设备

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

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

5.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})}})}

5.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)}})

5.5 如何接受设备发来的数据

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

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

wx.onBLECharacteristicValueChange(function(res) {console.log('接收到数据:' + app.buf2string(res.value))})

5.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
  • 关注下面微信公众号二维码,干货多多,第一时间推送!

【微信小程序控制硬件 第12篇-项目篇】微信小程序蓝牙控制硬件应如何开始动手?为您全面解析微信小程序蓝牙API的使用;(附带demo)相关推荐

  1. 计算器简单篇(项目篇)

    一.功能分析 日常生活中我们用的计算器都包括加减乘除幂平方立方1 - 2 * ( (60-30 +(-9**5-2-5-2*-3-5/3-40*4/2-3/5+6*3) * (-9-2-5-2*5/3 ...

  2. 【微信小程序控制硬件 第14篇】分享一下我在微信公众号和小程序上实现的几个颜色采集器,轻松集成到您项目实现调光。

    [微信小程序控制硬件第1篇 ] 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! [微信小程序控制硬件第2篇 ] 开始微信小程序之旅,导入小程序Mqtt客户 ...

  3. 【微信小程序控制硬件③】 从软件到硬件搭建一个微信小程序控制esp8266的项目,自定义通讯协议,为面试职位和比赛项目加分!

    微信物联网生态主要分在微信硬件开发平台与腾讯物联开发平台,前者已经停止维护,但依然有着很大的学习价值,而后者作为主推的平台,集成很多功能,包括从微信小程序实现配网到控制: 为了兼顾更多的朋友和自己的学 ...

  4. 微信小程序控制硬件第17篇 : 腾讯连连小程序通过LLSync蓝牙协议控制安信可PB-02模组,无需网络实现蓝牙本地通讯。(附带源码)

    文章目录 前言 一.注册腾讯物联开发平台设备 新建项目 新建产品 创建数据模板 选择设备开发方式 交互开发配置 新建设备 二.设备端操作 硬件简介与连接 准备软件环境 工程目录 烧录步骤 三.腾讯连连 ...

  5. 【微信小程序控制硬件13 】 与硬件平台无关,微信小程序 AP 配网安信可 Wi-Fi 模块入网示例。【AT篇,附带Demo】

    文章目录 前言 一 材料准备 二 实现目的 三 配置的数据交互协议 3.1 小程序发送网络信息阶段 3.2 模组连接路由器的回调: 四 配置原理和过程 五 设备端 AT 交互过程 另外,不要把我的博客 ...

  6. 【微信小程序控制硬件⑦ 进阶篇】动起来做一个微信小程序Mqtt协议控制智能硬件的框架,为心里全栈工程师梦想浇水。

    文章目录 一.前言: 二.涉及的技术点: 三.框架的运行原理: 四.框架代码流程: 4.1 主线程: 4.2 获取设备列表显示设备,以及订阅在线的设备: 4.3 点击某设备如何实现携带此设备信息到控制 ...

  7. 【微信小程序控制硬件 第13篇】安信可B站直播学习总结,微信小程序MQTT远程控制ESP8266 NodeMCU,谈谈微信生态那些事;

    [微信小程序控制硬件第1篇 ] 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! [微信小程序控制硬件第2篇 ] 开始微信小程序之旅,导入小程序Mqtt客户 ...

  8. 微信小程序控制硬件 第14篇 微信小程序腾讯地图控制 4G Cat.1模组 ,安信可CA-01加载定位显示当前位置。

    文章目录 一.前言 通讯协议 技术问题点 二.4G模组业务逻辑 上报基站信息 三.微信小程序控制 另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈! 微信物 ...

  9. 【微信小程序控制硬件⑦ 进阶篇】巧借阿里云物联网平台的免费连接,从微信小程序颜色采集控制 esp8266 输出七彩灯效果,中秋节来个直播如何?!

    [微信小程序控制硬件第1篇 ] 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! [微信小程序控制硬件第2篇 ] 开始微信小程序之旅,导入小程序Mqtt客户 ...

最新文章

  1. OpenStack Pike Minimal安装:三、镜像管理
  2. bzoj 3100 排列
  3. P1991 无线通讯网
  4. C++程序设计基础(8)main函数
  5. apache安全设置
  6. azure 使用_使用Azure的低成本灾难恢复解决方案
  7. python uiautomation_使用python UIAutomation从QQ2017(v8.9)群界面获取所有群成员详细资料,...
  8. idea搭建springcloud项目_Eureka搭建分布式SpringCloud项目
  9. 读Zepto源码之assets模块
  10. freemark 应用以及优势
  11. 活动目录的介绍:深入浅出Active Directory系列(一)
  12. 三宝机器人怎么充电_三宝机器人说明书
  13. mysql进销存表设计_ERP进销存-用户表 - 数据库设计 - 数据库表结构 - 果创云
  14. OpenCV 角度计算
  15. *p++ 和 *++p
  16. 大数据处理算法--Bloom Filter布隆过滤
  17. 火地晉 (易經大意 韓長庚)
  18. c语言字符型常量计算,c语言字符型常量和变量.doc
  19. 【Shell】mksh运行分析
  20. 遇到同事求助时需要帮助的3件事情,别说你不知道

热门文章

  1. SAP ABAP实现类似于ME23N/MIGO的折叠屏幕开发
  2. 精益生产的八大浪费是哪些?一篇教你轻松识别
  3. 小米手环NFC读不了卡_售价169元的小米手环4实测 开启你智能生活的第一把钥匙...
  4. java自定义监听器例子_Java使用自定义注解实现为事件源绑定事件监听器操作示例...
  5. 高等数学学习笔记——第五十一讲——高阶线性微分方程
  6. 快速集成钉钉免登组件
  7. Springboot项目中使用jasypt给配置文件中密码加密
  8. 2021年新版电影小程序商业版+前端(含教程、采集)
  9. output balance paths to PADs
  10. 学生辅导团进入低年级实践课堂实施方案(讨论稿)