PN532 NFC modülü, 13,56 MHz MIFARE Classic, Ultralight ve NTAG21x kartları okuyup yazabilen, I2C, SPI veya UART (HSU) ile bağlanan bir okuyucudur. I2C için DIP anahtar 1 ON, 2 OFF yapılır ve modül Arduino Uno'ya VCC-5V, GND-GND, SDA-A4, SCL-A5 olarak bağlanır.
PN532 NFC modülü, Arduino ve ESP32 projelerinde NFC kart ve etiketleri okumak ve yazmak için kullanılan esnek bir okuyucudur. Bu yazıda PN532'nin hangi kartları desteklediğini, I2C, SPI ve HSU modlarının DIP anahtarla nasıl seçildiğini, Arduino Uno bağlantısını, kart UID'sini okuyan örnek kodu ve karta veri yazarken dikkat edilecekleri anlatıyoruz. Geçiş kontrolü, yoklama ve NFC etiket projesi yapacak hobiciler ve öğrenciler için hazırlanmıştır.
PN532 NFC modülü nedir?
PN532 NFC modülü, NXP'nin PN532 okuyucu çipini, 13,56 MHz anteni ve gerekli pasif elemanları küçük bir kartta toplayan ve mikrodenetleyiciyle I2C, SPI ya da UART üzerinden haberleşen bir NFC okuyucu-yazıcı modülüdür. Kartları okuyabilir, yazabilir ve NFC'li telefonlarla eşler arası (peer-to-peer) haberleşebilir.
NFC'nin temellerini ve kart tiplerini NFC nedir ve NFC kart çeşitleri yazımızda ayrıntılı anlattık. Bu yazı doğrudan PN532 ile uygulamaya odaklanır.
PN532 hangi kartları okur?
PN532, 13,56 MHz'te çalışan ISO 14443A kartların neredeyse hepsini okur: MIFARE Classic 1K ve 4K, MIFARE Ultralight ve NTAG213/215/216 bunların başında gelir. Üretici belgelerine göre ISO 14443B, FeliCa ve ISO 18092 (NFC eşler arası) desteği de vardır.
| Kart / etiket | Standart | PN532 ile ne yapılır? |
|---|---|---|
| MIFARE Classic 1K (S50) | ISO 14443A | UID okuma, anahtarla blok okuma ve yazma |
| NTAG213/215/216 | ISO 14443A (NFC Type 2) | UID okuma, sayfa yazma, telefonla okunan NDEF kaydı |
| MIFARE Ultralight | ISO 14443A | UID okuma, sayfa okuma ve yazma |
| MIFARE DESFire | ISO 14443A | UID okuma; şifreli veri için ayrı kütüphane gerekir |
| 125 kHz EM4100 kart | Düşük frekans | Okunamaz (farklı frekans) |
Elinizdeki 13,56 MHz RFID NFC kart ya da NTAG213 NFC etiket PN532 ile sorunsuz çalışır. 125 kHz kartlar için ayrı bir düşük frekans okuyucu gerekir.
I2C, SPI ve HSU modları nasıl seçilir?
Elechouse V3 tipi kırmızı PN532 modüllerinde arayüz, kart üzerindeki iki küçük DIP anahtarla seçilir: I2C için 1 ON ve 2 OFF, SPI için 1 OFF ve 2 ON, HSU (UART) için ikisi de OFF. Fabrika ayarı genellikle HSU'dur; anahtarı besleme vermeden önce değiştirin.
| Mod | Anahtar 1 | Anahtar 2 | Bağlantı | Ne zaman seçilir? |
|---|---|---|---|---|
| HSU (UART) | OFF | OFF | TX, RX | Boş donanım seri portu varsa |
| I2C | ON | OFF | SDA, SCL | En az kablo, başka I2C cihazlarla ortak hat |
| SPI | OFF | ON | SCK, MISO, MOSI, SS | Hızlı ve kararlı haberleşme |
Modül 3,3-5 V ile beslenir. Üretici verisine göre I2C ve UART hatları 5 V TTL, SPI hatları 3,3 V TTL seviyesindedir. Raspberry Pi tipi kartlarda ve bazı üreticilerde DIP anahtar yerine jumper ya da lehim köprüsü bulunabilir; modülün arka yüzündeki tabloyu kontrol edin.
PN532 Arduino'ya nasıl bağlanır?
I2C modunda PN532 Arduino Uno'ya dört kabloyla bağlanır: VCC → 5V, GND → GND, SDA → A4 ve SCL → A5. PN532'nin I2C adresi 0x24'tür ve çoğu kütüphanede sabit tanımlıdır.
| PN532 | Arduino Uno | ESP32 DevKit |
|---|---|---|
| VCC | 5V | 3V3 |
| GND | GND | GND |
| SDA | A4 | GPIO21 |
| SCL | A5 | GPIO22 |
Kablolar 20 cm'yi geçmesin ve anten bölgesinin altında metal yüzey olmasın; metal, okuma mesafesini belirgin şekilde kısaltır. Bu yazıdaki örnekler PN532 NFC modülü ve Arduino Uno R3 ile hazırlanmıştır.
Kart UID'si nasıl okunur?
Kart UID'sini okumak için PN532 kütüphanesini kurar, modülü başlatır ve readPassiveTargetID fonksiyonuyla alana giren kartın kimlik numarasını alırsınız. Adımlar şunlardır:
- DIP anahtarı I2C konumuna (1 ON, 2 OFF) getirin ve modülü yukarıdaki tabloya göre bağlayın.
- Elechouse PN532 kütüphanesini GitHub'dan indirin; PN532 ve PN532_I2C klasörlerini Arduino'nun libraries klasörüne kopyalayın.
- Aşağıdaki kodu yükleyin ve seri monitörü 115200 baud'da açın.
- "PN532 bulunamadi" yazıyorsa kabloları ve DIP anahtarı kontrol edin.
- Kartı antene 1-3 cm mesafede tutun; UID onaltılık (hex) olarak ekrana yazılır.
#include <Wire.h>
#include <PN532_I2C.h>
#include <PN532.h>
PN532_I2C pn532i2c(Wire);
PN532 nfc(pn532i2c);
void setup() {
Serial.begin(115200);
nfc.begin();
if (!nfc.getFirmwareVersion()) {
Serial.println("PN532 bulunamadi");
while (1);
}
nfc.SAMConfig();
Serial.println("Karti yaklastirin");
}
void loop() {
uint8_t uid[7];
uint8_t uzunluk;
if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uzunluk)) {
for (uint8_t i = 0; i < uzunluk; i++) {
if (uid[i] < 0x10) Serial.print('0');
Serial.print(uid[i], HEX);
Serial.print(' ');
}
Serial.println();
delay(1000);
}
}
MIFARE Classic kartların UID'si genellikle 4 bayt, NTAG etiketlerinin UID'si 7 bayttır. Adafruit PN532 kütüphanesi de Arduino Kütüphane Yöneticisi'nden kurulabilen bir alternatiftir. UID ile yoklama ya da kapı kontrolü kurmak için RFID yoklama sistemi projemize bakabilirsiniz.
Karta veri nasıl yazılır?
MIFARE Classic karta yazmak için önce ilgili bloğun bulunduğu sektöre anahtarla kimlik doğrulaması yapılır, sonra 16 baytlık blok yazılır. Yeni kartlarda varsayılan anahtar genellikle FF FF FF FF FF FF'tir.
MIFARE Classic 1K, her biri 4 bloktan oluşan 16 sektöre ayrılır. Blok 0 üretici bloğudur ve UID'yi içerir; standart kartlarda yazılamaz. Her sektörün son bloğu (3, 7, 11 …) anahtarları ve erişim bitlerini tutan sektör sonudur. Bu bloğa yanlış veri yazarsanız sektör kalıcı olarak kilitlenebilir; veri için yalnızca 1, 2, 4, 5, 6 gibi veri bloklarını kullanın.
NTAG213 gibi etiketlerde anahtar yoktur; veri 4 baytlık sayfalara yazılır ve kullanıcı alanı 4. sayfadan başlar. Telefonun okuyacağı bir web adresi ya da metin yazmak istiyorsanız veriyi NDEF biçiminde kaydedin; Elechouse kütüphanesindeki NDEF bölümü bu işi yapar.
PN532 ile RC522 arasındaki fark nedir?
İkisi de 13,56 MHz MIFARE kartları okur; PN532 daha fazla kart tipini, üç arayüzü ve telefonla NFC haberleşmesini desteklerken RC522 daha ucuz ve yaygın modülleri SPI ile bağlanan bir okuyucudur. Basit UID okuma için RC522 RFID modülü yeterlidir; NTAG etiketleri, NDEF ve telefon uyumu gerekiyorsa PN532 daha uygundur.
Sık sorulan sorular
PN532 kaç cm'den okur?
PN532'nin okuma mesafesi birkaç santimetredir; üretici, standart MIFARE kart için 6-8 cm verir. Pratikte mesafe; kart boyutuna, anten hizasına, yakındaki metallere ve besleme kalitesine göre 2-5 cm'ye inebilir. Küçük anahtarlık ve yapışkan etiketler kart boyutundakilerden daha kısa mesafede okunur.
PN532 ile kart kopyalanabilir mi?
PN532, okuduğu UID'yi standart bir karta yazamaz; standart MIFARE kartlarda UID üreticide sabitlenir. Yalnızca UID'ye güvenen bir sistem bu yüzden güvenli sayılmaz ve önemli kapılarda şifreli kartlar tercih edilmelidir. Başkasına ait kartları kopyalamak hukuka aykırıdır; PN532'yi yalnızca kendi kart ve sistemlerinizde kullanın.
Telefonun NFC'si PN532 ile haberleşir mi?
Evet, PN532 NFC eşler arası modu ve kart emülasyonunu destekler; telefonla basit veri alışverişi yapılabilir. En kolay yol ise PN532 ile bir NTAG etikete NDEF kaydı yazmak ve bu etiketi telefonla okutmaktır. Telefonların kart emülasyonu güvenlik nedeniyle rastgele UID üretebilir, bu yüzden telefonu UID ile tanımaya çalışmak güvenilir değildir.
DIP anahtarı değiştirdim ama modül bulunamıyor, neden?
PN532 arayüz seçimini yalnızca açılışta okur; anahtarı değiştirdikten sonra beslemeyi kesip yeniden verin. Ardından SDA ve SCL'nin yer değiştirmediğini, GND'nin ortak olduğunu ve kodda I2C sınıfının seçildiğini kontrol edin. Arduino'nun I2C tarayıcı örneği 0x24 adresini gösteriyorsa bağlantı doğrudur.
Toplu NFC kart alırken nelere dikkat edilmeli?
Önce kullanılacak çipi (MIFARE Classic 1K, NTAG213, NTAG215 gibi) sisteme göre belirleyin; okuyucu ve yazılım bu çipe göre çalışır. Bellek kapasitesi, biçim (kart, anahtarlık, yapışkan etiket) ve baskı ihtiyacı sonra gelir. Büyük siparişten önce birkaç örnek kartı kendi okuyucunuzla test edin; toptan NFC kart ihtiyacınız için komponentci.net ile iletişime geçebilirsiniz.
Özet
- PN532 NFC modülü 13,56 MHz ISO 14443A kartları (MIFARE Classic, Ultralight, NTAG21x) okur ve yazar; 125 kHz kartları okumaz.
- Elechouse V3 tipi modülde DIP anahtar: I2C = 1 ON 2 OFF, SPI = 1 OFF 2 ON, HSU = ikisi de OFF.
- I2C bağlantısı Arduino Uno'da VCC-5V, GND-GND, SDA-A4, SCL-A5; I2C adresi 0x24'tür.
- MIFARE Classic'te sektör sonu bloklarına yazmayın; veri için yalnızca veri bloklarını kullanın.
- Okuma mesafesi birkaç santimetredir; anten altındaki metal mesafeyi kısaltır.
