更新记录
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
安装方式
方式一:本地插件(推荐开发调试)
- 将
Phychips-RFID文件夹复制到 UniApp 项目根目录的nativeplugins/下 - 打开
manifest.json→ App原生插件配置 → 选择本地插件 → 勾选Phychips-RFID - 制作自定义基座运行调试
方式二:云端插件
将 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 │ 断开连接
└─────────────┘
注意事项
-
串口权限:设备需要对
/dev/ttyS1有读写权限。部分设备需要 root 或厂商预授权。 -
自定义基座:本插件包含 native .so 库,不支持标准基座调试,必须使用自定义基座或离线打包。
-
线程安全:所有
@UniJSMethod方法运行在 JS 线程(非 UI 线程),SDK 操作内部自带超时机制(1500ms),不会阻塞 UI。 -
事件监听时机:建议在
onLoad中注册事件监听,在onUnload中移除,避免内存泄漏。 -
连接顺序:必须先
connect成功后再调用其他 SDK 方法,否则会返回"Module not initialized"或"Transport not connected"错误。 -
默认配置说明:
applyDefaultConfig使用 FCC 频率区域(美国标准 902-928MHz)。中国用户请在调用后额外执行setFrequency({ region: 'CHN' })切换为中国频段。 -
功率单位:
txPower单位为 0.1 dBm,即传入300表示 30.0 dBm,传入270表示 27.0 dBm。 -
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)
编译步骤
- 用 Android Studio 打开
UniPlugin-Phychips-RFID工程 - 将
uniapp-v8-release.aar放入app/libs/目录(从 DCloud 离线 SDK 获取) - 执行 Gradle Task:
:uniplugin_phychips_rfid:assembleRelease - 编译产物:
- 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
- AAR:
- 将产物复制到
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 实时事件推送

收藏人数:
下载插件并导入HBuilderX
下载插件ZIP
下载 0
赞赏 0
下载 12379633
赞赏 1928
赞赏
京公网安备:11010802035340号