微信小程序实现蓝牙打印


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代码
Aug 05 Javascript
jQuery实现类似滑动门切换效果的层切换
Sep 23 Javascript
jquery实现邮箱自动补全功能示例分享
Feb 17 Javascript
js/jquery获取文本框输入焦点的方法
Mar 04 Javascript
JS实现可调整倒计时间代码分享
Aug 18 Javascript
JS实现的3D拖拽翻页效果代码
Oct 31 Javascript
微信扫码支付零云插件版实例详解
Apr 26 Javascript
使用Vue写一个datepicker的示例
Jan 27 Javascript
微信小程序文章详情页跳转案例详解
Jul 09 Javascript
深入理解 ES6中的 Reflect用法
Jul 18 Javascript
通过实例解析javascript Date对象属性及方法
Nov 04 Javascript
解决js中的setInterval清空定时器不管用问题
Nov 17 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
PHP与已存在的Java应用程序集成
2006/10/09 PHP
PHP脚本数据库功能详解(上)
2006/10/09 PHP
php 移除数组重复元素的一点说明
2008/11/27 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
PHP 获取指定地区的天气实例代码
2017/02/08 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
Python3.2中的字符串函数学习总结
2015/04/23 Python
谈谈python中GUI的选择
2018/03/01 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2020/03/08 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
JNI的定义
2012/11/25 面试题
庆七一活动方案
2014/01/25 职场文书
社区端午节活动方案
2014/01/28 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
市场策划求职信
2014/08/07 职场文书
管理人员岗位职责
2015/02/14 职场文书
综合测评自我评价
2015/03/06 职场文书
作弊检讨书范文
2015/05/06 职场文书
新兵入伍决心书
2015/09/22 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫