RFID RC522 NodeMCU ARDUINO UNTUK IoT
RFID
merupakan sistem identifikasi yang menggunakan gelombang radio (Radio
Frrequency Identification) sehingga untuk membacanya diperlukan RFID Reader.
RFID yang dihubungkan dengan NodeMCU dapat dijadikan suatu alat kontrol
berbasis internet (Internet of Things / IoT).
Pada
kesempatan kali ini akan membahas tentang bagaimana cara koneksi NodeMCU dengan
RFID Reader menggunakan Arduino IDE.
Komponen
yang digunakan antara lain:
1. NodeMCU
2. RFID Reader RC522
3. Passive tag/pin
4. Breadboard
5. Kabel jumper
Setelah
semua komponen tersedia, kemudian rangkai komponen seperti pada gambar di
bawah.
Sekarang
masuk ke Arduino IDE. Percobaan menggunakan RFID RC522 ini menggunakan RFID
Library. Jika Arduino IDE belum terdapat RFID Library, bisa didownload pada https://github.com/miguelbalboa/rfid
Langkah
berikutnya, copy paste program di bawah.
#include <SPI.h>
#include <MFRC522.h>
constexpr uint8_t RST_PIN = 5;
constexpr uint8_t SS_PIN = 4;
MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
// Inisialisasi memulai mengirim NUID
byte nuidPICC[4];
void setup() {
Serial.begin(115200); // Memulai serial monitor
SPI.begin(); // Memulai komunikasi SPI
rfid.PCD_Init(); // Init MFRC522
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
Serial.println(F("This code scan the MIFARE Classsic NUID."));
Serial.print(F("Using the following key:"));
printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}
void loop() {
// Cek untuk kartu baru
if ( ! rfid.PICC_IsNewCardPresent())
return;
// Verifikasi apakah NUID sudah dibaca
if ( ! rfid.PICC_ReadCardSerial())
return;
Serial.print(F("PICC type: "));
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.println(rfid.PICC_GetTypeName(piccType));
// Check is the PICC of Classic MIFARE type
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("Your tag is not of type MIFARE Classic."));
return;
}
if (rfid.uid.uidByte[0] != nuidPICC[0] ||
rfid.uid.uidByte[1] != nuidPICC[1] ||
rfid.uid.uidByte[2] != nuidPICC[2] ||
rfid.uid.uidByte[3] != nuidPICC[3] ) {
Serial.println(F("A new card has been detected."));
// Store NUID into nuidPICC array
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
}
Serial.println(F("The NUID tag is:"));
Serial.print(F("In hex: "));
printHex(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
Serial.print(F("In dec: "));
printDec(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
}
else Serial.println(F("Card read previously."));
// Halt PICC
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
}
/**
* Sub routine mengirim nilai HEX.
*/
void printHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}
/**
* Sub routine mengirim nilai DEX.
*/
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], DEC);
}
}
#include <MFRC522.h>
constexpr uint8_t RST_PIN = 5;
constexpr uint8_t SS_PIN = 4;
MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
// Inisialisasi memulai mengirim NUID
byte nuidPICC[4];
void setup() {
Serial.begin(115200); // Memulai serial monitor
SPI.begin(); // Memulai komunikasi SPI
rfid.PCD_Init(); // Init MFRC522
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
Serial.println(F("This code scan the MIFARE Classsic NUID."));
Serial.print(F("Using the following key:"));
printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}
void loop() {
// Cek untuk kartu baru
if ( ! rfid.PICC_IsNewCardPresent())
return;
// Verifikasi apakah NUID sudah dibaca
if ( ! rfid.PICC_ReadCardSerial())
return;
Serial.print(F("PICC type: "));
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.println(rfid.PICC_GetTypeName(piccType));
// Check is the PICC of Classic MIFARE type
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("Your tag is not of type MIFARE Classic."));
return;
}
if (rfid.uid.uidByte[0] != nuidPICC[0] ||
rfid.uid.uidByte[1] != nuidPICC[1] ||
rfid.uid.uidByte[2] != nuidPICC[2] ||
rfid.uid.uidByte[3] != nuidPICC[3] ) {
Serial.println(F("A new card has been detected."));
// Store NUID into nuidPICC array
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
}
Serial.println(F("The NUID tag is:"));
Serial.print(F("In hex: "));
printHex(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
Serial.print(F("In dec: "));
printDec(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
}
else Serial.println(F("Card read previously."));
// Halt PICC
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
}
/**
* Sub routine mengirim nilai HEX.
*/
void printHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}
/**
* Sub routine mengirim nilai DEX.
*/
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], DEC);
}
}
Kemudian Upload program dan tunggu hingga selesai (Done Uploading) dan buka serial monitor. Jangan lupa merubah Baudrate pada 115200.
Siapkan
Passive Tag yang akan digunakan. Kali ini yang penulis gunakan adalah 2 Passive
Tag dan 1 Passive Pin.
Passive
Tag coba didekatkan kepada RFID RC522 dan perhatikan nilai yang ada pada serial
monitor.
Kartu Pertama
Nilai
HEX yang dihasilkan adalah BA FE B8 12
Kartu Kedua
Nilai
HEX yang dihasilkan adalah 53 9C 1B 02
Pin
Nilai
HEX yang dihasilkan adalah D7 70 80 34
Nilai
yang dihasilkan kemudian dapat digunakan untuk identifikasi pada projek
lainnya. Cukup sekian artikel singkat ini, semoga dapat bermanfaat.