这里不做蓝牙流程介绍,因为小程序在前进,官方文档也会变,写一篇博客去介绍API,也许明天API就变了。

这里就记录几个遇到的问题。

这里前提是你已经安装好了微信开发者工具,并且Hello World已经出来了:

去小程序蓝牙开发官方文档中可以直接从开发者工具中打开蓝牙demo,地址是:

小程序蓝牙开发官方文档

进去之后下图中点击:在开发者工具中预览效果

就可以直接打开demo项目。

demo中包含了,设备搜索,连接,发送和接收命令的基本代码,遇到的问题也从demo中说起。

遇到的第一个问题:

Demo中发送命令方法中发送了一个随机的16进制语句,我们实际开发中应该是发送设备对应的命令,

命令分为两种,一种Hex格式,一种是字符串转ASCII格式。

它们转换方式不太一样,但是最后的数据传输都是字节流方式传输。

不同之处就是你输入的命令是类似“START”这种明确的字符串还是类似“010102”这种明确的命令。

所以转换字节流的方式是有区别的,demo中提供的hex命令发送。

下面贴一下明确的命令,我这里是“START”、“STOP”等转换发送参数工具方法。

(说白了就是将你要发送的字符串一个一个的转换为对应的ASCII码)

// 字符串转byte
function stringToBytes(str) {var array = new Uint8Array(str.length);for (var i = 0, l = str.length; i < l; i++) {array[i] = str.charCodeAt(i);}console.log(array);return array.buffer;
}  

在wx.writeBLECharacteristicValue方法中发送:

writeBLECharacteristicValue() {/*START   = [83, 84, 65, 82, 84]STOP    = [83, 84, 79, 80]REQDATA = [82, 69, 81, 68, 65, 84, 65]*/var buffer = stringToBytes("START")console.log("发送服务码:" + this._characteristicId)wx.writeBLECharacteristicValue({deviceId: this._deviceId,serviceId: this._deviceId,characteristicId: this._characteristicId,value: buffer,success: function(res){console.log("发送成功", res)},fail(res){console.log("发送失败", res)}})},

这里我加了success和fail回调方法,理论上上面的命令已经发送出去了,但是到这里第二个问题接着就来了。

通过上面发送命令方式发送之后demo没有一点反映,

硬件也没有预期的效果(我这里发送START命令之后设备的灯从绿色变为蓝色。)

通过回调方法打印,发现代码走入fail中,错误码10004,查找文档说没有找到对应服务。

紧接着我将上面参数全部打印出来,看了半天发现上面传入的参数中,serviceId传的设备的ID,不是对应服务(这里是write服务的uuid)。

将上面的serviceId修改:

writeBLECharacteristicValue() {/*START   = [83, 84, 65, 82, 84]STOP    = [83, 84, 79, 80]REQDATA = [82, 69, 81, 68, 65, 84, 65]*/var buffer = stringToBytes("START")console.log("发送服务码:" + this._characteristicId)wx.writeBLECharacteristicValue({deviceId: this._deviceId,serviceId: this.serviceId,characteristicId: this._characteristicId,value: buffer,success: function(res){console.log("发送成功", res)},fail(res){console.log("发送失败", res)}})},

这样就好了(这点问题分析了一个多小时。。。。)

我以为我修改代码的时候不小心改错了,我又弄了个新的demo,

发现微信小程序蓝牙demo就是这个,应该是开发团队写demo的时候没有注意。

遇到第三个问题是我们设备定义好的数据格式,这里你可能不会出现,我就是记录下问题。

设备发送回来的数据每一包长21个字节,前四个字节是一个float类型,代表了一个数值,

4-8是一个float,8-12是一个float,12-16是一个无符号的int。

在解析的时候,我直接把传回来的byte[]转成16进制字符串,想16进制字符串在转换为float,最后发现做不到。

做Android使用Java解析没问题。

16进制转int可以,parseInt("参数",16)它提供的第二个参数可以做到,

但是parseFloat不行,直接转之后得到的不是NAN就是整形的一个数字。

最后换了个思路,直接使用byte[]去转float,代码如下:

var xAF = new Float32Array(characteristic.value.slice(0, 4))var yAF = new Float32Array(characteristic.value.slice(4, 8))var zAF = new Float32Array(characteristic.value.slice(8, 12))var itemData = {accelerationX: xAF[0],accelerationY: yAF[0],accelerationZ: zAF[0]}

小程序蓝牙开发官方demo--不能发送字符串命令或发送失败10004问题相关推荐

  1. 快来解锁小程序蓝牙开发技能

    微信小程序中很早就支持了蓝牙能力,看过不少的文档,知道大概的流程和能实现的效果,但是由于一直没有像样的实战项目导致也没有正经的开发上线过,本次缘于接到了一个外包项目,那就顺道记录一下开发的过程及遇到的 ...

  2. 微信小程序支付【官方demo使用手记】——支付签名验证错误,total_fee 不能为空

    场景:统一下单成功,微信小程序支付报错--签名验证错误. 从微信支付文档,下载的demo.用与改造成小程序支付,统一下单成功后,小程序调用报错: --签名验证错误. 解决:修改微信签名算法的配置:为M ...

  3. 微信小程序蓝牙通讯蓝牙模块demo

    公司项目用到蓝牙和硬件通讯,APP正在开发,弄一个微信小程序蓝牙通讯的demo,可能后期会有微信蓝牙的项目,第一次搞,遇到2个坑: 1.安卓和苹果获取的硬件服务UUID顺序不同 2.目前用的这一版 & ...

  4. 小程序蓝牙模块教程--小程序走过的坑(12)(最新版)

    小程序支持蓝牙连接,来讲讲小程序蓝牙连接过程 demo 1.初始化蓝牙设备 其他蓝牙相关 API 必须在 wx.openBluetoothAdapter 调用之后使用.否则 API 会返回错误(err ...

  5. 【微信小程序控制硬件14 】 微信小程序蓝牙+WiFi双控制ESP32-C3应用示范;(附带Demo)

    文章目录 一.前言 二.设备核心代码 2.1 蓝牙控制 2.2 WiFi控制 2.3 外设驱动 三.微信小程序核心代码 3.1 蓝牙搜索 3.2 蓝牙服务发现 四.感谢 另外,不要把我的博客作为学习标 ...

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

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

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

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

  8. 微信小程序蓝牙功能开发与问题记录

    一.蓝牙支持情况 1. 微信小程序对蓝牙的支持情况 目前普遍使用的蓝牙规格:经典蓝牙和蓝牙低功耗. 经典蓝牙(蓝牙基础率/增强数据率):常用在对数据传输带宽有一定要求的大数据量传输场景上,比如需要传输 ...

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

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

最新文章

  1. 路由器snmp配置_基于keepalived配置数据库主从实现高可用
  2. linux 安装gcc4.2,Linux操作系统下安装gcc4.2.*的方法
  3. 前端面试问题(持续更新)
  4. 计算机网络:socket-udp
  5. MATLAB教程目录
  6. TB6600原理图(最完整并量产过的版本!!)
  7. java帐篷_Java多线程之 Park和Unpark(十四)
  8. 服务器系统功能描述,Hadoop mapreduce核心功能描述
  9. html如何把上边角做成椭圆,使用css3的border-radius和border制作半圆、三角、椭圆等各种图形...
  10. Spring : 静态代理模式和JDK、CGLIB动态代理
  11. 图片素材网站|找素材、提升审美力就靠它了!
  12. EditText自定义边框和背景
  13. 在 Windows 下远程桌面连接 Linux - VNC 篇
  14. 网上阅卷系统php源码,又开源了,网上阅卷系统自动识别功能代码 | 学步园
  15. 如何安装Virtual Box的VBox Guest Additions扩展程序
  16. 车牌识别项目(3)sobel算法边缘检测
  17. 总结陈丹琦博士论文(一):NEURAL READING COMPREHENSION AND BEYOND
  18. 台式电脑显示无法连接服务器,台式电脑无法连接网络怎么办
  19. 香港云服务器网站备案,中国香港云服务器网站备案
  20. kodi没有中文设置_超详细带你解决KODI找不到中文的问题(XB0X ONE/安卓通用)

热门文章

  1. Elasticsearch DSL语法中queries/filters执行顺序探秘
  2. 基于Java socket的网络聊天室的设计与实现
  3. 51款BI产品、80种可视化工具、80张图(总有一款适合你)
  4. python数据库-3
  5. 逐梦旅程(著:毛星云)---学习笔记第三章
  6. 求职-平安产险科技一二面
  7. 图卷积神经网络 | Python实现基于GCN-GRU图卷积门控循环单元网络模型
  8. Web全栈~09.JavaScript入门
  9. TreeMap的用法
  10. ThinkPad E40取消FN功能键设置