RFID olvasó - memória író
Videós tartalom: https://youtu.be/52rRFT6WLhE
Összeállítás
Kód az RFID tag kiolvasásához
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN); // MFRC522
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(0,0);
display.setTextSize(2);
display.setCursor(30, 20);
display.print("RFID");
display.setCursor(20, 40);
display.print("READER");
display.display();
Serial.begin(115200); // Soros kommunikáció inicializálása a számítógéppel
while (!Serial);
SPI.begin(); // SPI busz inicializálása
mfrc522.PCD_Init(); // MFRC522 inicializálása
delay(4);
mfrc522.PCD_DumpVersionToSerial(); // A PCD részleteinek megjelenítése - MFRC522 Kártyaolvasó részletei
Serial.println(F("Kártya pásztázása UID, SAK, típus és adatblokkok megtekintéséhez..."));
}
void loop() {
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}
Kód a tag írásához, YouTube szó kerül be alább:
#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
MFRC522::MIFARE_Key key;
int block = 1;
byte data[16] = {"YouTube"};
char chr;
byte read_data[18];
void setup()
{
Serial.begin(115200);
SPI.begin();
mfrc522.PCD_Init();
// OLED kijelző inicializálása
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.setTextSize(2);
display.setCursor(0, 0);
display.print("RFID iras");
display.display();
Serial.println("Keresés...");
// Az authentikációs kulcs beállítása
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
}
void loop()
{
// Új kártya jelenlétének ellenőrzése
if (!mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Kártya olvasása
if (!mfrc522.PICC_ReadCardSerial()) {
return;
}
Serial.println("RFID kartyat talaltam...");
// Blokk írása és olvasása
writeBlock(block, data);
readBlock(block, read_data);
// Kijelzőn kártyatartalom megjelenítése
display.setTextSize(2);
display.setCursor(0, 20);
display.print("Tartalom: ");
display.setCursor(0, 40);
Serial.print("Kartya tartalom: ");
for (int j = 0; j < 16; j++) {
Serial.write(read_data[j]);
chr = read_data[j];
display.print(chr);
}
Serial.println("");
display.display();
}
int writeBlock(int blockNumber, byte arrayAddress[])
{
// Az utolsó 4 blokk kiválasztása
int largestModulo4Number = blockNumber / 4 * 4;
int trailerBlock = largestModulo4Number + 3;
// Ellenőrzés, hogy a blokk záró blokk-e
if (blockNumber > 2 && (blockNumber + 1) % 4 == 0) {
Serial.print(blockNumber);
Serial.println(" BLOKK");
return 2;
}
Serial.print(blockNumber);
Serial.println(" BLOKK");
// Kártya autentikáció
byte status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print("Autentikacios hiba: ");
Serial.println(mfrc522.GetStatusCodeName(status));
return 3;
}
// Blokk írása
status = mfrc522.MIFARE_Write(blockNumber, arrayAddress, 16);
if (status != MFRC522::STATUS_OK) {
Serial.print("Sikertelen iras: ");
Serial.println(mfrc522.GetStatusCodeName(status));
return 4;
}
Serial.println("A blokk sikeresen megírva!");
}
int readBlock(int blockNumber, byte arrayAddress[])
{
// Az utolsó 4 blokk kiválasztása
int largestModulo4Number = blockNumber / 4 * 4;
int trailerBlock = largestModulo4Number + 3;
// Kártya autentikáció
byte status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(" sikertelen (olvasás): ");
Serial.println(mfrc522.GetStatusCodeName(status));
return 3;
}
byte buffersize = 18;
// Blokk olvasása
status = mfrc522.MIFARE_Read(blockNumber, arrayAddress, &buffersize);
if (status != MFRC522::STATUS_OK) {
Serial.print(" sikertelen: ");
Serial.println(mfrc522.GetStatusCodeName(status));
return 4;
}
Serial.println("A blokk sikeresen kiolvasva!");
}
include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define RST_PIN 9
#define SS_PIN 10
byte readCard[4];
String My_ID = "33EDBDD"; // Az engedélyezett RFID kártya UID-je
String ID = ""; // Aktuális RFID kártya UID-je
MFRC522 mfrc522(SS_PIN, RST_PIN);
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
void setup()
{
SPI.begin();
mfrc522.PCD_Init();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(0,0);
display.setTextSize(1);
display.setCursor(0, 10);
display.print("Ellenorzes..."); // Kártya beolvasására várakozás üzenet
display.display();
}
void loop()
{
while (getID())
{
// Kijelző törlése és beállítása
display.clearDisplay();
display.setCursor(20,0);
display.setTextSize(1);
// Engedélyezés vagy elutasítás üzenet megjelenítése a kártya UID-jétől függően
if (ID == My_ID)
{
display.setTextSize(2);
display.print("RENDBEN"); // Hozzáférés engedélyezve üzenet
display.setTextSize(1);
}
else
{
display.setTextSize(2);
display.print("TILOS"); // Hozzáférés megtagadva üzenet
display.setTextSize(1);
}
// Kártya UID kiírása a kijelzőre
display.display();
display.setCursor(0, 20);
display.setTextSize(2);
display.print("ID : ");
display.setCursor(0, 40);
display.print(ID);
display.setTextSize(1);
display.display();
// Rövid késleltetés
delay(2000);
// Kijelző törlése és alapértelmezett üzenet kiírása
display.clearDisplay();
display.setCursor(0, 50);
display.print(" RFID azonositas ");
display.setCursor(0, 10);
display.setTextSize(2);
display.print("Ki vagy?"); // Kártya beolvasására várakozás üzenet
display.setTextSize(1);
display.display();
}
}
boolean getID()
{
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return false;
}
if ( ! mfrc522.PICC_ReadCardSerial()) {
return false;
}
ID = "";
for ( uint8_t i = 0; i < 4; i++) {
//readCard[i] = mfrc522.uid.uidByte[i];
ID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Kártya UID olvasása és stringgé konvertálása
}
ID.toUpperCase(); // UID átalakítása nagybetűs formára
mfrc522.PICC_HaltA(); // Kártyaolvasó inaktiválása
return true;
}