NFC


beskontaktni prijenos podataka

NFC (Near Field Communication) tehnologija omogućava komunikaciju između dvaju uređaja koji se nalaze blizu jedan drugome. U slučaju kreditnih kartica, one često imaju ugrađeni NFC čip koji omogućava bežično plaćanje pomoću uređaja koji podržavaju NFC.

Za čitanje NFC podataka iz npr. kreditne kartice potrebno je nabaviti modul NFC čitača. Primjer koda za čitanje NFC taga sa čitačem MFRC522 i ispisivanje podataka na serijskom monitoru je:

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.

void setup() {
  Serial.begin(9600);   // Initiate a serial communication
  SPI.begin();      // Initiate  SPI bus
  mfrc522.PCD_Init();   // Initiate MFRC522
  Serial.println("Put your card to the reader...");
  Serial.println();
}

void loop() {
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  // Show some details of the card
  Serial.print("Card UID:");
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  }
  Serial.println();

  Serial.print(F("PICC type: "));
  MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
  Serial.println(mfrc522.PICC_GetTypeName(piccType));

  // Halt PICC
  mfrc522.PICC_HaltA();

  // Stop encryption on PCD
  mfrc522.PCD_StopCrypto1();
}

Ovaj kod koristi biblioteku MFRC522 za čitanje NFC tagova sa čitača. Nakon inicijalizacije čitača, program čeka na prisutnost novog NFC taga. Ako je tag pronađen, program ispisuje UID taga i vrstu taga na serijski monitor.

Čitanjem podataka pomoću NFC modula mogu se obavljati različite akcije, npr. mogu se otvarati vrata. Za to je potrebno imati NFC uređaj za očitavanje kartica i NFC karticu ili mobilni uređaj koji podržava NFC funkcionalnost. NFC kartice se mogu programirati s potrebnim informacijama za otvaranje vrata, poput identifikacijskog broja koji se koristi za provjeru pristupa.

Programiranje NFC kartica se može obaviti pomoću posebnih programskih alata, poput aplikacija za pametne telefone, koje omogućuju pisanje i čitanje podataka na NFC kartice. Kada se kartica prinese NFC čitaču koji je povezan s bravom vrata, sustav provjerava informacije na kartici i otvara vrata ako su informacije valjane.

Postoje i gotova rješenja za NFC kontrolu pristupa, poput različitih vrsta NFC brava koje se mogu pronaći na tržištu.

Kako bi prikazali mogućnosti mikrokontrolera s vezom prema internetu koristiti ćemo ESP32 za otključavanje vrata. Donosimo sljedeći kod:

#include <Wire.h>
#include <PN532_I2C.h>
#include <PN532.h>

PN532_I2C pn532i2c(Wire);
PN532 nfc(pn532i2c);

void setup(void) {
  Serial.begin(115200);

  nfc.begin();
  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) {
    Serial.print("NFC modul nije pronadjen");
    while (1); // Zaustavi izvršavanje koda ako NFC modul nije pronadjen
  }
  Serial.print("NFC modul pronadjen: ");
  Serial.println(versiondata, HEX);

  nfc.SAMConfig();
  Serial.println("NFC modul spreman za rad !");
}

void loop(void) {
  uint8_t success;
  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };
  uint8_t uidLength;

  // Provjeri je li u blizini priložen NFC tag
  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);

  if (success) {
    Serial.println("NFC tag prilozen, otvaranje vrata...");
    // Ovdje ide kod za otvaranje vrata
  }

  delay(1000);
}