De blogpost van vandaag is het tweede deel met het onderwerp "Lezen en schrijven met de RFID Kit" in de driedelige serie over onze RFID Kit:
Aan het einde van deze 3 dagen weet je:
- Wat onze RFID Kit en hoe je het instelt
- Hoe u onze RFID Kit kan schrijven en lezen
- Net als bij onze RFID Kit is mogelijk om een toestemming voor computertoegang te installeren
RFID lezen en schrijven
De basisbewerkingen bij het gebruik van een RFID-module zijn het lezen van gegevens van een RFID-transponder en het schrijven ervan.
In dit bericht zullen we zowel stap voor stap uitvoeren als uitleggen.
De basis van RFID-technologie, het aansluiten van de module en het installeren van de Bibliotheek verklaart de vorige blog Post RFID introductie.
Een RFID-tag is vereist voor zowel lezen als schrijven. De informatie die bij ons beschikbaar is RFID Kit wordt geleverd met twee, een chip en een sleutelkaart. Welke je gebruikt maakt niet uit voor de programmering.
Vóór de installatiefunctie van de leesschets importeren we de vereiste bibliotheken en definiëren we een aantal van de aangesloten pinnen (namelijk de die vrij kunnen worden geselecteerd).
#include <SPI.h>
#include <MFRC522.h>
const uint8_t RST_PIN = 9; pincode opnieuw instellen
const uint8_t SS_PIN = 10; seriële gegevensvast
Vervolgens maken we een MFRC522 object. Dit vertegenwoordigt de aangesloten RFID-module in het programma.
MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522-exemplaar maken
In de installatiefunctie wordt de seriële verbinding met de pc tot stand gebracht, wordt de RFID-module geïnitialiseerd en wordt de SPI (Seriële randinterfacebus) Verbonden.
nietig instellen()
Serial.begin(9600); seriële verbinding starten
SPI.begin(); start SPI bus
mfrc522. PCD_Init(); init RFID-module
}
Kaart-ID gelezen
Code: Simsso/Arduino-Voorbeelden/RFID/ReadUID
De eenvoudigste bewerking is het uitlezen van de unieke id's (UID) van de RFID transponder. Om de RFID-module te zoeken naar transponders op alle en lees hun UID, de oproepen in de lus functie moet worden
mfrc522. PICC_IsNewCardPresent();
mfrc522. PICC_ReadCardSerial();
worden gemaakt. Alleen dan kan de UID worden gebruikt. De UID is een byte array die helpt bij het identificeren van een transponder. De array heeft een lengte van 4, zodat in totaal meer dan vier miljard verschillende uid's kunnen bestaan. In de seriële monitor kan de ID van de laatst gedetecteerde transponder worden uitgevoerd met de volgende coderegels in hex-indeling.
voor (int i = 0; i < mfrc522.uid.size; i++)
Serial.print(mfrc522.uid.uidByte[i], HEX;
Serial.print(" ");
}
De uitvoer ziet er bijvoorbeeld als volgt uit: 14 86 6E 7B
Hoofdgeheugen gelezen
Code: Simsso/Arduino-Voorbeelden/RFID/ReadStorage
Het hoofdgeheugen van onze transponders bestaat uit 16 sectoren met elk 4 blokken. Elk van deze blokken bevat 16 bytes geheugen. De totale opslagruimte bedraagt 16·4·16 = 1024 bytes (1 kByte). Een sector kan worden gebruikt met de coderegel
mfrc522. PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
eenvoudig geformatteerde uitvoer, waarbij de variabele Sector de index van de sector, d.w.z. kan gehele getallen van 0 tot 15 nemen. De sleutel wordt vooraf gegenereerd (zie voorbeeldcode in de link). De uitvoer (weergegeven in SerialMonitor) ziet er bijvoorbeeld als volgt uit:
0 3 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ]
2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ]
1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ]
0 B5 A3 2B 1B 26 08 04 00 62 63 64 65 66 67 68 69 [ 0 0 ]
De inhoud van één blok kan worden gelezen met de volgende regel code.
mfrc522. MIFARE_Read(blockAddress, buffer en grootte);
Het blokadres is een getal van 0 tot 63. De buffer is een array met 16+2 bytes geheugencapaciteit waarin een rij van het bovenstaande is opgeslagen. De laatste parameter Grootte is een aanwijzer naar een variabele die gelijk is aan de grootte van de Buffer Arrays.
Gegevens schrijven
Code: Simsso/Arduino-Voorbeelden/RFID/WriteFloat
Het schrijven van gegevens aan de transponder is zeer vergelijkbaar met lezen. De functieaanroep
mfrc522. MIFARE_Write(blockAddress, dataBlock, 16);
schrijft de byte-array Gegevensblok, die de lengte 16 heeft, in het blok met het nummer blockAddress. Een sectornummer komt hier niet voor omdat het blokadres dit impliceert. Het blokadres wordt voortdurend verhoogd, d.w.z. tussen 0 en 63. Voordat u schrijft moet u analoog verifiëren om te lezen, dat is nog eens zes regels code die u de code vertellen Voorbeeld kan worden verwijderd.
Tot slot laat deze paragraaf zien hoe je een float variabele opslaan -- een beetje praktischer. Zowel zwevende als dubbele variabelen in de Arduino bestaan uit 4 bytes (referentie https://www.arduino.cc/en/Reference/Double). In de code wordt een floatvariabele geïnitialiseerd met elke waarde. Er wordt vervolgens een byteaanwijzer gemaakt die wijst naar het adres van de waarde (bijvoorbeeld van een sensor). De vier bytes van de floatvariabele worden vervolgens gekopieerd naar een bytearray van lengte 16 (grootte van een blok). Dit is geschreven met de bovenstaande functie aan het vijfde blok van de transponder geheugen.
vlottertemperatuur = 15.09f;
byte *tempBytes = (byte *)&temperatuur;
byte dataBlock[16] = . . . . . . . . . . . . . . . . . . . . . . . blokbuffer initialiseren met nullen
voor (uint8_t i = 0; i < sizeof(float); i++)
dataBlock[i] = tempBytes[i]; byte van floatvariabele kopiëren naar buffer
}
status = (MFRC522::StatusCode) mfrc522. MIFARE_Write(5, dataBlock, 16);
Met de bovengenoemde ReadStorage Sketch is nu te lezen dat de eerste vier bytes in blok 5 zijn ingesteld. Deze waarden komen overeen met 32-bits IEEE 754 Formaat van 15.09.
5 A4 70 71 41 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ]
In onze blogpost, die de inhoud volgt, leggen we uit hoe we onze RFID Kit kan een toestemming voor computertoegang maken. U vindt de tutorial op dit vanaf morgen op onze blog op az-delivery.de, dus het is het beste om elke dag terug te kijken om elke dag spannende tutorials en geweldige projecten te vinden!
Uw
Team AZ-Levering
1 Reactie
Solderdot
Servus!
Welche Ereignisse kann das modul über die IRQ-Leitung mitteilen und wie kann ich dieses Signal nutzen? Gibt es eine Möglichkeit, dass das RC522-Modul einen IRQ auslöst, wenn ein Tag aufgelegt wurde, so dass das rechenhzeitintensive Pollen entfallen kann?
Prinzipiell nutze ich das Modul auf einem Raspberry Pi unter Python. Eine allgemeine Beschreibung sollte ich ohne weiteres dort umsetzen können.