微信小程序 蓝牙(点击出现弹窗,下拉选择蓝牙,点击即可传输数据)

编程入门 行业动态 更新时间:2024-10-26 08:34:06

微信小程序 <a href=https://www.elefans.com/category/jswz/34/1768306.html style=蓝牙(点击出现弹窗,下拉选择蓝牙,点击即可传输数据)"/>

微信小程序 蓝牙(点击出现弹窗,下拉选择蓝牙,点击即可传输数据)

不少博主都写过蓝牙小程序,但都是类似于蓝牙调试助手,使用起来很不方便,(多页面跳转,一个个自己手动选择uuid,serviceid等,给初学者带来了很大的困扰,或者直接写死,不知道咋改)按照正常的逻辑,蓝牙其实就是点击个图标,弹出来搜索到的周围蓝牙,然后点击蓝牙,之后就可以正常传输数据就成。在完成自己的第一个小程序时候,就用到了类似的功能。记录下,希望给大家参考。
实验效果:
刚点击进去的图片
点击蓝牙测试按钮触发了检测自己设备蓝牙是否打开,搜索周围蓝牙,以及监听函数等。
在弹窗里滑动选择自己需要的蓝牙,进行点击,既可以连接。为了更直观显示,我把连接到的蓝牙名字发送到了前端进行了显示
点击发送按钮,触发书写函数,进行发送数据。同时监听到发送的和接收到的内容。

index.js:37 
index.js:40 已蓝牙适配器
index.js:44 已查看蓝牙适配器状态
index.js:50 已搜索设备
lanya.js:78 获取到的蓝牙设备为 {errMsg: "getBluetoothDevices:ok", devices: Array(2)}
lanya.js:79 长度测试 2
lanya.js:84 蓝牙名 EWFF56DD4A69B7
index.js:62 此时temp的值 []
index.js:56 获取到的蓝牙设备名字********************************* {deviceId: "FF:56:DD:4A:69:B7", name: "EWFF56DD4A69B7", RSSI: -78, advertisData: ArrayBuffer(8), advertisServiceUUIDs: Array(1), …}
index.js:62 此时temp的值 [{…}]
index.js:37 
index.js:40 已蓝牙适配器
index.js:44 已查看蓝牙适配器状态
index.js:50 已搜索设备
lanya.js:78 获取到的蓝牙设备为 {errMsg: "getBluetoothDevices:ok", devices: Array(8)}
lanya.js:79 长度测试 8
lanya.js:84 蓝牙名 EWFF56DD4A69B7
lanya.js:84 蓝牙名 82200A090A06
lanya.js:84 蓝牙名 82200A093366
lanya.js:84 蓝牙名 82200A090ED7
lanya.js:84 蓝牙名 8200000116B8
lanya.js:84 蓝牙名 82200A093E63
index.js:62 此时temp的值 [{…}]
index.js:56 获取到的蓝牙设备名字********************************* {deviceId: "FF:56:DD:4A:69:B7", name: "EWFF56DD4A69B7", RSSI: -77, advertisData: ArrayBuffer(8), advertisServiceUUIDs: Array(1), …}
index.js:62 此时temp的值 (2) [{…}, {…}]
index.js:56 获取到的蓝牙设备名字********************************* {deviceId: "82:20:0A:09:0A:06", name: "82200A090A06", RSSI: -83, advertisData: ArrayBuffer(8), advertisServiceUUIDs: Array(1), …}
index.js:62 此时temp的值 (3) [{…}, {…}, {…}]
index.js:56 获取到的蓝牙设备名字********************************* {deviceId: "82:20:0A:09:33:66", name: "82200A093366", RSSI: -81, advertisData: ArrayBuffer(8), advertisServiceUUIDs: Array(1), …}
index.js:62 此时temp的值 (4) [{…}, {…}, {…}, {…}]
index.js:56 获取到的蓝牙设备名字********************************* {deviceId: "82:20:0A:09:0E:D7", name: "82200A090ED7", RSSI: -92, advertisData: ArrayBuffer(8), advertisServiceUUIDs: Array(1), …}
index.js:62 此时temp的值 (5) [{…}, {…}, {…}, {…}, {…}]
index.js:56 获取到的蓝牙设备名字********************************* {deviceId: "82:00:00:01:16:B8", name: "8200000116B8", RSSI: -86, advertisData: ArrayBuffer(8), advertisServiceUUIDs: Array(1), …}
index.js:62 此时temp的值 (6) [{…}, {…}, {…}, {…}, {…}, {…}]
index.js:56 获取到的蓝牙设备名字********************************* {deviceId: "82:20:0A:09:3E:63", name: "82200A093E63", RSSI: -90, advertisData: ArrayBuffer(8), advertisServiceUUIDs: Array(1), …}
index.js:62 此时temp的值 (7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
index.js:62 此时temp的值 (7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
index.js:78 severceUUID是 ["00001000-0000-1000-8000-00805F9B34FB"]
index.js:79 截取测试 1000
index.js:88 此时deviceId的值是 FF:56:DD:4A:69:B7
index.js:89 此时data里的deviceId是 FF:56:DD:4A:69:B7
index.js:90 此时data里的serviceUUIDSamll是 1000
index.js:104 已连接设备
index.js:107 已停止扫描设备
index.js:135 已经完成了获取服务特征值
index.js:136 延迟3秒前,此时的serciceId是 
lanya.js:136 停止扫描设备的函数已启用
index.js:96 {errCode: 0, errMsg: "createBLEConnection:ok"}
index.js:114 已进入第三层
index.js:115 获取到的设备名字是: {errMsg: "getBLEDeviceServices:ok", services: Array(5), errCode: 0}
index.js:118 打印出来所有的result.services[i].uuid 00001000-0000-1000-8000-00805F9B34FB
index.js:120 服务已找到
index.js:118 打印出来所有的result.services[i].uuid 0000FE59-0000-1000-8000-00805F9B34FB
index.js:120 服务已找到
index.js:118 打印出来所有的result.services[i].uuid 0000180A-0000-1000-8000-00805F9B34FB
index.js:120 服务已找到
index.js:118 打印出来所有的result.services[i].uuid 00001800-0000-1000-8000-00805F9B34FB
index.js:120 服务已找到
index.js:118 打印出来所有的result.services[i].uuid 00001801-0000-1000-8000-00805F9B34FB
index.js:120 服务已找到
index.js:138 延时3秒后,此时的serviceId是 00001000-0000-1000-8000-00805F9B34FB
index.js:143 {errMsg: "getBLEDeviceCharacteristics:ok", characteristics: Array(5), errCode: 0}
index.js:146 获取到的特征值id:00001001-0000-1000-8000-00805F9B34FB
index.js:154 此时的notifyCharacteristicId 
index.js:160 开启write的characteristicId:00001001-0000-1000-8000-00805F9B34FB
index.js:167 0
index.js:146 获取到的特征值id:00001002-0000-1000-8000-00805F9B34FB
index.js:148 开启notify的characteristicId:00001002-0000-1000-8000-00805F9B34FB
index.js:154 此时的notifyCharacteristicId 00001002-0000-1000-8000-00805F9B34FB
index.js:167 0
index.js:146 获取到的特征值id:00001003-0000-1000-8000-00805F9B34FB
index.js:154 此时的notifyCharacteristicId 00001002-0000-1000-8000-00805F9B34FB
index.js:146 获取到的特征值id:00001004-0000-1000-8000-00805F9B34FB
index.js:154 此时的notifyCharacteristicId 00001002-0000-1000-8000-00805F9B34FB
index.js:167 0
index.js:146 获取到的特征值id:00001005-0000-1000-8000-00805F9B34FB
index.js:154 此时的notifyCharacteristicId 00001002-0000-1000-8000-00805F9B34FB
index.js:167 0
index.js:181 此时的notifyCharacteristicId&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 00001002-0000-1000-8000-00805F9B34FB
index.js:188 {errCode: 0, errMsg: "notifyBLECharacteristicValueChange:ok"}
index.js:228 read读取成功
lanya.js:254 读取低功耗蓝牙的特征值得二进制数值成功
index.js:210 write函数内部的notity 00001001-0000-1000-8000-00805F9B34FB
index.js:212 $HC12,02
index.js:249 Uint8Array(8) [36, 72, 67, 49, 50, 44, 48, 50]
index.js:223 {errCode: 10012, errMsg: "writeBLECharacteristicValue:fail:operate time out"}

为了更直观,我贴出我连接时候真机调试显示的信息。
同时在串口助手里面,我也进行了测试。

然后我用串口助手发送12345进行了测试
是可以监听到的
下面便是完整的代码:

index.wxml
<view wx:if="{{showname}}">{{name}}</view>
<button bindtap="bluetooth">蓝牙测试</button>
<view class="modal-mask" bindtap="hideModal" catchtouchmove="preventTouchMove" wx:if="{{showble}}"></view>
<view class="modal-dialog" wx:if="{{showble}}"><view class="modal-title">可连接的蓝牙</view><view class="modal-content"><scroll-view scroll-y="true" style="height:150px;width:100%"><view wx:for="{{devicesname}}" wx:key="key" bindtap="connect" data-dev="{{item}}"><button class="info"><view class="name" style="white-space: pre-wrap;width:500rpx;height:40rpx" >{{item.name}}</view></button></view></scroll-view></view><view class="modal-footer"><view class="btn-cancel" bindtap="onCancel" data-status="cancel">取消</view><view class="btn-confirm" bindtap="onConfirm" data-status="confirm">确定</view></view>
</view>
<button bindtap="sendmessage">发送数据</button>

格式部分:index.wxss

/**index.wxss**/
/* pages/search/search.wxss */
/**index.wxss**/
/* pages/search/search.wxss */
.label {height: 40px;line-height: 40px;display: flex;flex-direction: column;align-items: center;justify-content: space-between;box-sizing: border-box;background-color: #2d2d2d;color: #EEE;
}
.item {position: relative;padding: 10px;margin: 5px 5px;height: 90px;border-bottom: 1px solid #D0D0D0;display: flex;flex-direction: column;align-items: left;justify-content: space-between;box-sizing: border-box;
}
.item .rss {position: absolute;height: 70px;line-height: 70px;right: 10px;
}
.item .name {height: 30px;line-height: 30px;border: 3rpx solid #faca82;
}
.item .uuid {padding-right: 50px;height: 40px;line-height: 1.5;font-size: 12px;
}
.showModal{position:absolute;height:50px;left:30%;width:40%;top:40%;background: rgb(95, 228, 83);color:#fff;font-size: 20px;
}
/*以下全是弹窗样式*/
.modal-mask {width: 100%;height: 100%;position: fixed;top: 0;left: 0;background: #000;opacity: 0.5;overflow: hidden;z-index: 9000;color: #fff;
}
.modal-dialog {width: 80%;overflow: hidden;position: fixed;top: 40%;left: 0;z-index: 9999;background: #f9f9f9;margin-top: -180rpx;margin-left: 10%;border-radius: 36rpx;
}
.modal-title {padding-top: 30rpx;font-size: 20px;color: #030303;text-align: center;
}
.modal-title-sc {padding-top: 10rpx;font-size: 15px;color: #bebcbc;text-align: center;
}
.modal-content {/* padding: 0rpx 0rpx; */padding:0rpx 0rpx;height: 400rpx;text-align: left;
}
.info{height:40px;left:-120rpx;right: -150rpx;text-align:left;font-size:35rpx;color:#0a0000;
}
.info::after{border: 0px;
}
.name_List{position:absolute;left:0%;width:150%;text-align: left;border: 3rpx solid #faca82;
}
.quantity_List{position:absolute;left:40%;width:50%;text-align: left;
}
.reason_List{position:absolute;left:50%;width:50%;text-align: right;overflow: hidden;
}
.modal-content-return{padding: 15rpx 32rpx;font-size: 15px;color: #bebcbc;
}
.modal-footer {display: flex;flex-direction: row;height: 86rpx;border-top: 1px solid #dedede;font-size: 34rpx;line-height: 86rpx;
}
.btn-cancel {width: 100%;color: #666;text-align: center;border-right: 1px solid #dedede;
}
.btn-confirm {width: 50%;color: #ec5300;text-align: center;
}
.bluetooth{display: flex;position: relative;left: 55rpx;top: 50px;
}
.blelist{border: 3rpx solid #faca82;}

逻辑部分:index.js

const app = getApp()
// var util = require('../utils/util.js')
import{openBluetoothAdapter,getBluetoothAdapterState,startBluetoothDevicesDiscovery,getBluetoothDevices,createBLEConnection,stopBluetoothDevicesDiscovery,getBLEDeviceServices,getBLEDeviceCharacteristics,notifyBLECharacteristicValueChange,writeBLECharacteristicValue,readBLECharacteristicValue,closeBluetoothAdapter} from "../../request/lanya.js";
Page({data: {obj:'',showname:false,BluetoothState:false,temp:[],name:[],//在界面显示出来连接的蓝牙的名字showble:false,//初始化蓝牙弹窗不弹出啊//--------------------------蓝牙部分开始----------------------------------------devices:'',devicename:'',//存储搜索到的蓝牙设备的名字//蓝牙相关信息deviceId:'',//蓝牙设备id,每个蓝牙都不一样serviceUUIDSamll:'',//蓝牙可用服务id,用于查询我们要寻找的服务serviceId:'',//蓝牙服务id全名,用作参数调用小程序api自动获取notifyCharacteristicId:'',//该服务的notify特征值 可自动获取writeCharacteristicId:'',//该服务的write特征值 可自动获取readCharactersticId:'', msg:'ABCD',//要给蓝牙发送的数name:'',//--------------------------蓝牙部分结束----------------------------------------},async bluetooth(){var that=this;//1.打开弹窗that.setData({showble:true})//对蓝牙进行初始化等操纵。找到可以连接的设备console.log(this.data.deviceId)//1.打开蓝牙适配器var res=await openBluetoothAdapter();console.log("已蓝牙适配器")//2.查看蓝牙适配器状态var res=await getBluetoothAdapterState();console.log("已查看蓝牙适配器状态")that.setData({BluetoothState:true})//3.搜索设备res =await startBluetoothDevicesDiscovery();console.log("已搜索设备")//4.获取蓝牙设备信息,停一秒再获取res =await getBluetoothDevices();//过滤无效的蓝牙名字,把有效的发送到前端进行选择for(var i=0;i<res.devices.length;i++){if(res.devices[i].name!='未知设备'){console.log('获取到的蓝牙设备名字*********************************',res.devices[i]) that.data.temp.push(res.devices[i])// that.setData({//   devicesname:res.devices[i]// })}console.log('此时temp的值',that.data.temp)that.setData({devicesname:that.data.temp})}},
//连接函数
async connect(event) {var that=this;//获取到点击的那个蓝牙的各种参数if (that.data.BluetoothState) {const deviceId =event.currentTarget.dataset.dev.deviceIdconst severceUUID=event.currentTarget.dataset.dev.advertisServiceUUIDsconst name=`连接到的蓝牙名字:`+event.currentTarget.dataset.dev.nameconsole.log('severceUUID是',severceUUID)console.log('截取测试',severceUUID[0].substring(4,8))that.setData({name:name,deviceId:String(deviceId),serviceUUIDSamll:String(severceUUID[0].substring(4,8))})wx.showLoading({title: '正在连接...',})console.log('此时deviceId的值是',deviceId)console.log('此时data里的deviceId是',that.data.deviceId)console.log('此时data里的serviceUUIDSamll是',that.data.serviceUUIDSamll)}// res=await createBLEConnection(that.data.deviceId)//5.连接设备await   wx.createBLEConnection({deviceId:that.data.deviceId,success: (result) => {console.log(result)wx.showToast({title: '已连接成功',icon:'success',duration:2000})},})console.log("已连接设备")//6.停止扫描设备await  stopBluetoothDevicesDiscovery();console.log("已停止扫描设备")//7.获取连接设备的service服务var result=await getBLEDeviceServices(that.data.deviceId);
for(let i=0;i<result.services.length;i++){//把服务id放到数组中console.log('打印出来所有的result.services[i].uuid',result.services[i].uuid)if(result.services[i].uuid.toUpperCase().indexOf(that.data.serviceUUIDSamll)!=-1){console.log("服务已找到")if(result.services[i].uuid.substring(4,8)=='1000'){console.log('获取到的serviceId是',result.services[i].uuid)// wx.setStorageSync('123', result.services[i].uuid)that.setData({serviceId:result.services[i].uuid})}}
}console.log('此时的serciceId是',that.data.serviceId)console.log('此时的deviceid是',that.data.deviceId)
var res=await getBLEDeviceCharacteristics(that.data.deviceId,that.data.serviceId)
for(var i=0;i<res.characteristics.length;i++){//把特征值id输出到控制台console.log("获取到的特征值id:"+res.characteristics[i].uuid)if(res.characteristics[i].properties.notify & res.characteristics[i].properties.read){console.log("开启notify的characteristicId:"+res.characteristics[i].uuid);wx.setStorageSync('124',res.characteristics[i].uuid)this.setData({notifyCharacteristicId:res.characteristics[i].uuid})}console.log('此时的notifyCharacteristicId',that.data.notifyCharacteristicId)if(res.characteristics[i].properties.write & res.characteristics[i].properties.read & res.characteristics[i].properties.notify==false & i<3){//因为蓝牙的uuid中可能有多个uuid具有写的功能,不进行过滤的话会导致获取到多个uuid,赋值给write会出现不显示//加一个过滤,获取重复元素的第一个console.log("开启write的characteristicId:"+res.characteristics[i].uuid);wx.setStorageSync('125',res.characteristics[i].uuid)this.setData({writeCharacteristicId:res.characteristics[i].uuid}) }// if(res.characteristics[i].properties.read){//   console.log("开启read的characteristicId:"+res.characteristics[i].uuid & res.characteristics[i].properties.notify );//   this.setData({//     readCharacteristicId:res.characteristics[i].uuid//   })// }
}
console.log('获取读写监听特征值称成功')
console.log('此时的notifyCharacteristicId',that.data.notifyCharacteristicId)
console.log('此时的writeCharacteristicId',that.data.writeCharacteristicId)
// console.log('此时的readCharactersticId',that.data.readCharactersticId)
//9.开启监听
await notifyBLECharacteristicValueChange(that.data.deviceId,that.data.serviceId,that.data.notifyCharacteristicId)
//10.进行监听
wx.onBLECharacteristicValueChange((result) => {console.log(result)console.log(result.value)console.log(buf2string(result.value))function buf2string(buffer) {var arr = Array.prototype.map.call(new Uint8Array(buffer), x => x)return arr.map((char, i) => {return String.fromCharCode(char);}).join('');} 
})
that.setData({showble:false
})
},
sendmessage:function () {var that=this;console.log('write函数内部的notity',that.data.writeCharacteristicId)let model1="$HC12,02"console.log(model1)let number=that.stringToBytes(model1);//字符转字节wx.writeBLECharacteristicValue({characteristicId: that.data.writeCharacteristicId,deviceId: that.data.deviceId,serviceId: that.data.serviceId,value: number,success:(res)=>{console.log(res)},fail:(err)=>{console.log(err)}})readBLECharacteristicValue(that.data.writeCharacteristicId,that.data.deviceId,that.data.serviceId);console.log('read读取成功')},
test:function () {this.sendmessage('1234')
},
ab2hex:function(buffer){var hexArr =Array.prototype.map.call(new Uint16Array(buffer),function(bit){return ('00'+bit.toString(16).slice(-2))})return hexArr.join('');
},
// 字符串转byte
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;
},
//二进制转换为字符串
// ab2str(buf) {
//   return String.fromCharCode.apply(null, new Uint8Array(buf));
// },
ab2str:function(buf){return String.fromCharCode.apply(null, new Uint8Array(buf));
},
//ASCII码转16进制
strToHexCharCode:function(str) {if (str === "") {return "";} else {var hexCharCode = [];hexCharCode.push("0x");for (var i = 0; i < str.length; i++) {hexCharCode.push((str.charCodeAt(i)).toString(16));}return hexCharCode.join("");}
},//弹窗的取消按钮onCancel:function(){this.setData({showble:false,showname:true})},
//蓝牙弹窗的确认键
onConfirm:function () {//显示已经连接到的设备名字this.setData({showble:false})
},// onUnload:function () {
//   wx.closeBluetoothAdapter({
//     success: (res) => {
//      console.log(res);
//     },
//     fail: (err)=>{
//       wx.showToast({
//         title: '数据发送成功,但未关闭蓝牙,请手动关闭',
//         icon:'none'
//       })
//       console.log(err);
//     }
//   })
// }})

request/lanya.js(这个需要自己新建一个文件夹和文件)

//蓝牙插件
var app = getApp();//1.打开蓝牙适配器export const openBluetoothAdapter=()=>{return new Promise((resolve,reject)=>{wx.openBluetoothAdapter({success: (result) => {resolve(result);},fail: (err)=>{reject(err);wx.showToast({title: '请打开蓝牙',icon: 'none',duration:4000})}})})}//2.查看蓝牙适配器状态export const getBluetoothAdapterState=()=>{return new Promise((resolve,reject)=>{wx.getBluetoothAdapterState({success: (result) => {resolve(result);},fail: (err)=>{wx.showToast({title: '请打开蓝牙',icon: 'none',duration:3000})reject(err);}})})}//3.搜索设备export const startBluetoothDevicesDiscovery=()=>{return new Promise((resolve,reject)=>{wx.startBluetoothDevicesDiscovery({success: (result) => {resolve(result);},fail: (err)=>{wx.showToast({title: '搜索设备失败',icon: 'none'})reject(err);}})})}//4.获取蓝牙设备信息export const getBluetoothDevices=()=>{return new Promise((resolve,reject)=>{wx.getBluetoothDevices({success: (result) => {//对获取到的设备进行筛选,获取有名字的低功耗蓝牙console.log('获取到的蓝牙设备为',result)console.log('长度测试',result.devices.length)for(var i=0;i<result.devices.length;i++){//对蓝牙进行过滤if(result.devices[i].name!='未知设备'){console.log('蓝牙名',result.devices[i].name)resolve(result);//打印获取到的蓝牙信息}}},fail: (err)=>{wx.showToast({title: '未获取到设备信息',icon: 'none'})reject(err);}})})}//5.连接设备export const createBLEConnection=(deviceId)=>{return new Promise((resolve,reject)=>{wx.createBLEConnection({deviceId:deviceId,success: (result) => {console.log(result)resolve(result);wx.showToast({title: '已连接成功',icon:'success',duration:2000})},fail: (err)=>{console.log(err)wx.showToast({title: '未连接到蓝牙,可能是设备没通电',icon: 'none'})reject(err);}})})}//6.停止扫描设备export const stopBluetoothDevicesDiscovery=()=>{return new Promise((resolve,reject)=>{wx.stopBluetoothDevicesDiscovery({success: (result) => {resolve(result);console.log('停止扫描设备的函数已启用')},fail: (err)=>{reject(err);}})})}//7.获取连接设备的service服务export const getBLEDeviceServices=(deviceId)=>{console.log('已经进入第一层')return new Promise((resolve,reject)=>{console.log('已经进入第二层')wx.getBLEDeviceServices({deviceId:deviceId,doDiscover:true,success: (result) => {console.log('已进入第三层')console.log("获取到的设备名字是:",result)wx.showToast({title: '已发现蓝牙设备',icon:'success',duration:1500})resolve(result);},fail: (err)=>{wx.showToast({title: '未能获取服务',})reject(err);console.log(err)}})})}//8.获取连接设备具有读写功能服务的所有特征值export const getBLEDeviceCharacteristics=(deviceId,serviceId)=>{return new Promise((resolve,reject)=>{wx.getBLEDeviceCharacteristics({deviceId:deviceId,serviceId:serviceId,success: (result) => {resolve(result);console.log('获取到的各项特征值为',result)},fail: (err)=>{reject(err);console.log(err)}})})}//9.启动蓝牙设备特征值变化export const notifyBLECharacteristicValueChange=(deviceId,serviceId,notifyCharacteristicId)=>{return new Promise((resolve,reject)=>{wx.notifyBLECharacteristicValueChange({deviceId:deviceId,serviceId:serviceId,characteristicId:notifyCharacteristicId,state:true,success: (result) => {resolve(result);console.log('开始监听功能',result)},fail:(err)=>{console.log(err)}})})}//10.接受蓝牙发送的数据export const onBLECharacteristicValueChange=()=>{return new Promise((resolve,reject)=>{wx.onBLECharacteristicValueChange({// deviceId:deviceId,// serviceId:serviceId,// characteristicId:notifyCharacteristicId,state:true,success: (result) => {resolve(result);console.log('接收蓝牙发送的数据',result)},fail: (err)=>{reject(err);}})})}//11.向蓝牙写入数据export const writeBLECharacteristicValue=(deviceId,serviceId,writeCharacteristicId,value)=>{return new Promise((resolve,reject)=>{wx.writeBLECharacteristicValue({deviceId:deviceId,serviceId:serviceId,characteristicId:writeCharacteristicId,value:value,success: (result) => {wx.showToast({title: '已成功发送数据,蓝牙已打开',})resolve(result);},fail: (err)=>{reject(err);console.log(err)}})})}//读取低功耗蓝牙的特征值得二进制数值export const readBLECharacteristicValue=(writeCharacteristicId, deviceId,serviceId)=>{return new Promise((resolve,reject)=>wx.readBLECharacteristicValue({characteristicId: writeCharacteristicId,deviceId: deviceId,serviceId: serviceId,success:(result)=>{console.log('读取低功耗蓝牙的特征值得二进制数值成功')},fail: (err)=>{reject(err);}}))}//12.关闭蓝牙export const closeBluetoothAdapter=()=>{return new Promise((resolve,reject)=>{wx.closeBluetoothAdapter({success: (result) => {resolve(result);},fail: (err)=>{wx.showToast({title: '数据发送成功,但未关闭蓝牙,请手动关闭',icon:'none'})reject(err);}})})}function ab2hex(buffer) {let hexArr = Array.prototype.map.call(new Uint8Array(buffer),function(bit) {return ('00' + bit.toString(16)).slice(-2)})return hexArr.join('');}function ab2str(buf) {return String.fromCharCode.apply(null, new Uint8Array(buf));}

最后附上我做测试的硬件

ps:我还在wx.getBLEDeviceServices遇到个坑。网上不少教程都是到这一步为止就可以筛选出合适的serviceId,可能因为我用的蓝牙设备是工业级的。所以可供选择的serviceId比较多,我根据我的蓝牙特征用加了一个if再做一个判断。
最后附上我的qq:3233456044.有问题可以相互交流
我所用的蓝牙插件来自另外一个博主:
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《微信小程序连接蓝牙模块发送数据的详解以及封装版》, 一起来围观吧 =app&app_version=4.11.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

更多推荐

微信小程序 蓝牙(点击出现弹窗,下拉选择蓝牙,点击即可传输数据)

本文发布于:2024-03-08 19:33:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1722058.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:蓝牙   程序   数据   微信小

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!