微信小程序实现蓝牙打印


Posted in Javascript onSeptember 23, 2019

最近刚好完成了一个打印标签的项目,其中就涉及到了小程序的蓝牙功能。所以写下这篇粗略的文章记录一下,同时也是给即将做相关项目的亲们提供一个参考,也希望有什么描述不恰当或者技术上不正确的地方大家可以指出,一起进步。

蓝牙打印只要按这九个步骤(前六个步骤连接蓝牙,后三个步骤打印数据)就可以搞定啦!步骤如下:

第一步:初始化蓝牙模块 wx.openBluetoothAdapter

wx.openBluetoothAdapter({
 success (res) {
 console.log(res)//res:{errMsg: "openBluetoothAdapter:ok"}
 }
})

第二步:开始搜寻附近的蓝牙外围设备 wx.startBluetoothDevicesDiscovery

wx.startBluetoothDevicesDiscovery({
 //services: ['FEE7'],只搜索主服务 UUID 为 FEE7 的设备,如果明确知道主服务UUID可以用此项做筛选
 success (res) {
 console.log(res)//res:{errCode: 0, errMsg: "startBluetoothDevicesDiscovery:ok", isDiscovering: true}
 }
})

第三步:获取已搜素到的蓝牙设备列表 wx.getBluetoothDevices

wx.getBluetoothDevices({
 success: function (res) {
 console.log(res)//res:{errMsg: "getBluetoothDevices:ok", devices: Array(3)}
 }
})

第四步:监听寻找到新设备的事件 wx.onBluetoothDeviceFound(有时候会第三步会搜不到所以需要使用监听器去随时监听搜索到的蓝牙设备并返回给你)

wx.onBluetoothDeviceFound(function(res) {
 console.log(res)//res:{devices: Array(1)}
})

第五步:连接蓝牙设备 wx.createBLEConnection

wx.createBLEConnection({
 deviceId,//上面选择蓝牙设备的deviceId,例:连接第一个设备devices[0].deviceId
 success (res) {
 console.log(res)//{errCode: 0, errMsg: "createBLEConnection:ok"}
 }
})

第六步:停止搜寻附近的蓝牙外围设备 wx.stopBluetoothDevicesDiscovery(可以写在第五步成功回调之后,或者是

onUnload()函数里)
wx.stopBluetoothDevicesDiscovery({
 success (res) {
 console.log(res)
 }
})

第七步:获取蓝牙设备所有服务 wx.getBLEDeviceServices

wx.getBLEDeviceServices({
 deviceId,//已连接的蓝牙设备ID
 success (res) {
 console.log(res)//{errMsg: "getBLEDeviceServices:ok", services: Array(5), errCode: 0}
 }
})
//这边获取到了5个服务

第八步:获取蓝牙设备中某一个服务的所有特征值 wx.getBLEDeviceCharacteristics

var characteristics="";
wx.getBLEDeviceCharacteristics({
 deviceId,
 serviceId,//第七步的服务ID,
 success (res) {
 //res:{errMsg: "getBLEDeviceCharacteristics:ok", characteristics: Array(4), errCode: 0}
 //characteristics[0].properties: {read: true, write: false, notify: false, indicate: false}
 //特征值有好几种类型,我们这边打印需要的是item.properties.write为true的特征值
 for (var i = 0; i < res.characteristics.length; i++) {
 var item = res.characteristics[i];
 if (item.properties.write) {
 characteristics = item.uuid;
 }
 }
 //保存特征值
 }
})

第九步:向蓝牙设备特征值中写入数据 wx.writeBLECharacteristicValue

wx.writeBLECharacteristicValue({
 deviceId,
 serviceId,
 characteristicId,//上面保存的特征值
 value: buffer, // 这里的value是ArrayBuffer类型,中间层传过来的打印数据前端自己做转换,转换过程我这边就不描述了;
 success (res) {
 console.log('writeBLECharacteristicValue success', res.errMsg)
 }
})
//特别提醒建议每次写入的buffer不超过20字节,超过会有写入错误的风险,所以一个打印的内容可能要拆成N个20字节的buffer去循环writeBLECharacteristicValue,这样就能打印成功啦。

附:

微信小程序官方文档

示例代码(uniapp实现小程序蓝牙打印简易流程)

另注:无论是原生、WePY、mpvue或uniapp、调用步骤都是一样的,不过调用API的前缀需要改成对应的就OK了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js资料prototype 属性
Mar 13 Javascript
Node.js中的流(Stream)介绍
Mar 30 Javascript
js实现搜索框关键字智能匹配代码
Mar 26 Javascript
JavaScript tab选项卡插件实例代码
Feb 23 Javascript
Bootstrap前端开发案例一
Jun 17 Javascript
jQuery继承extend用法详解
Oct 10 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
Nov 04 Javascript
前后端如何实现登录token拦截校验详解
Sep 03 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
Oct 22 Javascript
koa2实现登录注册功能的示例代码
Dec 03 Javascript
JavaScript 继承 封装 多态实现及原理详解
Jul 29 Javascript
vue使用better-scroll实现滑动以及左右联动
Jun 30 Javascript
微信接入之获取用户头像的方法步骤
Sep 23 #Javascript
从零搭一个自用的前端脚手架的方法步骤
Sep 23 #Javascript
layui 实现加载动画以及非真实加载进度的方法
Sep 23 #Javascript
layui加载数据显示loading加载完成loading消失的实例代码
Sep 23 #Javascript
ES10的13个新特性示例(小结)
Sep 23 #Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
Sep 23 #Javascript
vue多页面项目中路由使用history模式的方法
Sep 23 #Javascript
You might like
短波的认识
2021/03/01 无线电
php中生成随机密码的自定义函数代码
2013/10/21 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
JavaScript 指导方针
2007/04/05 Javascript
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
React Native 环境搭建的教程
2017/08/19 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
Python之str操作方法(详解)
2017/06/19 Python
Python实现按特定格式对文件进行读写的方法示例
2017/11/30 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
Servlet面试题库
2015/07/18 面试题
小学信息技术教学反思
2014/02/10 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
廉洁使者实施方案
2014/03/29 职场文书
学生鉴定评语大全
2014/05/05 职场文书
保护地球的标语
2014/06/17 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
新手入门Mysql--概念
2021/06/18 MySQL
python程序的组织结构详解
2021/12/06 Python
Python3的进程和线程你了解吗
2022/03/16 Python