You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native安卓端访问SerialPort串口对接硬件板问题求助

React Native安卓串口通信问题解决方案

前置配置修正

缺少安卓原生侧配置是无法识别设备的核心原因,需先完成以下配置:

  • 给AndroidManifest.xml添加对应权限和意图过滤器:
<uses-permission android:name="android.permission.USB_PERMISSION" />
<uses-feature android:name="android.hardware.usb.host" android:required="true" />

<activity ...>
    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
    </intent-filter>
    <meta-data
        android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
        android:resource="@xml/device_filter" />
</activity>
  • 在res/xml目录下新建device_filter.xml,添加你硬件板对应的USB厂商ID(VID)和产品ID(PID),示例:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <usb-device vendor-id="1234" product-id="5678" />
    <!-- 可添加多个需要适配的设备ID -->
</resources>

代码逻辑修正

原有代码存在API调用、数据格式两个核心错误,修正后的可运行示例如下:

import SerialPortAPI from 'react-native-serial-port-api';
import { Buffer } from 'buffer';

// 1. 正确获取设备路径
const getDeviceList = async () => {
  // 该方法支持直接await返回结果,不需要同时传回调
  const paths = await SerialPortAPI.devicePaths();
  console.log("已连接串口设备路径:", paths);
  return paths;
}

// 2. 正确连接、读写串口
let serialPort = null;
const connectDevice = async (cfg) => {
  try {
    const { baudRate, serialPortName, stopBits = 1, parity = 0, dataBits = 8 } = cfg;
    // 打开串口前先确认设备路径存在、已经获取USB权限
    serialPort = await SerialPortAPI.open(serialPortName, { 
      baudRate, 
      stopBits,
      parity,
      dataBits
    });

    // 监听数据接收
    serialPort.onReceived(buff => {
      const hexStr = buff.toString('hex').toUpperCase();
      console.log("收到串口数据:", hexStr);
    });

    // 发送十六进制数据要先转成Buffer,不能直接发字符串
    const sendData = Buffer.from('A7B7', 'hex');
    await serialPort.send(sendData);
    console.log("数据发送成功");
  } catch (e) {
    console.error("串口操作失败:", e);
  }
}

// 3. 用完要关闭串口释放资源
const closeSerialPort = async () => {
  if (serialPort) {
    await serialPort.close();
    serialPort = null;
  }
}

其他排查思路

  • 如果还是无法识别设备,先确认你的安卓设备支持OTG功能,且已经开启OTG开关
  • 确认你的USB转串口芯片属于常见的FTDI、CH34x、CP210x系列,部分冷门芯片开源包默认没有适配
  • 如果上述包都无法满足需求,可以选择针对安卓高版本适配的专用串口包,适配Android 10+的权限规则

内容的提问来源于stack exchange,提问作者Raghu Vallikkat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:24:02