微信小程序实现蓝牙打印


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 相关文章推荐
Prototype1.5 rc2版指南最后一篇之Position
Jan 10 Javascript
保证JavaScript和Asp、Php等后端程序间传值编码统一
Apr 17 Javascript
Javscript删除数组中指定元素并返回新数组
Mar 06 Javascript
Javascript加载速度慢的解决方案
Mar 11 Javascript
js检测用户输入密码强度
Oct 22 Javascript
js获取元素的外链样式的简单实现方法
Jun 06 Javascript
bootstrap weebox 支持ajax的模态弹出框
Feb 23 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
Jul 21 Javascript
angular内置provider之$compileProvider详解
Sep 27 Javascript
Vue递归实现树形菜单方法实例
Nov 06 Javascript
vue项目添加多页面配置的步骤详解
May 22 Javascript
Element-UI中关于table表格的那些骚操作(小结)
Aug 15 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+MySQL判断update语句是否执行成功的方法
2014/08/28 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
jquery插件autocomplete用法示例
2016/07/01 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
node.js实现的装饰者模式示例
2017/09/06 Javascript
NodeJs通过async/await处理异步的方法
2017/10/09 NodeJs
基于vue.js无缝滚动效果
2018/01/25 Javascript
nodejs aes 加解密实例
2018/10/10 NodeJs
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
使用Python操作MySQL的一些基本方法
2015/08/16 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
简述Python中的进程、线程、协程
2016/03/18 Python
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
Python异常处理知识点总结
2019/02/18 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
通过cmd进入python的步骤
2020/06/16 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
什么是Smart Navigation?
2016/07/03 面试题
十佳少先队员演讲稿
2014/09/12 职场文书
给朋友的道歉短信
2015/05/12 职场文书
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang