The PN532 RFID/NFC module enables an Arduino/ESP32 to communicate with NFC tags and contactless cards. It typically supports multiple digital interfaces, commonly SPI (using SS, MOSI, MISO, SCK) and I2C (using SCL, SDA), along with power (VCC/GND) and control/interrupt signals (RSTO/IRQ).
| Pin | Signal | Description |
|---|---|---|
RSTO |
reset | PN532 reset line for resetting the NFC controller. |
IRQ |
interrupt | Interrupt request output from the PN532 to signal events to the host. |
GND |
ground | Ground reference for the PN532 module and host interface. |
VCC |
power | Main power input for the PN532 module. |
SS |
chip-select | SPI slave-select input for enabling PN532 SPI communication. |
MOSI |
MOSI | SPI data input from the host MCU to the PN532. |
MISO |
MISO | SPI data output from the PN532 to the host MCU. |
SCK |
SCK | SPI clock input from the host MCU for PN532 SPI mode. |
SCL |
SCL | I2C clock line for PN532 communication. |
SDA |
SDA | I2C data line for PN532 communication. |
VCC.1 |
power | Power input for the I2C-side header of the PN532 module. |
GND.1 |
ground | Ground reference for the I2C-side header. |
| From | To | Wire |
|---|---|---|
board:5V |
x1:VCC.1 |
red |
board:GND |
x1:GND.1 |
black |
board:A4 |
x1:SDA |
green |
board:A5 |
x1:SCL |
blue |
board:D2 |
x1:IRQ |
yellow |
board:D3 |
x1:RSTO |
purple |
This example was written and compile-checked for the arduino-uno. Codey Online adapts it to any other supported board for you.
#include <Wire.h>
#include <Adafruit_PN532.h>
// Arduino Uno pins used by this example:
// IRQ -> D2
// RSTO -> D3
Adafruit_PN532 nfc(2, 3);
void setup() {
Serial.begin(115200);
while (!Serial) {
;
}
Serial.println("PN532 NFC reader starting...");
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (!versiondata) {
Serial.println("Didn't find PN532 board");
while (1) {
delay(10);
}
}
Serial.print("Found PN532 chip, firmware version: ");
Serial.print((versiondata >> 24) & 0xFF, HEX);
Serial.print('.');
Serial.println((versiondata >> 16) & 0xFF, HEX);
nfc.SAMConfig();
Serial.println("Waiting for an ISO14443A card/tag...");
}
void loop() {
uint8_t uid[7];
uint8_t uidLength;
bool success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 1000);
if (success) {
Serial.print("Found tag UID: ");
for (uint8_t i = 0; i < uidLength; i++) {
if (uid[i] < 0x10) Serial.print('0');
Serial.print(uid[i], HEX);
if (i < uidLength - 1) Serial.print(':');
}
Serial.println();
delay(1000);
}
}
Describe what you want to build. Codey Online writes the code, draws the wiring diagram, compiles it and flashes your board straight from the browser.
Start for free