前言1.经过几个月的时间,断断续续的修改,终于完成了个人的第一个微信蓝牙小程序,仅此做一个小结。
一、知识储备1.微信小程序API2.蓝牙部分的API可以到微信公众平台去找,都是官方文件。Android从微信6.5.7开始支持蓝牙程序,iOS从微信6.5.6开始支持。
3.之前自己稍微整理过一个流程。
4.蓝牙流程
2.BLE4.05.BLE4.0是现在流行的一种蓝牙传输协议,其中BLE是BluetoothLowEnergy低功耗蓝牙的简写。整个协议我也只是一知半解,就讲点在应用过程中了解的东西。其余大家感兴趣可以直接搜索下。
6.先明确几个概念:(个人理解,有问题欢迎指出)
7.MAC地址:(MediaAccessControlAddress)蓝牙设备的物理地址,每个设备只有一个唯一值。
8.UUID:(UniversallyUniqueIdentifier)通用唯一识别码,一种软件识别码,一个设备中可以有多个UUID,一个UUID对应一个软件服务部分。
9.服务(service):有关特征值的收集,用来操作特定功能,所以一个服务里可以有多个特征值。例如,“体温计”服务包括一个温度测量值,以及测量的时间间隔。
10.特征值(characteristic):在蓝牙设备之间传递的数据值,例如当前温度测量值。
11.服务、特征称为属性(attributes),并以UUID标识。实现者可能会为所用的专有格式挑选一个随机或伪随机UUID,但蓝牙技术联盟已预留一系列UUID(范围xxxxxxxx-0000-1000-8000-00805F9B34FB))供标准属性使用。
12.所以可以理解为:
13.MAC地址:一个人的名字。
14.服务:一个人做了一件事情。
15.特征性:考核这件事情的几个指标。
16.UIDD:用一串数字和字母表示事情或指标。
17.这些理解了,还要了解一下BLE4.0和传统蓝牙的不同,在单模情况下无法通用传统蓝牙的设备。所以开发小程序前,你要了解你的手机和要连接的蓝牙设备是否能满足BLE4.0的要求,否则硬件基础都不支持,谈何软件实现。
3.vConsole18.这是微信自带一个真机调试工具,因为蓝牙程序部分无法在“微信web开发者工具”中仿真调试,需要大量的真机调试,所以好好应用vConsole,在后续的开发中至关重要。
19.vConsole简要介绍
二、开发过程中的磕磕碰碰1.console.log先打出错误信息20.最开始按照蓝牙流程编写完小程序后,总是遇到各种错误,一个头两个大。
21.后来就在每段程序里加入:
22.console.log('连接蓝牙:',res.errMsg+res.errCode);
23.将全部错误信息打印出来和下表对比,就慢慢有了方向。
24.错误信息部分截图
2.不行就加延迟25.如果在使用多个蓝牙API且有先后或者参数传递关系,请加入适当延迟。
26.没有加延迟的后果是前一个API还没执行完成,后一个API就在执行了,这样后一个API缺少了一些必要的准备或参数。
27.vConsole中表现出两种情况,1中间状态的参数未赋值,2错误提示前一个API操作的结果出错
28.以wx.getBLEDeviceServices和wx.getBLEDeviceCharacteristics为例,两者之间有参数传递关系,所以需要延长。
wx.getBLEDeviceServices({deviceId:that.data.connectedDeviceId,success:function(res){for(leti0;ires.services.length;i++){if(res.services[i].uuid.toUpperCase().indexOf("FFE0")!-1){that.setData({serviceUUID:res.services[i].uuid,})console.log("UUID1:"+that.data.serviceUUID);break;}}},fail:function(res){}})setTimeout(function(){wx.getBLEDeviceCharacteristics({deviceId:that.data.connectedDeviceId,serviceId:that.data.serviceUUID,success:function(res){console.log('成功2:',res.errMsg+res.errCode);varnotify_id,write_id,read_id;for(leti0;ires.characteristics.length;i++){if(res.characteristics[i].properties.notify){notify_idres.characteristics[i].uuid;}if(res.characteristics[i].properties.write){write_idres.characteristics[i].uuid;}if(res.characteristics[i].properties.read){read_idres.characteristics[i].uuid;}}that.setData({characteristicId_notify:notify_id,characteristicId_write:write_id,characteristicId_read:read_id,})},fail:function(res){}})},1000)//添加延迟3.为什么iPhone比较难连29.就一个原因iPhone比较矫情。
30.使用iPhone时,就算你知道服务的UUID和特征值的UUID,与必须通过wx.getBLEDeviceServices和wx.getBLEDeviceCharacteristics两个API获得。就是上面写道那段代码。
31.服务的UUID和特征值的UUID,iPhone只识别大写字母,安卓大小写没关系。
32.安卓和iPhone还有一个不同点:Android上获取到的deviceId为设备MAC地址,iOS上则为设备的UUID。但是在实际应用中仅发现deviceId这个值不同,会影响界面布局,其他倒是没什么感觉。
33.最后在梳理下安卓和iPhone的连接过程:
34.安卓:
35.wx.getBluetoothDevices——获得MAC地址(deviceId)
36.wx.createBLEConnection——通过MAC地址创建连接
37.wx.getBLEDeviceServices——获得服务的UUID(ServicesId)如果已知ServicesId,可将ServicesId设置为常量,省略该步骤。
38.wx.getBLEDeviceCharacteristics——获得特征值的UUID(CharacteristicsId)如果已知CharacteristicsId,可将CharacteristicsId设置为常量,省略该步骤。
39.wx.notifyBLECharacteristicValueChanged——通过deviceId、ServicesId、CharacteristicsId启动notify模式
40.iPhone:
41.wx.getBluetoothDevices——获得设备的UUID(deviceId)
42.wx.createBLEConnection——通过设备的UUID创建连接
43.wx.getBLEDeviceServices——获得服务的UUID(ServicesId)不论是否已知ServicesId,都无法省略该步骤。
44.wx.getBLEDeviceCharacteristics——获得特征值的UUID(CharacteristicsId)不论是否已知CharacteristicsId,都无法省略该步骤。
45.wx.notifyBLECharacteristicValueChanged——通过deviceId、ServicesId、CharacteristicsId启动notify模式
46.所以,当你想要两者共用,就乖乖将wx.getBLEDeviceServices和wx.getBLEDeviceCharacteristics两个API都写进去。
4.如何获得可用的服务UUID47.通过wx.getBLEDeviceServices可以获得所有服务的UUID,但是那个是你需要的?
48.比如我就筛选了含有“FFE0”的UUID。
49.if(res.services[i].uuid.toUpperCase().indexOf("FFE0")!-1)
50.那么怎么获得自己想要的UUID那?
51.我通过一个APP(在哪下载忘记了,红框是它的logo),尝试了哪些UUID可以使用。
52.APP界面
5.读数据要用on,不能一口气读写太多53.比较坑的一点,读取数据建议使用wx.onBLECharacteristicValueChange。
54.读写操作的buffer是有大小限制,印象中是20个字节大小,如果你没有分段存储,就只能读取到头20个字节。
55.大于20字节只能分包发送或读取。微信小程序提供的API中没有自动分包的功能,这就只能自己手动分包了。
6.关于波特率56.暂时微信还没有提供设置蓝牙设备波特率的API,但是通过手机连接测试,波特率在9600-57600之间都可以连接。
后记57.我已从坑中爬出,写下此文,希望他人能爬的快点,哈哈哈哈!
微信小程序蓝牙应用小结-微信小程序ble-微信小程序ibeacon
浏览量:3092
时间:
来源:YYmzx
版权声明
即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。
最新资讯
-

即速应用,赋能企业玩转微信小程序智慧经营
作为国内领军的智慧商业经营服务商,即速应用始终秉承“让每个企业都拥有自己的智慧店铺”的愿景,持续赋能更多企业玩转智慧经营。即速应用旗下拥有“小程序搭建工具-即速应用”、“私域流量专家-即客云”等产品,帮助商家打通互联网全生态营销闭环。 -

即客云2.0重磅更新,让微信小程序运营更简单!
即客云作为一款基于企业微信的第三方工具,现从多维度提供超过30种功能,自上线以来,已服务多家企业,受到一致好评。近期,我们根据客户反馈和市场调研正式推出升级版 即客云2.0!更新了私域运营SOP,群日历功能,批量拓客,客户雷达,消息推送,个人欢迎语,帮助企业更好运用企业微信;同时提升了社群运营工作标准化,提升运营效率,帮助企业实现客户增长,玩转私域流量。 -

零代码 + AI 双轮驱动|即速应用解锁人工智能小程序开发新范式
无需代码、无需 AI 算法功底,普通人也能快速搭建智能小程序。即速应用将人工智能与零代码开发深度融合,推出 AI 智能生成能力,用户通过自然语言描述需求,AI 自动生成小程序页面、功能模块与后台配置,覆盖商城、预约、同城、社区团购等全场景。平台内置 AI 智能推荐、智能客服、用户画像分析等能力,一键对接微信生态,打通视频号、企业微信、短信跳转,帮企业快速落地 AI 应用,抢占智慧经营先机,让每家企业都拥有 AI 驱动的智慧店铺。










