博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
电子秤示数读取方案
阅读量:5886 次
发布时间:2019-06-19

本文共 2912 字,大约阅读时间需要 9 分钟。

hot3.png

背景:最近项目需要接入电子秤,老的方案只能在火狐浏览器里面使用而且只支持特定版本有点坑。而且电子秤在使用usb转接之后浏览器插件会是浏览器直接崩溃。记录下这次接入过程:

网上调研了几种方案:

1.公司以前的方案,github开源插件https://github.com/billhsu/jUART。这个插件好几年了,没有最新的编译版本不支持usb serial ctroller转接。

2.基于objectX控件的方案,这种方法好像只适用用ie浏览器,果断抛弃。

3.nodejs的serial服务,这种方案需要在客户端电脑部署nodejs环境,安装node-serial服务操作比较麻烦,而且对于大多数小白客户来讲就是天方夜谭。

4.基于chrome的chrome-serial访问方式,从github上找了一个开源的接入方案https://github.com/DavideMalvezzi/ChromeSerialPortExtension,安装chrome app解决。

下载开源代码,chrome使用开发模式加载进浏览器,然后在自己的网站上面直接调用js访问串口。

 

安装谷歌usb串口读取插件ChromeSerialPortExtension.crx(),安装方法如下:

 

web应用接入方法:

注意修改serial_port.js里面的extensionId,这个id就是你安装的ChromeSerialPortExtension.crx 在chrome下面的id。

下面举个postman的例子

1c8ad026b18ef402f1c23501cfc21196ddf.jpg

var serialPort = new SerialPort;if (serialPort && serialPort.setOnDataReceivedCallback) {    serialPort.setOnDataReceivedCallback(onNewData);}var tempWeight1 = '';var tempWeight2 = '';function onNewData(data) {    var str = "";    var dv = new DataView(data);    for (var i = 0; i < dv.byteLength; i++) {        str = str.concat(String.fromCharCode(dv.getUint8(i, true)));    }    tempWeight1 += str;    if (str.endsWith('')) {        tempWeight2 = tempWeight1;        tempWeight1 = '';    }}function openSerialPort() {    if (!serialPort || undefined == serialPort.isOpen) {        return;    }    if (serialPort.isOpen()) {        serialPort.closePort(            function (response) {            }        );    }    serialPort.openPort(        {            portName: 'COM1',            bitrate: 9600,            dataBits: "eight",            parityBit: "no",            stopBits: "one"        },        function (response) {            // console.log(response);            if (response.result === "ok") {                //Do something                window.setInterval(function () {                    if (tempWeight2) {                        currentWeight = tempWeight2.split("kg")[0].split('    ')[1];                        $("[sx-tab-id='obd-review'] #weight").val(currentWeight);                    }                }, 200);            }            else {                // Popup.alert(response.error);            }        }    );}function closeSerialListener() {    if (!serialPort) {        return;    }    serialPort.closePort(        function (response) {            if (response.result === "ok") {                //Do something            }            else {                Popup.alert(response.error);            }        }    );}//窗口重新加载事件window.onbeforeunload = function () {    if (!serialPort) {        return;    }    if (serialPort.isOpen && serialPort.isOpen()) {        serialPort.closePort(            function (response) {                if (response.result === "ok") {                    return null;                }                else {                    Popup.alert(response.error);                    return false;                }            }        );    }    return null;}

转载于:https://my.oschina.net/u/2485283/blog/2978991

你可能感兴趣的文章
maven环境快速搭建
查看>>
什么是单链表插入排序?
查看>>
mycncart 商品筛选 filter 模组设定教程
查看>>
【转】杰奇 jieqi 多线程自动采集同步源站 python源码
查看>>
Lucene6.0学习笔记——查看分词结果
查看>>
tomcat端口配置规范
查看>>
ubuntu 下crontab
查看>>
一步步安装nginx搭建流媒体服务器
查看>>
部署keepalived
查看>>
Android------底部导航栏BottomNavigationBar
查看>>
用memcached做实时分页缓存
查看>>
java运算符
查看>>
《Genesis-3D游戏引擎系列教程-高级篇》1:后期效果
查看>>
Jquery基本操作
查看>>
WM_COMMAND产生的条件
查看>>
http响应Last-Modified和ETag
查看>>
MySQL索引类型一览 让MySQL高效运行起来
查看>>
Linux下启动停止查看杀死Tomcat进程
查看>>
bt分析之bt种子发布---做种(2)
查看>>
makefile(一)makefile文件组成
查看>>