# wearable nfc reader **Repository Path**: lingmessy/wearable-nfc-reader ## Basic Information - **Project Name**: wearable nfc reader - **Description**: Wearable nfc reader 可穿戴式nfc读写器 ---- 一个通过低功耗蓝牙(BLE)通信的可穿戴式(手环)nfc读写器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2023-11-19 - **Last Updated**: 2025-12-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # wearable nfc reader 一个通过低功耗蓝牙(BLE)通信的可穿戴式(手环)nfc读写器 ## 实现方式 硬件基于esp32-c3和rc522芯片实现 软件基于esp-components库中的gatts和rc522组件进行实现 ## 使用说明 手环作为一个GATT服务器,请参考下面的GATT格式定义,工作流程和nfc_conf命令说明进行使用。 安卓APP开发使用请参考安卓开发者文档: https://developer.android.com/develop/connectivity/bluetooth/ble/connect-gatt-server?hl=zh-cn 苹果APP开发使用请参考苹果开发者文档: https://developer.apple.com/documentation/corebluetooth/cbattribute ## 工作流程 设备分为三种工作模式,扫描模式,读模式和写模式,对应设备内部的三种操作,扫描操作,读操作和写操作 **扫描模式下:** 设备会不断扫描附近的卡,当扫描到的tag信息发生变化时存入`nfc_id`并通知客户端。 **读模式下:** 默认是挂起状态,挂起状态下不会进行任何操作 收到`SET_ACTIVE`命令时,进入活动状态,进行读取操作。直到成功读取一张卡的数据,会将卡数据保存到`nfc_data`,并将tag信息存入`nfc_id`并通知客户端,然后重新回到挂起状态 活动状态下可以通过发送`SET_SUSPEND`命令来手动进入挂起状态 **写模式下:** 默认是挂起状态,挂起状态下不会进行任何操作 收到16字节长度的数据时,会将该数据保存到`nfc_data`,并进入活动状态,进行写入操作。直到成功将`nfc_data`的数据写入到卡里,并将tag信息存入`nfc_id`并通知客户端,然后重新回到挂起状态 活动状态下可以通过发送`SET_SUSPEND`命令来手动进入挂起状态 ### nfc_conf命令说明 任意模式下 | 命令名 | 命令 | 作用 | | -------------- | :--: | :--------------------------------- | | SET_ENABLE | 0xF0 | 使能设备 | | SET_DISABLE | 0xF1 | 禁用设备 | | SET_SCAN_MODE | 0xE0 | 切换为扫描模式 | | SET_READ_MODE | 0xE1 | 切换为读模式 | | SET_WRITE_MODE | 0xE2 | 切换为写模式 | | ---- | ---- | 接受14字节数据对nfc_conf进行初始化 | 读模式下 | 命令名 | 命令 | 作用 | | ----------- | :--: | :--------------------------------- | | SET_ACTIVE | 0x01 | 进入活动状态,进行读取或写入或扫描 | | SET_SUSPEND | 0x02 | 进入挂起状态 suspend | 写模式下 | 命令名 | 命令 | 作用 | | ----------- | :--: | :------------------------------------------------- | | ---- | ---- | 写模式下接受16字节数据输入用于写入,并进入活动状态 | | SET_SUSPEND | 0x02 | 进入挂起状态 suspend | ### GATT格式定义 **nfc_conf** 权限:r,w | 长度 | 功能 | | :---: | :--------------------------------- | | 1bit | rc522使能,1使能,0禁用 | | 2bit | 扫描/读/写模式\|00扫描,10读,01写 | | 1bit | 读写状态,0正在读取/写入,1挂起 | | 4bit | 未定义 | | 1Byte | 块地址 | | 6Byte | keyA | | 6Byte | keyB | **nfc_id** 权限:r,i | 长度 | 功能 | | :---: | ------- | | 2Byte | tag类型 | | 4Byte | 序列号 | **nfc_data** 权限:r | 长度 | 功能 | | :----: | ---- | | 16Byte | 数据 | **nfc_stat** 权限:r | 长度 | 功能 | | :---: | ------------------------ | | 1Byte | 工作状态码/错误码/警告码 | | 1Byte | 电池状态码 |