RFID 和 NFC¶
RFID 是射频识别。NFC 是一种相关的超短距离技术,通常在 13.56 MHz 频率。
在简单的 DIY 设备中,这是一种在没有有线接触的情况下读取卡、钥匙链、贴纸或标签的方法。例如,用户带来灯丝线轴标签,设备选择材料配置文件。
主要错误是认为"RFID"意味着通用兼容性。实际上,你需要频率匹配、标签类型、读卡器芯片、库、接口、电源和天线放置都排成一行。
用途¶
在 iDryer 等项目中,RFID/NFC 可用于:
- 识别灯丝线轴;
- 选择材料配置文件;
- 将设置链接到标签;
- 服务访问;
- 用户操作确认;
- 易耗品追踪;
- 在容器、线轴或盒式磁带上的标签实验。
对于材料配置文件选择,通常只需读取标签的 UID 并存储 UID -> 材料 表就足够了。但这种方法必须有手动后备:如果标签无法读取,用户仍可手动选择配置文件。
RFID 和 NFC 简单来说¶
RFID 是一个广泛的术语。它包括不同的频率、标准、范围和标签类型。
NFC 通常意味着在 13.56 MHz 的近场通信,与 RFID 生态的一部分兼容。NFC 从银行卡、手机、NTAG 贴纸和 MIFARE 卡中被广为人知,但这并不意味着任何 NFC 读卡器读任何卡和任何数据。
对于小型 DIY 设备,13.56 MHz 模块最常见:
- RC522 / MFRC522;
- PN532;
- 现成的 USB/UART RFID/NFC 读卡器;
- 带 SPI、I2C 或 UART 的 NFC 模块。
有其他 RFID 系统,如 125 kHz 访问卡或 UHF RFID。它们与 13.56 MHz NFC 模块不兼容。
RC522¶
RC522 是一个便宜且常见的 13.56 MHz 模块,用于卡和标签。它通常与 Arduino 和 ESP32 配合使用。
优点:
- 便宜;
- 许多示例;
- 适合简单的 UID 读取;
- 通常通过 SPI 连接。
缺点:
- 通常仅适用于
3.3V电源和逻辑; - 便宜模块质量不同;
- 读取范围很小;
- 卡类型支持有限;
- 板上的
SDA引脚通常意味着 SPI 的SS/CS,而不是 I2CSDA。
如果你只需要以短距离从 MIFARE 类型的卡或钥匙链读取 UID,RC522 就可以工作。对于更广泛的 NFC 任务,PN532 通常更方便。
PN532¶
PN532 是一个更灵活的 NFC/RFID 控制器。许多 PN532 模块可以通过以下方式工作:
- SPI;
- I2C;
- UART。
但选择的接口通常需要在板上物理设置:跳线、DIP 开关或焊接。如果模块设置为 SPI 模式,你不能通过 I2C 连接模块。
如果你需要,PN532 通常被选择:
- 更多的接口选项;
- 更好的 NFC 场景支持;
- 与不同标签类型的工作;
- Python/CircuitPython/Raspberry Pi 场景;
- 更好的文档化模块。
但 PN532 也不是魔法通用读卡器。你需要检查特定的卡类型、库和工作模式。
频率和标签类型¶
标签必须与读卡器匹配。
购买标签前,检查:
- 频率:
13.56 MHz、125 kHz或其他; - 类型:MIFARE Classic、NTAG213/215/216、ISO14443A 或其他;
- 你是否只需要读取 UID;
- 你是否需要读取/写入自定义数据;
- 所选库是否支持所需的操作;
- 你是否可以物理地将标签放在线轴或机箱上。
如果任务是选择材料配置文件,通常只需读取 UID 并单独存储配置文件更简单。在标签内写入数据会使项目复杂化:你需要考虑数据格式、兼容性、写保护和写错误。
UID - 不是安全¶
卡或标签的 UID 可以方便地用作标识符。但 UID 不是可靠的保护。
对于线轴配置文件,这是正常的:如果已知 UID,选择配置文件。错误不是关键的,因为用户可以手动检查材料。
对于访问危险功能、服务模式或解锁加热器,UID 仅是弱的。某些 UID 可被复制或伪造,某些卡具有已知的安全限制。
实用规则:
- UID 对于便利和易耗品识别很好;
- UID 不应是危险模式的唯一保护;
- 对于加热器和电源部件,始终需要单独的安全检查。
电源和逻辑电平¶
许多 RFID/NFC 模块额定为 3.3V 逻辑。这对 RC522 和 PN532 分线模块特别重要。
检查:
- 模块电源电压;
- SPI/I2C/UART 上的逻辑电平;
- 板是否有稳压器;
- 信号线是否有电平匹配;
- 是否需要 I2C 上拉电阻;
- 是否需要与控制器的公共地。
模块板上 5V 引脚的存在并不总是意味着信号线容许 5V。某些模块可以通过稳压器从 5V 供电,但逻辑保持 3.3V。
连接接口¶
RFID/NFC 模块可通过 SPI、I2C 或 UART 连接。
SPI:
- 快速且常见;
- 需要
SCK、MOSI、MISO、CS; - 在 RC522 上,
SDA引脚通常实际意味着CS; - 重要的是不要混淆
MOSI和MISO。
I2C:
- 使用
SDA和SCL; - 可以与其他设备共享总线;
- 需要正确的上拉电阻;
- 重要的是检查地址和所选模块模式。
UART:
- 使用
TX和RX; - 一个设备的
TX进入另一个的RX; - 对某些现成的读卡器很方便;
- 需要匹配的速度和协议。
详细的 RC522 SPI 连接在实用部分:连接 RFID 读卡器。
天线和机箱¶
RFID/NFC 通过天线工作。在小型模块上,它通常直接印在板上。
阅读受以下因素影响:
- 天线大小;
- 标签方向;
- 距离;
- 机箱塑料;
- 附近的金属;
- 附近的线和电源线;
- 模块电源;
- 标签类型;
- 用户带卡的地方。
天线附近的金属可能会急剧恶化读取。如果读卡器安装在打印机的金属框架、螺钉、屏幕、电源或铝板附近,范围可能会变得更差。
对于机箱,最好制作清晰区域:"在此带标签"。不要期望线轴上的标签总是通过塑料、空气、轴、支架和附近的部件自动读取。
设备逻辑¶
RFID 应提高便利性,不应破坏控制。
线轴的正常逻辑:
- 用户带标签。
- 设备读取 UID。
- UID 在配置文件表中查找。
- 如果找到 UID,建议材料配置文件。
- 用户可以确认或更改配置文件。
- 如果 UID 未找到或未读取,可进行手动选择。
坏的逻辑:
- 没有标签设备无法启动;
- 未知标签选择随机配置文件;
- 读取错误静默地保持旧配置文件;
- 配置文件在没有用户确认的情况下改变;
- UID 是服务模式的唯一保护。
对于加热器,特别重要的是配置文件选择不绕过温度限制、传感器和应急保护。
购买前的检查清单¶
购买前,检查:
- 模块频率;
- 支持的标签类型;
- 接口:SPI、I2C、UART、USB;
- 电源电压;
- 逻辑电平;
- 电平匹配的可用性;
- 文档和引脚分配的可用性;
- 接口在板上如何选择;
- 是否有控制器的库;
- 天线大小;
- 标签类型和大小;
- 实际机箱中的预期范围;
- 是否可能进行手动后备选择。
对于第一个项目,选择有很好文档和示例的模块,而不是没有原理图的最便宜的模块。
典型错误¶
- 为
13.56 MHz读卡器购买了125 kHz卡; - 将
3.3VRC522 连接到5V电源或逻辑; - 在 RC522 上误认为
SDA引脚为 I2CSDA; - 混淆了
MOSI和MISO; - 在 SPI 中忘记了
CS/SS; - 在 PN532 上用跳线设置了一个接口但连接了另一个;
- 在需要的地方没有放置 I2C 上拉;
- 在金属附近放置天线;
- 在台上测试读取,但在机箱中没有测试;
- 使 RFID 成为选择配置文件的唯一方法;
- 使用 UID 作为可靠的访问保护;
- 没有处理"标签未读"的情况。
主要点¶
RFID/NFC 对于线轴识别、材料配置文件选择和简单的服务输入很有用。但它不是任何卡的通用读卡器,本身也不是可靠的安全系统。
首先选择频率和标签类型,然后选择模块、接口、电源和天线位置。然后在真实机箱中测试读取,并绝对保留手动后备选择。
参考资料¶
- Adafruit: PN532 RFID/NFC Breakout Wiring - PN532 连接、SPI/I2C/UART 选择和关于
3.3V逻辑的警告。 - Adafruit: PN532 RFID/NFC guide, single page - 完整 PN532 指南、CircuitPython/Python、接口和 SEL 跳线设置。
- Adafruit PN532 product page - PN532 模块的描述、支持的接口和 NFC/RFID 能力。
- NXP: MFRC522 Standard performance MIFARE and NTAG frontend - MFRC522/RC522 微芯片页面及其在
13.56 MHzMIFARE/NTAG 场景中的目的。 - DigiKey: MFRC522 Datasheet by NXP - MFRC522 的技术描述:
13.56 MHz读卡器/写卡器、ISO/IEC 14443 A/MIFARE/NTAG 支持和通信接口。