微信小程序实现蓝牙打印


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 相关文章推荐
javascript第一课
Feb 27 Javascript
javascript 建设银行登陆键盘
Jun 10 Javascript
将字符串中由空格隔开的每个单词首字母大写
Apr 06 Javascript
js面向对象之公有、私有、静态属性和方法详解
Apr 17 Javascript
js+html5实现canvas绘制圆形图案的方法
Jun 05 Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
Jun 14 Javascript
JavaScript数据结构链表知识详解
Nov 21 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
Jan 09 Javascript
详解Puppeteer前端自动化测试实践
Feb 21 Javascript
前端路由&amp;webpack基础配置详解
Jun 10 Javascript
Vue事件处理原理及过程详解
Mar 11 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
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
PHP面向对象程序设计之类与反射API详解
2016/12/02 PHP
Javascript 自定义类型方法小结
2010/03/02 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
2016/03/13 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
Python字符串详细介绍
2015/05/09 Python
Tornado 多进程实现分析详解
2018/01/12 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
解决Python发送Http请求时,中文乱码的问题
2020/04/30 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
Python暴力破解Mysql数据的示例
2020/11/09 Python
什么是数据抽象
2016/11/26 面试题
如何写出好的Java代码
2014/04/25 面试题
工作自荐信
2013/12/11 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
工商管理自荐书
2014/07/06 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
何玥事迹观后感
2015/06/16 职场文书
七年级作文之秋游
2019/10/21 职场文书
代码解析React中setState同步和异步问题
2021/06/03 Javascript