Indice
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.
#include <MFRC522.h> MFRC522 rfid(10, 9); 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")); }}#include <MFRC522.h> MFRC522 rfid(10, 9);MFRC522::MIFARE_Key key = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };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;}#include <MFRC522.h> MFRC522 rfid(10, 9);MFRC522::MIFARE_Key key = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };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;}In qualità di Affiliato Amazon riceviamo un guadagno dagli acquisti idonei