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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 17:36:07