更新记录

1.0.0(2026-06-03)

初版发布 读取usb串口数据


平台兼容性

uni-app(4.85)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× × × × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × - × ×

uni-app x(4.85)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × × × ×

其他

多语言 暗黑模式 宽屏模式
×

estplugin-usbserial

Android USB 串口通信 UTS 插件,适用于 uni-app / uni-app x 项目在 App-Android 端连接 USB 串口设备,实现设备检测、USB 授权、打开串口、发送指令、接收串口数据以及监听 USB 设备插拔事件。

功能特性

  • 支持 Android App 端 USB Serial 串口通信
  • 支持检测当前是否存在可用 USB 串口设备
  • 支持申请 USB 设备访问权限
  • 支持按指定波特率打开串口
  • 支持发送字节数组指令
  • 支持持续接收串口返回数据
  • 支持监听 USB 设备插入、拔出事件
  • 内置常见 USB 串口驱动适配:CH34x、CP21xx、FTDI、Prolific、CDC ACM

平台兼容

平台 支持情况
App Android 支持,Android 5.0+
App iOS 不支持
HarmonyOS 不支持
Web / H5 不支持
小程序 不支持

说明:非 Android 平台会返回“USB串口仅支持Android”等降级提示,不具备真实串口通信能力。

当前支持的驱动型号

插件当前通过 Android 端内置驱动表识别 USB 串口设备,支持以下 Vendor ID / Product ID 组合:

驱动 厂商 / 芯片 Vendor ID Product ID / 型号
Ch34xSerialDriver WCH / QINHENG 0x1A86 0x7523:CH340
Ch34xSerialDriver WCH / QINHENG 0x1A86 0x5523:CH341A
Cp21xxSerialDriver Silicon Labs 0x10C4 0xEA60:CP2102
Cp21xxSerialDriver Silicon Labs 0x10C4 0xEA70:CP2105
Cp21xxSerialDriver Silicon Labs 0x10C4 0xEA71:CP2108
Cp21xxSerialDriver Silicon Labs 0x10C4 0xEA80:CP2110
FtdiSerialDriver FTDI 0x0403 0x6001:FT232R
FtdiSerialDriver FTDI 0x0403 0x6014:FT232H
FtdiSerialDriver FTDI 0x0403 0x6010:FT2232H
FtdiSerialDriver FTDI 0x0403 0x6011:FT4232H
ProlificSerialDriver Prolific 0x067B 0x2303:PL2303
CdcAcmSerialDriver Arduino 0x2341 0x0001:UNO
CdcAcmSerialDriver Arduino 0x2341 0x0043:UNO R3
CdcAcmSerialDriver Arduino 0x2341 0x0010:Mega 2560
CdcAcmSerialDriver Arduino 0x2341 0x0042:Mega 2560 R3
CdcAcmSerialDriver Arduino 0x2341 0x003B:Serial Adapter
CdcAcmSerialDriver Arduino 0x2341 0x0044:Serial Adapter R3 / Mega ADK R3
CdcAcmSerialDriver Arduino 0x2341 0x003F:Mega ADK
CdcAcmSerialDriver Arduino 0x2341 0x8036:Leonardo
CdcAcmSerialDriver Arduino 0x2341 0x8037:Micro
CdcAcmSerialDriver Van Ooijen Technische Informatica 0x16C0 0x0483:Teensyduino Serial
CdcAcmSerialDriver Atmel 0x03EB 0x2044:LUFA CDC Demo App
CdcAcmSerialDriver LeafLabs 0x1EAF 0x0004:Maple
CdcAcmSerialDriver ARM mbed / DAPLink 0x0D28 0x0204:mbed
CdcAcmSerialDriver WCH / QINHENG 0x1A86 0x55D3:CDC ACM 设备
CdcAcmSerialDriver xxx 0x28E9 0x018A:xxx CDC ACM 设备

如果你的设备未被识别,请先通过 USB 工具确认设备的 Vendor ID / Product ID 是否在上表中。未列出的设备需要在插件驱动表中新增 VID/PID 适配后才能被默认探测到。

安装方式

  1. 在 DCloud 插件市场导入本插件到项目。
  2. 确认插件目录位于 uni_modules/estplugin-usbserial
  3. 在需要使用的页面或模块中按需导入 API。
import {
  registerReceiver,
  hasPermission,
  requestPermission,
  hasUsbDevice,
  isOpen,
  open,
  close,
  sendMsg
} from '@/uni_modules/estplugin-usbserial'

使用流程

推荐调用顺序:

  1. 调用 hasUsbDevice 检测是否存在 USB 串口设备。
  2. 调用 requestPermission 申请 USB 设备权限。
  3. 调用 open 按指定波特率打开串口。
  4. open 的回调中接收串口数据。
  5. 调用 sendMsg 发送字节数组指令。
  6. 页面关闭或不再使用时调用 close 释放串口连接。

API 说明

registerReceiver(callback)

注册 USB 设备插拔广播监听。

registerReceiver((res : any) => {
  console.log('USB 设备状态变化:', res)
})

返回示例:

{
  "action": "android.hardware.usb.action.USB_DEVICE_ATTACHED"
}

常见 action

  • android.hardware.usb.action.USB_DEVICE_ATTACHED:USB 设备已插入
  • android.hardware.usb.action.USB_DEVICE_DETACHED:USB 设备已拔出

hasUsbDevice(callback)

检测当前是否存在可识别的 USB 串口设备。

hasUsbDevice((res : any) => {
  console.log('USB 设备检测结果:', res)
})

成功返回示例:

{
  "status": true,
  "code": 0,
  "vender_id": 6790,
  "product_id": 29987,
  "device_id": 1002,
  "manufacturer": "wch.cn",
  "product_name": "USB2.0-Serial",
  "driver_name": "Ch34xSerialDriver",
  "msg": "获取USB串口设备成功"
}

失败返回示例:

{
  "status": false,
  "code": 101,
  "msg": "获取USB设备失败"
}

hasPermission(callback)

检测当前应用是否已拥有 USB 设备访问权限。

hasPermission((res : any) => {
  console.log('USB 授权状态:', res.status)
})

返回示例:

{
  "status": true
}

requestPermission(callback)

请求 USB 设备访问权限。Android 会弹出系统授权确认框。

requestPermission((res : any) => {
  console.log('USB 授权结果:', res)
})

成功返回示例:

{
  "status": true,
  "code": 0,
  "msg": "USB授权成功"
}

失败返回示例:

{
  "status": false,
  "code": 102,
  "msg": "USB授权失败"
}

open(baud, callback)

打开 USB 串口。baud 为波特率,例如 960057600115200

open 的回调既会返回打开结果,也会持续回调串口接收到的数据。

open(57600, (res : any) => {
  console.log('串口回调:', res)
})

打开成功返回示例:

{
  "code": 0,
  "vender_id": 6790,
  "product_id": 29987,
  "device_id": 1002,
  "manufacturer": "wch.cn",
  "product_name": "USB2.0-Serial",
  "msg": "打开串口设备成功"
}

已连接时再次调用返回示例:

{
  "code": 200,
  "msg": "已经连接,已更新数据回调"
}

串口数据回调说明:

  • 设备返回的数据会以字节数组形式回调。
  • 可根据业务协议自行转换为十六进制字符串、文本或其他结构。

isOpen(callback)

检测串口是否处于打开状态。

isOpen((res : any) => {
  console.log('串口是否已打开:', res)
})

返回示例:

true

sendMsg(options, callback)

向已打开的串口发送字节数组指令。

sendMsg({
  cmd: [0x01, 0x03, 0x00, 0x00, 0x00, 0x01]
}, (res : any) => {
  console.log('发送结果:', res)
})

成功返回示例:

{
  "code": 200,
  "msg": "发送完成"
}

失败返回示例:

{
  "code": -200,
  "msg": "尚未连接或连接断开"
}

close()

关闭串口连接并释放资源。

close()

建议在页面卸载、设备拔出或业务结束时调用。

完整示例

import {
  registerReceiver,
  hasUsbDevice,
  requestPermission,
  open,
  sendMsg,
  close
} from '@/uni_modules/estplugin-usbserial'

export function initUsbSerial() {
  registerReceiver((res : any) => {
    console.log('USB 插拔事件:', res)
  })

  hasUsbDevice((deviceRes : any) => {
    if (deviceRes.status != true) {
      console.log('未检测到 USB 串口设备:', deviceRes)
      return
    }

    requestPermission((permissionRes : any) => {
      if (permissionRes.status != true) {
        console.log('USB 授权失败:', permissionRes)
        return
      }

      open(57600, (serialRes : any) => {
        console.log('串口打开结果或接收数据:', serialRes)
      })
    })
  })
}

export function sendCommand() {
  sendMsg({
    cmd: [0x01, 0x03, 0x00, 0x00, 0x00, 0x01]
  }, (res : any) => {
    console.log('发送结果:', res)
  })
}

export function destroyUsbSerial() {
  close()
}

返回码说明

code 说明
0 成功
100 打开串口设备失败
101 获取 USB 管理器或 USB 设备失败
102 USB 授权失败
200 已连接或发送完成
-200 尚未连接、连接断开或当前平台不支持

注意事项

  • 插件仅支持 Android App 端,真机需要具备 USB Host 能力。
  • 使用前请确认设备已通过 OTG 或 USB 方式连接到 Android 设备。
  • open 内部会在未授权时触发授权申请,授权成功后自动打开设备。
  • 如业务需要先单独处理授权流程,可先调用 requestPermission,再调用 open
  • open 的回调会被持续用于接收串口数据,请避免在回调中执行耗时逻辑。
  • 发送前请先确认串口已打开,否则 sendMsg 会返回连接失败提示。
  • 页面销毁、设备拔出或不再使用串口时,请调用 close 释放资源。

常见问题

为什么检测不到 USB 设备?

请确认 Android 设备支持 USB Host,USB 串口设备已正确连接,并且设备芯片属于插件内置驱动支持范围。

为什么发送指令失败?

请先确认已完成 USB 授权并成功调用 open 打开串口。未连接或连接断开时,sendMsg 会返回 code: -200

如何处理接收到的串口数据?

open 回调中的串口数据为字节数组,可根据设备协议自行解析。例如转成十六进制字符串后再处理业务逻辑。

Web / H5 可以使用吗?

不支持。该插件依赖 Android 原生 USB Host 与串口驱动能力,Web / H5、小程序、iOS、HarmonyOS 均不支持真实串口通信。

版本

当前版本:1.0.0

隐私、权限声明

1. 本插件需要申请的系统权限列表:

android.permission.MOUNT_UNMOUNT_FILESYSTEMS

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。