更新记录

1.0.0(2026-07-02) 下载此版本

首次上传,待客户反馈


平台兼容性

Phychips-RFID UniApp 原生插件

基于 Phychips SDK v1.0.0 封装的 UniApp Android 原生插件,用于 UHF RFID 标签盘点与管理。通过 XCTech UART 串口通信与 RFID 模块交互。

基本信息

项目
插件 ID Phychips-RFID
版本 1.0.0
平台 Android
最低 SDK Android 7.0 (API 24)
架构 armeabi-v7a, arm64-v8a
通信方式 UART 串口 (/dev/ttyS1)
依赖框架 AndroidX

插件目录结构

Phychips-RFID/
├── android/
│   ├── phychips-rfid-plugin.aar          # 插件主体
│   ├── xcheng_nodewrite_api_release_v1.aar  # 硬件通信库
│   └── libs/
│       ├── phychips-sdk-1.0.0.jar        # Phychips SDK
│       ├── armeabi-v7a/
│       │   └── libuart_native.so         # UART JNI (32位)
│       └── arm64-v8a/
│           └── libuart_native.so         # UART JNI (64位)
├── package.json                          # 插件描述
└── README.md

安装方式

方式一:本地插件(推荐开发调试)

  1. Phychips-RFID 文件夹复制到 UniApp 项目根目录的 nativeplugins/
  2. 打开 manifest.json → App原生插件配置 → 选择本地插件 → 勾选 Phychips-RFID
  3. 制作自定义基座运行调试

方式二:云端插件

Phychips-RFID 文件夹压缩为 ZIP 上传到 DCloud 插件市场,用户通过 HBuilderX 在线安装。


快速开始

// 引入插件
const rfid = uni.requireNativePlugin('Phychips-RFID');
const globalEvent = uni.requireNativePlugin('globalEvent');

// 1. 注册事件监听
globalEvent.addEventListener('rfidInventoryTag', (e) => {
    console.log(`标签: ${e.epc}  RSSI: ${e.rssi}  次数: ${e.count}`);
});

globalEvent.addEventListener('rfidInventoryEnd', (e) => {
    console.log(`盘点结束 - 总计: ${e.totalCount}, 唯一: ${e.uniqueCount}, 耗时: ${e.duration}ms`);
});

// 2. 连接设备
rfid.connect({ port: '/dev/ttyS1', baudrate: 460800 }, (res) => {
    if (res.code === 'success') {
        console.log('连接成功');

        // 3. 应用默认配置(一键初始化)
        rfid.applyDefaultConfig((r) => {
            if (r.code === 'success') {

                // 4. 开始盘点
                rfid.startInventory((r2) => {
                    console.log(r2.message);
                });
            }
        });
    }
});

// 停止盘点
rfid.stopInventory((res) => {
    console.log(res.message);
});

// 断开连接
rfid.disconnect((res) => {
    console.log(res.message);
});

API 参考

所有异步方法的回调参数格式统一为:

{
    code: "success" | "fail",  // 操作结果
    message: "...",            // 描述信息
    // ... 其他字段
}

connect(options, callback)

连接 RFID 模块。

参数:

字段 类型 必填 默认值 说明
port String /dev/ttyS1 UART 串口路径
baudrate Number 460800 波特率

示例:

rfid.connect({
    port: '/dev/ttyS1',
    baudrate: 460800
}, (res) => {
    // res.code: "success" | "fail"
    // res.message: 描述信息
});

disconnect(callback)

断开与 RFID 模块的连接。

rfid.disconnect((res) => {
    console.log(res.message); // "Disconnected"
});

isConnected(callback)

查询当前连接状态。

回调额外字段:

字段 类型 说明
connected Boolean 是否已连接
rfid.isConnected((res) => {
    console.log('连接状态:', res.connected);
});

softReset(callback)

对 RFID 模块执行软复位。复位完成后会触发 rfidModuleReset 事件。

rfid.softReset((res) => {
    console.log(res.message);
});

getModuleInfo(callback)

获取模块固件版本信息。

回调额外字段:

字段 类型 说明
version String 固件版本号
rfid.getModuleInfo((res) => {
    if (res.code === 'success') {
        console.log('固件版本:', res.version);
    }
});

applyDefaultConfig(callback)

一键应用默认配置。适合快速初始化设备,包含以下配置项:

  • 频率区域:FCC
  • LBT:禁用
  • 天线:端口1,功率 30.0 dBm,驻留 200ms
  • 跳频:启用
  • 盘点目标:EPC
  • 报告:RSSI + 频率
  • Q 算法:动态 (StartQ=4, MaxQ=15, MinQ=0)
  • 查询:Session S0, Target A, Toggle 启用
  • 停止条件:无限制(手动停止)
rfid.applyDefaultConfig((res) => {
    console.log(res.code === 'success' ? '配置成功' : '配置失败');
});

setFrequency(options, callback)

设置工作频率区域。

参数:

字段 类型 必填 说明
region String 频率区域标识

支持的 region 值:

频率区域
FCC 美国 FCC (902-928 MHz)
ETSI 欧洲 ETSI (865-868 MHz)
CHN / CHINA 中国 (920-925 MHz)
KOREA 韩国
JAPAN 日本
rfid.setFrequency({ region: 'FCC' }, (res) => {
    console.log(res.message);
});

setAntenna(options, callback)

配置天线参数。

参数:

字段 类型 必填 默认值 说明
port Number 1 天线端口号
txPower Number 300 发射功率 (单位: 0.1 dBm,300 = 30.0 dBm)
dwellTime Number 200 驻留时间 (ms)
rfid.setAntenna({
    port: 1,
    txPower: 270,    // 27.0 dBm
    dwellTime: 200
}, (res) => {
    console.log(res.message);
});

setInventoryParams(options, callback)

配置盘点参数。可选择性地配置部分参数,只传入需要修改的字段。

参数:

字段 类型 说明
profile String 传入任意值即启用 Profile 配置
qMode String Q 算法模式: "DYNAMIC""FIXED"
startQ Number 起始 Q 值 (默认 4)
maxQ Number 最大 Q 值 (默认 15)
minQ Number 最小 Q 值 (默认 0)
session String Session: "S0", "S1", "S2", "S3"
stopTime Number 自动停止时间 (ms),0 = 不自动停止
stopCycle Number 自动停止轮次,0 = 不限
rfid.setInventoryParams({
    qMode: 'DYNAMIC',
    startQ: 4,
    session: 'S0',
    stopTime: 10000  // 10秒后自动停止
}, (res) => {
    console.log(res.message);
});

startInventory(callback)

启动标签盘点。盘点过程中会持续触发 rfidInventoryTag 事件。

rfid.startInventory((res) => {
    if (res.code === 'success') {
        console.log('盘点已启动');
    } else {
        console.log('启动失败:', res.message);
    }
});

stopInventory(callback)

手动停止盘点。

rfid.stopInventory((res) => {
    console.log(res.message);
});

getInventoryStats()

同步获取当前盘点统计信息(无需回调)。

返回值:

字段 类型 说明
totalCount Number 累计读取次数
uniqueCount Number 唯一标签数
scanning Boolean 是否正在盘点
duration Number 盘点已持续时间 (ms)
const stats = rfid.getInventoryStats();
console.log(`唯一标签: ${stats.uniqueCount}, 总次数: ${stats.totalCount}`);

事件说明

通过 globalEvent 监听异步事件。所有事件在盘点过程中或连接状态变化时触发。

rfidInventoryTag

每读取到一个标签触发一次。

字段 类型 说明
epc String 标签 EPC(十六进制,空格分隔)
rssi Number 信号强度
count Number 该标签累计被读取次数
globalEvent.addEventListener('rfidInventoryTag', (e) => {
    console.log(`EPC: ${e.epc}, RSSI: ${e.rssi}, Count: ${e.count}`);
});

rfidInventoryEnd

盘点结束时触发(手动停止或达到停止条件)。

字段 类型 说明
totalCount Number 总读取次数
uniqueCount Number 唯一标签数量
duration Number 盘点持续时间 (ms)

rfidConnected

RFID 模块建立通信连接时触发。


rfidDisconnected

RFID 模块断开连接时触发。


rfidModuleReset

RFID 模块软复位完成时触发。此时可执行配置操作。


rfidTrace

SDK 内部调试信息,用于开发排查问题。

字段 类型 说明
message String 调试消息

典型使用流程

┌─────────────┐
│   connect   │  连接设备
└──────┬──────┘
       ▼
┌─────────────────┐
│ applyDefaultConfig │  初始化配置(或逐项配置)
└──────┬──────────┘
       ▼
┌─────────────────┐
│  startInventory  │  开始盘点
└──────┬──────────┘
       ▼
┌─────────────────────────┐
│ rfidInventoryTag 事件循环 │  持续接收标签
└──────┬──────────────────┘
       ▼
┌─────────────────┐
│  stopInventory   │  停止盘点
└──────┬──────────┘
       ▼
┌─────────────┐
│  disconnect  │  断开连接
└─────────────┘

注意事项

  1. 串口权限:设备需要对 /dev/ttyS1 有读写权限。部分设备需要 root 或厂商预授权。

  2. 自定义基座:本插件包含 native .so 库,不支持标准基座调试,必须使用自定义基座或离线打包。

  3. 线程安全:所有 @UniJSMethod 方法运行在 JS 线程(非 UI 线程),SDK 操作内部自带超时机制(1500ms),不会阻塞 UI。

  4. 事件监听时机:建议在 onLoad 中注册事件监听,在 onUnload 中移除,避免内存泄漏。

  5. 连接顺序:必须先 connect 成功后再调用其他 SDK 方法,否则会返回 "Module not initialized""Transport not connected" 错误。

  6. 默认配置说明applyDefaultConfig 使用 FCC 频率区域(美国标准 902-928MHz)。中国用户请在调用后额外执行 setFrequency({ region: 'CHN' }) 切换为中国频段。

  7. 功率单位txPower 单位为 0.1 dBm,即传入 300 表示 30.0 dBm,传入 270 表示 27.0 dBm。

  8. EPC 格式:返回的 EPC 为大写十六进制字符串,字节间以空格分隔,例如 "E2 00 68 12 01 23 45 67 89 AB CD EF"


编译说明(开发者)

如需修改插件源码并重新编译:

环境要求

  • Android Studio
  • JDK 8+
  • NDK 23.1.7779620
  • Gradle 8.4
  • UniApp Android 离线 SDK(含 uniapp-v8-release.aar)

编译步骤

  1. 用 Android Studio 打开 UniPlugin-Phychips-RFID 工程
  2. uniapp-v8-release.aar 放入 app/libs/ 目录(从 DCloud 离线 SDK 获取)
  3. 执行 Gradle Task: :uniplugin_phychips_rfid:assembleRelease
  4. 编译产物:
    • AAR: uniplugin_phychips_rfid/build/outputs/aar/uniplugin_phychips_rfid-release.aar
    • SO: uniplugin_phychips_rfid/build/intermediates/stripped_native_libs/release/.../libuart_native.so
  5. 将产物复制到 Phychips-RFID/android/ 对应位置

源码结构

uniplugin_phychips_rfid/src/main/java/com/phychips/uniplugin/
├── rfid/
│   └── PhychipsRFIDModule.java    # UniModule 主类,暴露所有 JS API
└── transport/
    ├── DemoTransport.java          # 传输层接口
    ├── UartBridge.java             # JNI 桥接(加载 libuart_native.so)
    └── XcTechTransport.java        # XCTech UART 传输实现

兼容性

项目 要求
HBuilderX >= 3.2.5
Android 系统 >= 7.0 (API 24)
CPU 架构 armeabi-v7a / arm64-v8a
UniApp 框架 vue2 / vue3 均支持
页面类型 .vue / .nvue 均可

更新日志

v1.0.0 (2024-07-02)

  • 初始版本
  • 支持 UART 串口连接
  • 支持 UHF RFID 标签盘点
  • 支持频率区域配置(FCC/ETSI/中国/韩国/日本)
  • 支持天线功率配置
  • 支持盘点参数精细调整
  • 支持 globalEvent 实时事件推送

隐私、权限声明

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

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

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

许可协议

MIT协议

暂无用户评论。