ESP32使用PN532读取NFC卡UID 如何关闭非NDEF格式提示
问题解决方法
1. 关闭"Tag is not NDEF formatted"提示的两种方案
- 方案1:直接修改NDEF库源码
你当前使用的don/ndef库中,该提示是库代码默认打印的,你可以找到Arduino库目录下的NfcAdapter.cpp文件,搜索Tag is not NDEF formatted字符串,将对应的Serial.println()语句注释或删除即可,不会影响UID读取功能。 - 方案2:跳过NDEF解析逻辑,直接读取UID
你当前调用的nfc.read()方法会默认尝试解析NDEF内容,而你只需要UID,完全可以不用调用该方法,直接使用PN532底层接口读取,修改后的代码参考如下:
#include <SPI.h> #include <PN532_SPI.h> #include <PN532.h> PN532_SPI pn532spi(SPI, SS); PN532 nfc(pn532spi); uint8_t uid[7] = {0}; uint8_t uidLength; void setup(void) { Serial.begin(115200); nfc.begin(); uint32_t versiondata = nfc.getFirmwareVersion(); if (!versiondata) { // 找不到PN532模块的提示,不需要也可以注释 Serial.print("Didn't find PN53x board"); while (1); } nfc.SAMConfig(); } void loop(void) { // 直接读Mifare卡的UID,超时时间设为100ms boolean success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 100); if (success) { // 打印UID for (uint8_t i = 0; i < uidLength; i++) { if(uid[i] < 0x10) Serial.print("0"); Serial.print(uid[i], HEX); } Serial.println(); delay(5000); } }
该写法完全跳过了NDEF解析步骤,不会产生任何额外的串口输出。
2. 适配需求的NFC库推荐
你只需要读取UID的场景下,更推荐使用elechouse PN532库,这个库是专门针对PN532硬件开发的,比通用NDEF库更轻量,功能也更贴合PN532的硬件特性,没有多余的默认日志输出,非常适合只做卡号读取的场景。
内容的提问来源于stack exchange,提问作者Andrew Taylor
相关产品推荐
相关产品推荐

