Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

cordova-plugin-usbserialport

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cordova-plugin-usbserialport

Cordova plug-in for serial port

  • 0.0.4
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

cordova-plugin-usbserialport

Read English README.md

此插件是基于cordovarduino基础上,升级了usb-serial-for-android库后增加了相应的方法,目前可以很好的适用于常见的一些USB/Type-C转串口的串口硬件。使用此插件,可以在android手机上直接使用USB或Type-C接口的USB转458/232等串口。
此插件仅适用于Android

简介

此 Cordova/Phonegap 插件允许使用 USB On-The-Go (OTG) 从您的 Android 设备到您的串口板或其他USB供电的串行IO设备进行双向串行通信。

这意味着您可以使用 cordova-plugin-usbserialport 插件开发关于串口收发数据的Android应用

安装

cordova项目运行:

cordova plugin add cordova-plugin-usbserialport
# 或
cordova plugin add https://github.com/king2088/cordova-plugin-usbserialport.git

使用方法

您首先需要了解如何创建和上传一个简单的 Cordova 项目。 这里有一些关于 如何开始 在 Android 上使用 Cordova 的信息,这里是一个 简单的 Cordova plugin 可以用来熟悉插件系统。

使用方法:

android权限的原因,需要首先请求USB权限,使用以下代码请求权限:

usbSerialPort.requestPermission(function success(), function error());

获取设备信息(可选):

usbSerialPort.getDevice(function success(), function error());

获取串口打开状态(可选):

usbSerialPort.isOpen(function success(), function error());

其次,打开串口:

usbSerialPort.open(opts, function success(), function error());

opts 是JSON对象,包含如下属性:

  • baudRate: 波特率,默认9600
  • dataBits: 数据位,默认8
  • stopBits: 停止位,默认1
  • parity: 奇偶检验,默认0
  • dtr: 默认false (对于部分串口需要为true)
  • rts: 默认false (部分模块需要为true, 包括monkeyboard dab 模块)
  • sleepOnPause: 默认true. 如果为 false,则当应用程序进入后台(或屏幕关闭)时,OTG 端口将保持打开状态。 否则,端口会自动关闭,并在应用程序返回前台后恢复。

再次,写入和读取串口数据:

usbSerialPort.write(data, function success(), function error());
usbSerialPort.read(function success(buffer), function error());

data 是要写入串行端口的字符串表示形式。
buffer 读取的数据为 JavaScript ArrayBuffer。

除了使用usbSerialPort.write,您还可以使用usbSerialPort.writeHex 来发送hex-strings 并使用RS232 协议 驱动的硬件。

简而言之,usbSerialPort.writeHex('ff') 只会写入一个字节,而 usbSerialPort.write('ff') 会写入2个到串行端口。

除此之外,usbSerialPort.writeHex 的工作方式与 usbSerialPort.write 的工作方式相同。

然后,需要使用 usbSerialPort.readListener 监听串口数据返回。返回的数据为ArrayBuffer,可参考如下代码:

usbSerialPort.readListener(
function success(data){
    var view = new Uint8Array(data);
    console.log(view);
},
function error(){
    new Error("Failed to register read callback");
});

最后,关闭串口:

usbSerialPort.close(function success(), function error())

简单的代码示例

var errorCallback = function(message) {
    alert('Error: ' + message);
};

usbSerialPort.requestPermission(
    function(successMessage) {
        usbSerialPort.open(
            {baudRate: 9600},
            function(successMessage) {
                usbSerialPort.write(
                    '1',
                    function(successMessage) {
                        alert(successMessage);
                    },
                    errorCallback
                );
            },
            errorCallback
        );
    },
    errorCallback
);

完整的示例

创建 index.html:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
        <meta name="format-detection" content="telephone=no">
        <meta name="msapplication-tap-highlight" content="no">
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
        <link rel="stylesheet" type="text/css" href="css/index.css">
        <title>串口操作</title>
    </head>
    <body>
        <div class="app">
            <h1>串口操作</h1>
            <p><span id="pot">...</span></p>
            <p id="delta">...</p>
            <button id="on">写入1</button>
            <button id="off">写入0</button>
        </div>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
    </body>
</html>

创建 index.js:

var app = {
    initialize: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    onDeviceReady: function() {
        var potText = document.getElementById('pot');
        var delta = document.getElementById('delta');
        var on = document.getElementById('on');
        var off = document.getElementById('off');
        var str = '';
        var lastRead = new Date();

        var errorCallback = function(message) {
            alert('Error: ' + message);
        };
        // 首先请求USB权限
        usbSerialPort.requestPermission(
            // 如果用户授权
            function(successMessage) {
                // 打开串口
                usbSerialPort.open(
                    {baudRate: 9600},
                    // 如果串口成功打开
                    function(successMessage) {
                        // 监听串口
                        usbSerialPort.readListener(
                            function success(data){
                                // 解码返回的数据
                                var view = new Uint8Array(data);
                                if(view.length >= 1) {
                                    for(var i=0; i < view.length; i++) {
                                        // 如果我们收到一个\n,则消息完成,显示它
                                        if(view[i] == 13) {
                                            // 检查读取速率是否对应于串行打印速率 
                                            var now = new Date();
                                            delta.innerText = now - lastRead;
                                            lastRead = now;
                                            // 显示消息
                                            var value = parseInt(str);
                                            pot.innerText = value;
                                            str = '';
                                        }
                                        // 如果不是\n,则将所有消息累加
                                        else {
                                            var temp_str = String.fromCharCode(view[i]);
                                            var str_esc = escape(temp_str);
                                            str += unescape(str_esc);
                                        }
                                    }
                                }
                            },
                            // 监听错误信息
                            errorCallback
                        );
                    },
                    // 打开串口错误信息
                    errorCallback
                );
            },
            // 未授权错误
            errorCallback
        );

        on.onclick = function() {
            usbSerialPort.isOpen(opened => {
                if(opened) {
                    usbSerialPort.write('1');
                }
            }, err => {
                console.log(`发生错误:${err}`)
            })
        };
        off.onclick = function() {
            usbSerialPort.isOpen(opened => {
                if(opened) {
                    usbSerialPort.write('0');
                }
            }, err => {
                console.log(`发生错误:${err}`)
            })
        }
    }
};

app.initialize();

您的设备为未知设备?

感谢 usb-serial-for-android 库,您可以与 CDC、FTDI、Serial 等设备进行通信。

您的设备可能未在 https://github.com/mik3y/usb-serial-for-android 中列出。
如果您知道您的设备 VID(供应商 ID)和 PID(产品 ID),您可以尝试

usbSerialPort.requestPermission({vid: '1d50', pid: '607d'}, function success(), function error()); // 16进制
or
usbSerialPort.requestPermission({vid: 7504, pid: 24701}, function success(), function error()); // 整数

您还可以选择要使用的驱动程序。 选项是:

  • CdcAcmSerialDriver
  • Ch34xSerialDriver
  • Cp21xxSerialDriver
  • FtdiSerialDriver
  • ProlificSerialDriver

如果为空或不是其中之一,则默认为“CdcAcmSerialDriver”。

usbSerialPort.requestPermission({
        vid: '1d50',
        pid: '607d',
        driver: 'FtdiSerialDriver' // or any other
    },
    function success(),
    function error()
);

您可以使用“lsusb”(以十六进制返回 VID:PID)或查看您的 dmesg 日志在android上找到您的设备 VID 和 PID。

Keywords

FAQs

Package last updated on 29 Sep 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc