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

如何用Ionic结合cordova-plugin-ble-central读取idChamp® RS4的卡ID?

解决idChamp® RS4 BLE RFID读卡器获取卡号的问题

我之前做过类似的BLE RFID读写器集成,刚好能给你一些实际的经验参考。你现在能获取外设数据,说明连接部分已经没问题了,核心是要找到设备对应读卡数据的BLE特征,并订阅它的变化来获取卡号。

关键步骤拆解:

  1. 确认设备的服务与特征UUID
    所有BLE设备的通信都是基于「服务(Service)」和「特征(Characteristic)」的,idChamp RS4肯定有专门用于传输卡号的特征。你需要查它的官方开发者文档(或者用nRF Connect这类BLE调试工具扫描设备,查看当卡片触碰时哪个特征会更新数据),找到对应的服务UUID和特征UUID——这是最关键的一步,比如这类RFID设备常用的UUID可能是0000ffe0-0000-1000-8000-00805f9b34fb(服务)和0000ffe1-0000-1000-8000-00805f9b34fb(特征),但具体以官方为准。

  2. 连接后订阅特征的通知
    当设备连接成功后,你需要调用ble.startNotification来订阅目标特征的变化,这样卡片触碰时,设备推送的数据会触发回调函数。

  3. 解析收到的字节数据为卡号
    设备传过来的数据是字节数组,你需要把它转换成十六进制字符串(通常就是卡号的格式)。

代码示例(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:43:43