Tutorial Arduino #34

Lettura e scrittura su tessere e tag RFID

Lettura e scrittura su tessere e tag RFID | Tutorial Arduino ITA #34
Tutorial Arduino #33: LED NeoPixel
Tutorial Arduino #33
LED NeoPixel

Descrizione

Scopri come utilizzare Arduino per rendere i tuoi progetti ancora più interattivi e personalizzati grazie alle tessere RFID. In questo tutorial imparerai a leggere e scrivere dati sulla memoria interna delle tessere.

Cominceremo con la costruzione del circuito, esplorando come collegare correttamente il modulo RFID e il convertitore di livelli logici. Poi, passeremo alla programmazione, imparando a leggere e scrivere dati nei blocchi liberi delle tessere con facilità.

Segui la guida passo dopo passo e scopri come sfruttare al meglio il potenziale delle tessere RFID.

Scarica le risorse

Progetto: Contenuto della tessera RFID

Schema

Componenti

Codice

#include <MFRC522.h> MFRC522 rfid(109); void setup() {  Serial.begin(9600);  SPI.begin();  rfid.PCD_Init();  Serial.println(F("Avvicina la tessera RFID"));} void loop() {  if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {    rfid.PICC_DumpToSerial(&(rfid.uid));    Serial.println(F("Avvicina la tessera RFID"));  }}
scarica il file

Progetto: Scrittura sulle tessere/tag RFID

Schema

Componenti

Codice

#include <MFRC522.h> MFRC522 rfid(109);MFRC522::MIFARE_Key key = { 0xFF0xFF0xFF0xFF0xFF0xFF };MFRC522::StatusCode status;char buffer[49];int bufferIndex = 0;bool isBufferReady = false; void setup() {  Serial.begin(9600);  SPI.begin();  rfid.PCD_Init();  Serial.println(F("Inserisci il testo (max 48 caratteri):"));} void loop() {  while (Serial.available() && !isBufferReady) {    char c = Serial.read();    if (bufferIndex < 48 && c != '\n') {      buffer[bufferIndex++] = c;    } else {      buffer[bufferIndex] = '\0';      isBufferReady = true;      Serial.println(buffer);      Serial.println();      Serial.println(F("Avvicina la tessera RFID per la scrittura"));    }  }   if (isBufferReady && rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {    Serial.println(F("Scrittura in corso..."));    if (writeCard(buffer, bufferIndex)) {      Serial.println(F("Scrittura completata con successo!"));    }     rfid.PICC_HaltA();    rfid.PCD_StopCrypto1();     isBufferReady = false;    bufferIndex = 0;    while (Serial.available()) {      Serial.read();    }    Serial.println();    Serial.println(F("Inserisci il testo (max 48 caratteri):"));  }} bool writeCard(char *content, int contentLength) {  int index = 0;  byte blockData[16];   for (byte blockOffset = 0; blockOffset < 3; blockOffset++) {    memset(blockData, '\0'16);    index = min(16, contentLength - blockOffset * 16);    if (index > 0) {      strncpy((char *)blockData, content + blockOffset * 16, index);    }    if (!writeBlock(4 + blockOffset, blockData)) {      return false;    }  }   return true;} bool writeBlock(byte blockAddr, byte *blockData) {  status = rfid.PCD_Authenticate(    MFRC522::PICC_CMD_MF_AUTH_KEY_A,    blockAddr,    &key,    &(rfid.uid));  if (status != MFRC522::STATUS_OK) {    Serial.print(F("Autenticazione del blocco non riuscita: "));    Serial.println(blockAddr);    Serial.println(rfid.GetStatusCodeName(status));    return false;  }   status = rfid.MIFARE_Write(blockAddr, blockData, 16);  if (status != MFRC522::STATUS_OK) {    Serial.print(F("Errore durante la scrittura del blocco: "));    Serial.println(blockAddr);    Serial.println(rfid.GetStatusCodeName(status));    return false;  }   return true;}
scarica il file

Progetto: Lettura delle tessere/tag RFID

Schema

Componenti

Codice

#include <MFRC522.h> MFRC522 rfid(109);MFRC522::MIFARE_Key key = { 0xFF0xFF0xFF0xFF0xFF0xFF };MFRC522::StatusCode status;char buffer[49]; void setup() {  Serial.begin(9600);  SPI.begin();  rfid.PCD_Init();  Serial.println(F("Avvicina la tessera RFID"));} void loop() {  if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {    Serial.println(F("Lettura in corso..."));    if (readCard(buffer)) {      Serial.println(F("Contenuto della tessera RFID:"));      Serial.println(buffer);    }     rfid.PICC_HaltA();    rfid.PCD_StopCrypto1();     Serial.println();    Serial.println(F("Avvicina la tessera RFID"));  }} bool readCard(char *content) {    int index = 0;    byte blockData[18];     for (byte blockOffset = 0; blockOffset < 3; blockOffset++) {      memset(blockData, '\0'18);      if (!readBlock(4 + blockOffset, blockData)) {        return false;      }       for (int i = 0; i < 16; i++) {        content[index++] = blockData[i];        if (blockData[i] == '\0') {          return true;        }      }    }     content[index] = '\0';    return true;} bool readBlock(byte blockAddr, byte *blockData) {  byte length = 18;   status = rfid.PCD_Authenticate(    MFRC522::PICC_CMD_MF_AUTH_KEY_A,     blockAddr,     &key,     &(rfid.uid)  );  if (status != MFRC522::STATUS_OK) {    Serial.print(F("Autenticazione del blocco non riuscita: "));    Serial.println(blockAddr);    Serial.println(rfid.GetStatusCodeName(status));    return false;  }   status = rfid.MIFARE_Read(blockAddr, blockData, &length);  if (status != MFRC522::STATUS_OK) {    Serial.print(F("Errore durante la lettura del blocco: "));    Serial.println(blockAddr);    Serial.println(rfid.GetStatusCodeName(status));    return false;  }   return true;}
scarica il file

Arduino Software Hero

Vuoi imparare a programmare Arduino, ma non sai da dove cominciare?

Iscriviti al corso online

Libri consigliati

In qualità di Affiliato Amazon riceviamo un guadagno dagli acquisti idonei


Tutorial consigliati

E-commerce di elettronica

Sul nostro negozio online trovi tutti i componenti usati nei tutorial.
Inoltre hai un'ampia scelta di prodotti tra:

  • Arduino
  • Raspberry Pi
  • Sensori
  • Robotica
  • Componenti elettronici
  • Accessori

Compra online, ricevi comodamente a casa

Visita il negozio