接上一篇 uniApp 对接安卓平板刷卡器, 读取串口数据 , 本文将详细介绍如何使用插件读取到串口数据
原理
通过uniApp 插件读取设备串口数据, 解析后供业务使用;
步骤
- 创建uniApp 项目;
- 添加插件 安卓串口通信 Fvv-UniSerialPort 安卓串口通信 Fvv-UniSerialPort - DCloud 插件市场
- manifest.json 中找到App原生插件配置, 选中上面的插件
- 添加测试代码
<template><view class="content"><text class="title">读取到的内容: {{cardnumber}}</text></view> </template><script>const serialPort = uni.requireNativePlugin('Fvv-UniSerialPort')export default {name: 'GetCardNumber',data() {return {cardnumber: '1111111111'}},methods: {onMessage(rec) {console.log(rec)/*** 自己的逻辑* 此处拿到的是读卡器返回的原始数据* 可能涉及到数值的转换,解析* */this.cardnumber += rec + "\r\n"}},created: function(option) {const self = thisserialPort.getAllDeviceList(res => {console.log('//设备列表', res)})serialPort.getAllDevicePath(res => {console.log('//路径列表', res)}),setTimeout(() => {serialPort.setPath('/dev/ttyS3')serialPort.setBaudRate(19200)serialPort.open(res => {if (!res.status) {uni.showToast({title: res.msg,duration: 2000,icon: "none"});return}uni.showToast({title: "串口监听已打开",duration: 2000,});serialPort.onMessageHex(rec => {this.onMessage(rec);}, send => {console.log(send)})})}, 10000)},} </script>
// 下面是几个常用的数据转换方法, 视业务情况而定 hex2int(hex) {var len = hex.length,a = new Array(len),code;for (var i = 0; i < len; i++) {code = hex.charCodeAt(i);if (48 <= code && code < 58) {code -= 48;} else {code = (code & 0xdf) - 65 + 10;}a[i] = code;}return a.reduce(function(acc, c) {acc = 16 * acc + c;return acc;}, 0); }, reverseHex(hex) {var result = '';for (var i = hex.length - 2; i >= 0; i -= 2) {result += hex.substring(i, i + 2);}return result; }, test(receive) {var reversedData = "";for (var i = receive.length - 1; i >= 0; i--) {var v = receive[i] & 0xFF;var hv = v.toString(16);if (hv.length < 2) {reversedData += '0';}reversedData += hv;}if (reversedData !== "") {try {var bigint = BigInt("0x" + reversedData);console.log('转换后的值', bigint.toString())} catch (e) {console.error(e);}} else {console.log("card string buffer is empty");} },
- 制作自定义基座
- 如果项目没有配置本地打包环境和证书可以直接选择 公共测试证书, 去掉广告相关选项
- 运行时选自定义基座
- 刷卡测试
- 打包直接采用云打包即可