uniapp蓝牙连接热敏打印机

uniapp蓝牙连接热敏打印机

需求:通过小程序连接蓝牙,打印指定内容

前提:根据打印机的品牌型号不同,所遵循的打印规范不同(具体询问卖家)
我使用的是佳博的tspl规范

准备:需要几个外部js(具体品牌不一样),相当于工具类 jar包 用于发送指令和对字符编码操作(重点)
js地址
流程: 打开蓝牙 搜索蓝牙设备 连接 打印 断开

简单来说就是:调用外部 js set值 js中的方法通过再调取其他js将值转化成指令,然后指令发送,

searchBle() { 
	var that = this
		if(uni.getStorageSync('deviceId')){ 
			uni.showToast({ 
			  title: '蓝牙已连接!要搜索蓝牙请先退出',
			  icon: 'none',
			  duration: 2000
			})
			return
		}
		console.log("点击搜索蓝牙")
		uni.openBluetoothAdapter({ 
			success(res) { 
				console.log("打开 蓝牙模块")
				console.log(res)
				that.onDevice()
				uni.getBluetoothAdapterState({   //获取本机蓝牙适配状态
					success: function(res) { 
						console.log(res)
						if (res.available) { 
							if (res.discovering) { 
								uni.stopBluetoothDevicesDiscovery()
							}
							//搜索蓝牙
							//开始搜寻附近的蓝牙外围设备
							console.log("开始搜寻附近的蓝牙外围设备")
							uni.startBluetoothDevicesDiscovery({ 
								success(res) { 
									console.log("搜寻附近的蓝牙外围设备")
									console.log(res)
								}
							})
	
						}
						 else { 
							console.log('本机蓝牙不可用')
						}
					},
				})
			}
		})
	},
	//监听寻找到新设备的事件
	onDevice(){ 
		console.log("监听寻找到新设备的事件---------------")
		var that = this
		//监听寻找到新设备的事件
		uni.onBluetoothDeviceFound(function(devices) { 
			console.log('--------------new-----------------------'+JSON.stringify(devices))
			var re = JSON.parse(JSON.stringify(devices))
			console.log("搜索到的蓝牙设备名字",re.devices[0].name + " 搜索到的蓝牙设备id " + re.devices[0].deviceId)
			let name = re.devices[0].name
			if (name != "") { 
				// this.getBluetoothDevices()
				console.log("搜索到的蓝牙:",name)
				let deviceId = re.devices[0].deviceId
				that.devices.push({     //把搜索到的新设备保存起来
					name: name,
					deviceId: deviceId,
					services: []
				})
				
			}
					
		})
	},
	//点击链接蓝牙
	onConn(item) { 
		if(uni.getStorageSync('deviceId')){ 
			uni.showToast({ 
			  title: '蓝牙已连接!',
			  icon: 'none',
			  duration: 2000
			})
			return
		}
		console.log(item)
		uni.showLoading({ 
			title: '蓝牙连接中',
			mask: true
		}) //显示加载动画
		var that = this
		console.log("保存到的设备有;",that.devices)
		console.log("连接蓝牙---------------" + item.deviceId)
		let deviceId = item.deviceId
		console.log(deviceId)
		uni.createBLEConnection({ 
			deviceId: deviceId,
			success:(res) => { 
				if (res.errMsg == "createBLEConnection:ok") { 
					console.log("连接蓝牙-[" + item.name + "]--成功")
					that.connId = deviceId;
					that.currDev = item
					setTimeout(function() { 
						that.getBLEServices(deviceId)
					}, 1500)
					uni.setStorageSync("deviceId",item.deviceId)//把已经连接的蓝牙设备信息放入缓存
				} else { 
					uni.showToast({ 
					  title: '连接蓝牙失败!请退出蓝牙重新连接',
					  icon: 'none',
					  duration: 2000
					})
					console.log(res)
				}
				//连接成功 关闭搜索
				uni.stopBluetoothDevicesDiscovery()
			},
		})
	},
	//获取已经连接的蓝牙设备的所有服务
	getBLEServices(_deviceId) { 
		var that = this;
		let deviceId = _deviceId
		console.log("获取蓝牙设备所有服务(service)。---------------")
		
		uni.getBLEDeviceServices({ 
			// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
			deviceId: deviceId,
			success:(res) => { 
				console.log(res)
				let serviceId = ""
				console.log("获取蓝牙设备成功的信息:",res)
				if(res.services.length == 0){ 
					uni.hideNavigationBarLoading()   //关闭加载动画
					uni.showToast({ 
					  title: '获取蓝牙服务失败!请退出蓝牙重新连接',
					  icon: 'none',
					  duration: 2000
					})
					
				}
				for (var s = 0; s < res.services.length; s++) { 
					let serviceId = res.services[s].uuid
					uni.getBLEDeviceCharacteristics({ 
						// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
						deviceId: deviceId,
						// 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取
						serviceId: serviceId,
						success:(res) => { 
							var re = JSON.parse(JSON.stringify(res))
	
							console.log('deviceId = [' + deviceId + '] serviceId = [' + serviceId + ']')
							for (var c = 0; c < re.characteristics.length; c++) { 
								if (re.characteristics[c].properties.write == true) { 
									let uuid = re.characteristics[c].uuid
									console.log(' deviceId = [' + deviceId + '] serviceId = [' + serviceId + '] characteristics=[' +
										uuid)
	
									for (var index in that.devices) { 
										if (that.devices[index].deviceId == deviceId) { 
											uni.showToast({ 
											  title: '连接蓝牙成功',
											  icon: 'success',
											  duration: 2000
											})
											uni.hideNavigationBarLoading()   //关闭加载动画
											that.bbb = true
											uni.setStorageSync("bbb",true)
											uni.setStorageSync("characteristicId",uuid)//把已经连接的蓝牙设备标识放入缓存
											uni.setStorageSync("serviceId",serviceId)//把已经连接的蓝牙设备ID放入缓存
											that.devices[index].services.push({ 
												serviceId: serviceId,
												characteristicId: uuid
											})
											break
										}
	
									}
	
								}
							}
						}	
					})
	
				}
	
	
	
			},
			fail(res) { 
				console.log(res)
			},
		})
	
	},
	//打印的数据

	 daying(){ 
	 
	  
	  let deviceId = this.currDev.deviceId;
	  			let serviceId = this.currDev.services[0].serviceId;
	  			let characteristicId = this.currDev.services[0].characteristicId;
	  			var command = tsc.jpPrinter.createNew()//引入tsc 创建对象 为了传输数据
	  			 console.log(command)
	  			 
	  	
			command.setCls()//清除缓冲区,防止下一个没生效
			command.setSize(39, 30)//设置标签大小,单位mm.具体参数请用尺子量一下
			command.setGap(0)//设置两个标签之间的间隙,单位mm.具体参数请用尺子量一下
			command.setCls()//清除缓冲区
			command.setText(75, 20, "TSS24.BF2", 0, 1, 1, this.info.name)//绘制商品名称
			// command.setText(50, 100, "TSS24.BF2", 0, 1, 1, "货号:______")
			command.setText(75, 115, "TSS24.BF2", 0, 1, 1, this.info.comNum)//绘制商品编号
			command.setText(75, 60, "TSS24.BF2", 0, 1, 1, "售价:")//绘制文字
			command.setText(140, 60, "TSS24.BF2", 0, 1, 1,this.info.selPrice)//绘制价格
			command.setBarCode(20, 155, "128", 48, 0, 0, 2, 2, this.info.comNum)//绘制code128条码
			command.setBar(300, 80, 5, 150);//绘制一条黑线
	  		command.setPrint(this.count)打印 this.count张
	  
	},// 点击断开蓝牙连接
	tomy (){ 
		var _this = this
		uni.closeBluetoothAdapter({ 
			success(res) { 
				uni.removeStorageSync('deviceId')
				uni.removeStorageSync("serviceId");
				uni.removeStorageSync("characteristicId");
				uni.setStorageSync("bbb",false);
				console.log(_this.bbb)
				console.log("退出蓝牙:",uni.getStorageSync('deviceId')+"和"+uni.getStorageSync("serviceId"))
				this.$navTo.togo("pages/zongcang/zongcang")
				
			}
		})
		
	},
    原文作者:Esacper
    原文地址: https://blog.csdn.net/smokebai/article/details/114664839
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞