小程序点击蓝牙设备进行通讯

1.初始化蓝牙设备 | | 提醒用户打开蓝牙设备

 player() {var that = this;uni.openBluetoothAdapter({ //调用微信小程序api 打开蓝牙适配器接口success: function(res) {// console.log(res)uni.showToast({title: '初始化成功',icon: 'success',duration: 800})that.findBlue(); //2.0},fail: function(res) { //如果手机上的蓝牙没有打开,可以提醒用户uni.showToast({title: '请打开蓝牙',type: 'error',icon: 'none'});}})},

2.搜索周边设备(此操作比较耗费系统资源,请在搜索并连接到设备后调用 uni.stopBluetoothDevicesDiscovery 方法停止搜索。)

 findBlue() {var that = thisuni.startBluetoothDevicesDiscovery({allowDuplicatesKey: false,interval: 0,success: function(res) {uni.showLoading({title: '正在搜索设备',})that.getBlue() //3.0}})},

3.获取搜索到的设备信息

 getBlue() {var that = this//uni.getBluetoothDevices获取在蓝牙模块生效期间所有已发现的蓝牙设备。包括已经和本机处于连接状态的设备uni.getBluetoothDevices({success: function(res) {uni.hideLoading();// console.log(res)that.BluetoothList = res.devices//将BluetoothList遍历给用户,当用户点击连接某个蓝牙时调用4.0},fail: function() {console.log("搜索蓝牙设备失败")}})},

4.当用户点击某个设备时将deviceId进行蓝牙连接

 connetBlue(deviceId) {// console.log(deviceId)var that = this;uni.createBLEConnection({// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接deviceId: deviceId, //设备idsuccess: function(res) {uni.showToast({title: '连接成功',icon: 'fails',duration: 800})console.log("连接蓝牙成功!-->11111")uni.stopBluetoothDevicesDiscovery({success: function(res) {console.log('连接蓝牙成功之后关闭蓝牙搜索');}})that.deviceId = deviceId;that.getServiceId() //5.0}})},

5.连接上需要的蓝牙设备之后,获取这个蓝牙设备的服务uuid

 getServiceId() {var that = thisuni.getBLEDeviceServices({// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接deviceId: that.deviceId,success: function(res) {console.log(res)//需要什么服务就用对应的services that.readyservices = res.services[0].uuid  //因设备而议:该特征值只支持读that.services = res.services[1].uuid        //因设备而议:该特征值支持write和notfy服务that.getCharacteId() //6.0}})},

6.如果一个蓝牙设备需要进行数据的写入以及数据传输,就必须具有某些特征值,所以通过上面步骤获取的id可以查看当前蓝牙设备的特征值

 getCharacteId() {var that = thisuni.getBLEDeviceCharacteristics({// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接deviceId: that.deviceId,// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取serviceId: that.services,success: function(res) {console.log(res)for (var i = 0; i < res.characteristics.length; i++) { //2个值var model = res.characteristics[i]if (model.properties.write) {//model.uuid:用来写入的uuid值//this.sendMy()给设备写入that.sendMy(model.uuid)}if (model.properties.notify) {//model.uuid:用来notify的uuid值that.notifyUuid = model.uuid}}}})},

7.将从后台服务获取的指令写入到蓝牙设备当中

 //buffer允许写入的uuidsendMy(buffer) {var that = this//this.string2buffer-->字符串转换成ArrayBufer(设备接收数据的格式ArrayBufer)var buff = that.string2buffer('3a0a0b0c0d02423122');  //9.0uni.writeBLECharacteristicValue({// 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取deviceId: that.deviceId,// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取serviceId: that.services,// 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取characteristicId: buffer, //第二步写入的特征值// 这里的value是ArrayBuffer类型value: buff,success: function(res) {//此时设备已接收到你写入的数据console.log("写入成功")that.startNotice()},fail: function(err) {console.log(err)},complete: function() {console.log("调用结束");}})},

8.创建链接,发送指令启用notify 功能接收设备返回的数据

 startNotice() {var that = this;uni.notifyBLECharacteristicValueChange({state: true, // 启用 notify 功能// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: that.deviceId,// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取serviceId: that.services,// 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取characteristicId: that.notifyUuid, //第一步 开启监听 notityid  第二步发送指令 writesuccess(res) {//接收蓝牙返回消息uni.onBLECharacteristicValueChange((sjRes)=>{// 此时可以拿到蓝牙设备返回来的数据是一个ArrayBuffer类型数据,//所以需要通过一个方法转换成字符串var nonceId = that.ab2hex(sjRes.value)//10.0console.log(sjRes)console.log('194行'+nonceId)})},fail(err) {console.log(err)}})}

9.将字符串转换成ArrayBufer

 string2buffer(str) {let val = ""if (!str) return;let length = str.length;let index = 0;let array = []while (index < length) {array.push(str.substring(index, index + 2));index = index + 2;}val = array.join(",");// 将16进制转化为ArrayBufferreturn new Uint8Array(val.match(/[\da-f]{2}/gi).map(function(h) {return parseInt(h, 16)})).buffer},

10.将ArrayBuffer转换成字符串

 ab2hex(buffer) {const hexArr = Array.prototype.map.call(new Uint8Array(buffer),function (bit) {return ('00' + bit.toString(16)).slice(-2)})return hexArr.join('')},

基本完成连接、写入、读取返回值…其他操作看官网

uniapp 蓝牙通讯(搜索/连接蓝牙、读、写)相关推荐

  1. Android手机靠近蓝牙模块自动连接蓝牙模块,断后自动重连。也可以手机靠近手机自动连接。连接成功率百分之百,可后台运行

    BluetoothChat手机与串口模块通信靠近自动连接2.0apk示例:链接: https://pan.baidu.com/s/1YoMNNBfLTAuXm2XukG5s9g 提取码: sm3h 全 ...

  2. 3,uniapp功能之—蓝牙秤,连接蓝牙秤获取重量实时显示在页面上(坤宏的蓝牙秤)

    1,在component里面新建一个blueTooth.vue组件 <template><view><view v-for="(item,index) in d ...

  3. android 蓝牙通讯实现手机蓝牙的开启,并扫描附近可见的蓝牙设备

    蓝牙是一种重要的短距离无线通信协议,广泛应用于各种设备(手机,医疗,汽车等).蓝牙是比较常用的无线通信设备,早研究成为手机的标配.现在的安卓手机基本上都有蓝牙,所有通过蓝牙对数据有很好的硬件基础 在A ...

  4. android蓝牙通讯方法,Android蓝牙通信开发教程(详解版)

    Android 系统提供蓝牙 API 包 android.bluetooth,允许手机设备通过蓝牙与其他设备进行无线连接. Android 的蓝牙 API 可提供以下功能: 需要说明的是,Androi ...

  5. 嵌入式linux蓝牙通讯,开发板蓝牙通信问题,有这方面经验的请进

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我的板子是fl2440,系统版本2.6.12 主机是红帽5,各项服务都有开. [root@bogon ~]# hciconfig hci0: Type: ...

  6. arduino蓝牙通讯代码_蓝牙4.0模块 无线数据传输模块 无线蓝牙串口 Arduino

    产品介绍: 蓝牙4.0模块是专为智能无线数据传输而打造的.该模块遵循BT2.1+EDR/3.0/4.0(BLE)蓝牙规范,支持SPP 蓝牙串口协议等.本模块集成了MCU 和蓝牙芯片,支持UART.SP ...

  7. 【uniapp】支付宝小程序蓝牙绑定步骤兼容ios蓝牙连接,并报 10017 写入特征值失败解决方案

    1.问题:安卓手机写入数据的时候一直报10017 写入特征值失败 2.解决方案 安卓手机需要设置低功耗蓝牙设备的最大传输单元my.setBLEMTU 必须在连接完蓝牙my.connectBLEDevi ...

  8. Qt开发上位机软件建立经典蓝牙通讯

    Qt开发上位机软件建立经典蓝牙通讯 之前做了一个具有经典蓝牙通讯功能的Windows上位机软件,在网上学习了相关博客以及参考了官方经典蓝牙例程之后,总结出了使用Qt建立经典蓝牙通讯的步骤,附带相关源码 ...

  9. arduino陀螺仪蓝牙通讯手势小车

    新的改变 目录 手势小车 1 一.学习目标 2 知识目标 2 技能目标 2 二.背景知识 2 三.知识储备 3 ARDUINO NANO 2 ARDUINO UNO 4 面包板 6 智能小车模块 4 ...

  10. 蓝牙开发经验小结——蓝牙通讯

    场景:控制端--普通手机:被控制端--XX设备(无屏幕.无法用户操作.有系统权限) 有关蓝牙通讯的文章,网上有很多,也有免费的开源代码下载,BluetoothChatService和Bluetooth ...

最新文章

  1. pil拷贝,剪切,缩放
  2. 阿里云服务器如何加强服务器的安全?有哪些安全措施?
  3. C++ 类里面,函数占用存储空间问题
  4. 深度解析 | 基于DAG的分布式任务调度平台:Maat
  5. 配置Hyper-V Server 资源计量
  6. java 和javafx_JavaFX 2 XYCharts和Java 7功能
  7. 防抖函数和节流函数的实现,这个是在某保险公司笔试题遇到的。
  8. Fresh for Mac(文件管理软件)
  9. 信息学奥赛一本通 1148:连续出现的字符 | OpenJudge NOI 1.9 11
  10. 全民K歌推荐系统架构、算法及后台设计实践
  11. 海量数据搜索——搜索引擎
  12. 智能泊车技术及现状详解
  13. 阿里云-密钥管理系统密钥导入功能
  14. 王欣的哲学逻辑与产品猜想
  15. 咖啡因到底会使人上瘾吗,这大概是最客观的解读
  16. 荣耀10青春版支持鸿蒙吗,荣耀10青春版详细评测:又一款年轻群体收割机
  17. thinkphp5.1接入银联支付
  18. 分布式光伏运维服务器,分布式光伏电站专业运维管理
  19. python复制单元格格式太多_你觉得复制粘贴excel浪费时间,那你该学这些技巧
  20. Flume介绍和使用

热门文章

  1. 边缘增强算法MATLAB,基于MATLAB的图像增强算法研究及实现
  2. U3D开发的逆天级大型游戏有哪些
  3. Python基础知识点回顾
  4. VMware.exe应用程序错误--应用程序无法正常启动(0xc000007b)错误解决方法
  5. 12306抢票,极限并发带来的思考?
  6. P3537 [POI2012]SZA-Cloakroom
  7. 国际反垃圾邮件组织有哪些?
  8. TypeError: only size-1 arrays can be converted to Python scalars 报错如何解决
  9. Looking for the Devil in the Details
  10. html实现爱情告白(附源码)