如何用Ionic结合cordova-plugin-ble-central读取idChamp® RS4的卡ID?
解决idChamp® RS4 BLE RFID读卡器获取卡号的问题
我之前做过类似的BLE RFID读写器集成,刚好能给你一些实际的经验参考。你现在能获取外设数据,说明连接部分已经没问题了,核心是要找到设备对应读卡数据的BLE特征,并订阅它的变化来获取卡号。
关键步骤拆解:
确认设备的服务与特征UUID
所有BLE设备的通信都是基于「服务(Service)」和「特征(Characteristic)」的,idChamp RS4肯定有专门用于传输卡号的特征。你需要查它的官方开发者文档(或者用nRF Connect这类BLE调试工具扫描设备,查看当卡片触碰时哪个特征会更新数据),找到对应的服务UUID和特征UUID——这是最关键的一步,比如这类RFID设备常用的UUID可能是0000ffe0-0000-1000-8000-00805f9b34fb(服务)和0000ffe1-0000-1000-8000-00805f9b34fb(特征),但具体以官方为准。连接后订阅特征的通知
当设备连接成功后,你需要调用ble.startNotification来订阅目标特征的变化,这样卡片触碰时,设备推送的数据会触发回调函数。解析收到的字节数据为卡号
设备传过来的数据是字节数组,你需要把它转换成十六进制字符串(通常就是卡号的格式)。
代码示例(Ionic + cordova-plugin-ble-central)
// 假设你已经通过ble.connect成功获取了device对象 import { Platform } from '@ionic/angular'; // 替换成你从官方文档或调试工具拿到的UUID const RFID_SERVICE_UUID = "YOUR_RFID_SERVICE_UUID"; const RFID_CHARACTERISTIC_UUID = "YOUR_RFID_CHARACTERISTIC_UUID"; constructor(private platform: Platform) { this.platform.ready().then(() => { // 确保平台就绪后再操作BLE }); } // 连接设备后调用这个方法开启卡号监听 startCardListening(device: any) { ble.startNotification( device.id, RFID_SERVICE_UUID, RFID_CHARACTERISTIC_UUID, (data: Uint8Array) => { // 把字节数组转成十六进制卡号 const cardId = this.bytesToHexString(data); console.log("读取到员工卡号:", cardId); // 这里可以把cardId绑定到页面UI上,比如显示在输入框或列表里 }, (error: any) => { console.error("订阅卡号特征失败:", error); } ); // 有些设备需要先发送指令开启读卡模式,比如写特定字节到某个特征 // 如果你的设备需要这一步,取消下面的注释并替换对应UUID和指令 // const ENABLE_READ_CMD = new Uint8Array([0x01, 0x02]); // ble.write( // device.id, // RFID_SERVICE_UUID, // "YOUR_CONTROL_CHARACTERISTIC_UUID", // ENABLE_READ_CMD, // () => console.log("已开启读卡模式"), // (err) => console.error("开启读卡模式失败:", err) // ); } // 字节数组转十六进制字符串的工具方法 private bytesToHexString(bytes: Uint8Array): string { return Array.from(bytes) .map(byte => ('0' + (byte & 0xFF).toString(16)).slice(-2)) .join('') .toUpperCase(); // 可选,转成大写格式 }
额外注意事项:
- 权限配置:Android需要在
AndroidManifest.xml中添加蓝牙和位置权限,iOS需要在Info.plist中添加NSBluetoothAlwaysUsageDescription权限,cordova-plugin-ble-central的文档里有详细配置说明。 - 设备兼容性:测试时尽量用实体设备(BLE在模拟器上支持不好),确保设备的蓝牙版本兼容。
- 异常处理:要处理设备断开连接、订阅失败等异常情况,比如在
ble.connect的失败回调中重新尝试连接。
内容的提问来源于stack exchange,提问作者huynhtridung
相关产品推荐
相关产品推荐

