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

求助:Ionic读取安卓设备上idChamp® RS4 BLE RFID的HID卡序列号失败

解决idChamp® RS4 BLE RFID模块在Ionic中无法读取HID卡号的问题

我之前帮开发者处理过类似的idChamp RS4 BLE模块集成问题,咱们一步步来排查和解决:

核心问题分析

首先要明确:bluetooth-serial是用于经典蓝牙的库,而idChamp RS4是BLE模块,所以你应该专注于使用ble库,但关键是要正确对接模块的BLE服务、特征,以及配置模块的工作模式。

分步解决方案

1. 确认模块的BLE服务与特征UUID

idChamp RS4的官方文档中会明确标注用于RFID数据推送的服务和特征UUID,通常:

  • 存在一个专门的RFID服务UUID(比如0000ffe0-0000-1000-8000-00805f9b34fb)
  • 该服务下有一个Notify类型的特征(比如0000ffe1-0000-1000-8000-00805f9b34fb),用于主动推送卡号数据

提示:如果找不到官方文档,可以用BLE调试工具(比如nRF Connect)扫描模块,查看它的服务和特征列表。

2. 确保Android权限配置正确

Android 12及以上版本需要额外的BLE权限,你需要在AndroidManifest.xml中添加:

<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 旧版本Android需要 -->

同时在Ionic代码中动态申请这些权限(可以用@ionic-native/permission库辅助)。

3. 正确的Ionic BLE集成代码示例

以下是完整的核心代码片段,包含扫描、连接、订阅Notify和数据解析:

import { BLE } from '@ionic-native/ble/ngx';
import { Platform } from '@ionic/angular';

export class RfidPage {
  // 替换为你从模块获取的实际UUID
  private readonly RS4_SERVICE_UUID = '0000ffe0-0000-1000-8000-00805f9b34fb';
  private readonly RS4_NOTIFY_CHAR_UUID = '0000ffe1-0000-1000-8000-00805f9b34fb';

  constructor(private ble: BLE, private platform: Platform) {}

  async ngOnInit() {
    await this.platform.ready();
    this.initRfidScan();
  }

  initRfidScan() {
    // 扫描BLE设备,超时5秒
    this.ble.scan([this.RS4_SERVICE_UUID], 5).subscribe(
      device => {
        if (device.name?.includes('idChamp RS4')) { // 匹配模块名称
          console.log('找到RS4模块:', device);
          this.connectToRfidModule(device.id);
        }
      },
      error => console.error('扫描失败:', error)
    );
  }

  connectToRfidModule(deviceId: string) {
    this.ble.connect(deviceId).subscribe(
      peripheral => {
        console.log('连接成功,发现服务:', peripheral.services);
        // 订阅Notify特征,接收卡号数据
        this.ble.startNotification(deviceId, this.RS4_SERVICE_UUID, this.RS4_NOTIFY_CHAR_UUID)
          .subscribe(
            data => this.parseRfidData(data),
            error => console.error('订阅Notify失败:', error)
          );
      },
      error => console.error('连接失败:', error)
    );
  }

  parseRfidData(data: Uint8Array) {
    // 将字节数组转换为十六进制字符串
    const hexCardId = Array.from(data)
      .map(byte => byte.toString(16).padStart(2, '0'))
      .join('');
    
    // 通常HID卡号会去除前缀(比如模块可能发送02 00 12 34 56,有效卡号是123456)
    // 根据模块实际输出调整解析逻辑
    const validCardId = hexCardId.slice(4); // 示例:去除前4位前缀
    console.log('解析后的HID卡号:', validCardId);
    // 这里可以将卡号展示到UI或进行后续业务处理
  }
}

4. 模块配置检查

部分idChamp RS4模块需要通过AT指令配置为自动上报卡号模式,比如:

  • 连接模块后,向Write类型的特征发送AT+RFID=ON\r\n指令(具体指令参考官方手册)
  • 如果模块处于手动查询模式,只有发送查询指令才会返回数据,不会主动推送

5. 排除硬件问题

先用官方提供的测试工具(比如idChamp Tool)连接模块,测试是否能正常读取HID卡号:

  • 如果测试工具能读取,说明硬件没问题,问题出在代码集成
  • 如果测试工具也读不到,检查模块供电、天线连接或模块本身是否故障

内容的提问来源于stack exchange,提问作者Trần Dương

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:04:57