概述
PN532是一款由NXP公司生产的NFC(近场通信)控制器,它支持多种NFC通信协议,如ISO/IEC 14443 Type A和B、FeliCa、NFC-DEP等。PN532广泛应用于RFID标签读取、NFC支付、门禁系统等场景。本教程将介绍如何通过串口与PN532进行通信,实现NFC标签的读取。
硬件需求
- PN532 NFC读卡器模块
- 微控制器(如Arduino)
- 跳线若干
- USB转TTL串口模块(如果使用Arduino)
软件需求
- Arduino IDE
- PN532库(可在Arduino IDE的库管理器中搜索并安装)
连接方式
- 将PN532模块的TXD引脚连接到微控制器的RXD引脚。
- 将PN532模块的RXD引脚连接到微控制器的TXD引脚。
- 将PN532模块的GND引脚连接到微控制器的GND引脚。
- 将PN532模块的VCC引脚连接到微控制器的5V或3.3V(根据模块规格)。
代码示例
以下是一个简单的Arduino代码示例,用于读取NFC标签的信息:
#include <Wire.h>
#include <PN532.h>
PN532 nfc(SDA, SCK); // 使用软件SPI
void setup() {
Serial.begin(115200);
Serial.println("Hello!");
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (!versiondata) {
Serial.print("Didn't find PN53x board");
while (1); // 停止
}
Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
// 确保PN532处于SAM模式
nfc.SAMConfig();
}
void loop() {
uint8_t success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // 用于存储标签的UID
uint8_t uidLength; // 标签的UID长度
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
if (success) {
Serial.println("Found a card!");
Serial.print("UID Length: "); Serial.print(uidLength, DEC); Serial.println(" bytes");
Serial.print("UID Value: ");
for (uint8_t i=0; i < uidLength; i++) {
Serial.print(" 0x"); Serial.print(uid[i], HEX);
}
Serial.println("");
} else {
// PN532没有检测到卡片
Serial.println("No card detected.");
}
delay(1000); // 等待一秒钟再次检测
}
代码解释
- 首先,包含必要的库文件,并初始化PN532对象。
- 在
setup()
函数中,初始化串口通信,并检查PN532模块是否正确连接。 - 使用
nfc.SAMConfig()
函数配置PN532的被动目标检测模式。 - 在
loop()
函数中,不断检测是否有NFC标签靠近读卡器。 - 如果检测到标签,读取标签的UID,并将其打印到串口监视器。
注意事项
- 确保PN532模块的电源和接地连接正确。
- 根据你的微控制器和PN532模块的连接方式,可能需要调整SPI引脚连接。
- 在实际应用中,可能需要根据具体的NFC标签类型和协议进行相应的调整。
通过上述步骤和代码示例,你应该能够成功地通过串口与PN532 NFC读卡器进行通信,并读取NFC标签的信息。
✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进
❤欢迎关注我的知乎:对error视而不见
代码获取、问题探讨及文章转载可私信。
☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。
🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇