接上一篇 uniApp 对接安卓平板刷卡器, 读取串口数据 , 本文将详细介绍如何使用插件读取到串口数据

原理

通过uniApp 插件读取设备串口数据, 解析后供业务使用;

步骤

  1. 创建uniApp 项目;
  2. 添加插件 安卓串口通信 Fvv-UniSerialPort 安卓串口通信 Fvv-UniSerialPort - DCloud 插件市场
  3. manifest.json 中找到App原生插件配置, 选中上面的插件
  4. 添加测试代码   
    <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 = this
                serialPort.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");
        }
    },

  5. 制作自定义基座
  6. 如果项目没有配置本地打包环境和证书可以直接选择 公共测试证书, 去掉广告相关选项
  7. 运行时选自定义基座
  8. 刷卡测试
  9. 打包直接采用云打包即可

 

 

 

 

 

 

 

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐