微信小程序实现蓝牙打印


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 相关文章推荐
jquery实现当滑动到一定位置时固定效果
Jun 17 Javascript
使用jquery 简单实现下拉菜单
Jan 14 Javascript
js生成验证码并直接在前端判断
May 15 Javascript
理解javascript中DOM事件
Dec 25 Javascript
javascript用正则表达式过滤空格的实现代码
Jun 14 Javascript
使用ajaxfileupload.js实现上传文件功能
Aug 13 Javascript
vue2.x+webpack快速搭建前端项目框架详解
Nov 30 Javascript
微信小程序实现列表下拉刷新上拉加载
Jul 29 Javascript
使用gulp构建前端自动化的方法示例
Dec 25 Javascript
基于layui table返回的值的多级嵌套的解决方法
Sep 19 Javascript
浅谈小程序globalData的那些事儿
Nov 01 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
Mar 25 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
WordPress中用于检索模版的相关PHP函数使用解析
2015/12/15 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
jquery中this的使用说明
2010/09/06 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
2013/03/29 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
2020/06/05 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
详解Python中如何写控制台进度条的整理
2018/03/07 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
Python flask框架端口失效解决方案
2020/06/04 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
党员实事承诺书
2014/03/26 职场文书
求职信结尾怎么写
2014/05/26 职场文书
党章培训心得体会
2014/09/04 职场文书
普通党员整改措施
2014/10/24 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
中学生自我评价范文
2015/03/03 职场文书
财务统计员岗位职责
2015/04/14 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫