Πώς να χρησιμοποιήσετε το Arduino και το RFID με τη μονάδα RC522

  • Η τεχνολογία RFID επιτρέπει την αναγνώριση αντικειμένων χρησιμοποιώντας παθητικές ή ενεργές ετικέτες, χρησιμοποιώντας ραδιοσυχνότητες και ένα μοναδικό UID χωρίς την ανάγκη άμεσης οπτικής επαφής.
  • Η μονάδα RC522, βασισμένη στο τσιπ MFRC522, λειτουργεί στα 13,56 MHz με πλακέτες MIFARE Classic και επικοινωνεί με το Arduino κυρίως μέσω SPI.
  • Οι κάρτες MIFARE Classic 1K οργανώνουν τη μνήμη τους σε τομείς και μπλοκ, με πλήκτρα Key A/Key B και συνθήκες πρόσβασης που είναι απαραίτητο να γνωρίζετε και να αλλάζετε.
  • Συνδυάζοντας τη βιβλιοθήκη MFRC522 με το Arduino, είναι δυνατή η υλοποίηση πρακτικών έργων όπως έλεγχοι πρόσβασης ή επαναφορτιζόμενες κάρτες μεταφοράς.

Πώς να χρησιμοποιήσετε το Arduino και το RFID: Ένας πλήρης οδηγός για αισθητήρες και έργα

Αν έχετε ποτέ περάσει από ένα ταμείο σε ένα σούπερ μάρκετ και έχετε δει πώς, καθώς τοποθετείτε όλα τα προϊόντα σας σε ένα δίσκο, εμφανίζονται αυτόματα στην οθόνη , τότε έχετε ήδη δει την RFID σε δράση. Δεν είναι μαγεία ή τεχνολογική τηλεπάθεια: είναι ένα σύστημα που βασίζεται σε ραδιοσυχνότητες που σας επιτρέπει να αναγνωρίζετε αντικείμενα χωρίς άμεση επαφή και μπορείτε να το αναπαράγετε στο σπίτι με ένα απλό Arduino και έναν οικονομικό αναγνώστη όπως το RC522.

Σε αυτόν τον οδηγό, θα μάθετε, βήμα προς βήμα, πώς να χρησιμοποιείτε το Arduino και έναν αναγνώστη RFID RC522 για να διαβάζετε και να γράφετε ετικέτες, θα κατανοήσετε ακριβώς τι είναι η RFID, ποιοι τύποι συστημάτων υπάρχουν, πώς τροφοδοτούνται οι παθητικές κάρτες, πώς οργανώνεται η μνήμη μιας κάρτας MIFARE Classic 1K και πώς να δημιουργείτε έργα πραγματικού κόσμου, όπως ένα σύστημα ελέγχου πρόσβασης ή μια επαναφορτιζόμενη κάρτα δημόσιας συγκοινωνίας. Εξοικειωθείτε, γιατί θα εμβαθύνουμε στο θέμα διεξοδικά, αλλά με σαφή και προσιτό τρόπο.

Τι είναι η τεχνολογία RFID και πώς λειτουργεί;

Η αναγνώριση ραδιοσυχνοτήτων ή RFID είναι ένα σύστημα που επιτρέπει την αναγνώριση αντικειμένων χρησιμοποιώντας ένα μοναδικό αναγνωριστικό που μεταδίδεται μέσω ραδιοσυχνοτήτων. Αυτό το αναγνωριστικό ονομάζεται συνήθως UID (Unique ID) και μπορεί να θεωρηθεί ως το αναγνωριστικό της ετικέτας. Το πλήρες σύστημα αποτελείται από δύο κύρια στοιχεία: την ετικέτα RFID (ή αναμεταδότη) και τον αναγνώστη RFID (πομποδέκτη).

Οι ετικέτες RFID διατίθενται σε πολλές διαφορετικές μορφές: πλαστικές κάρτες που μοιάζουν με πιστωτικές κάρτες, μπρελόκ, αυτοκόλλητα που κολλάνε σε προϊόντα για την αποτροπή κλοπής, ακόμη και τσιπ που εμφυτεύονται κάτω από το δέρμα των ζώων για αναγνώριση. Εσωτερικά, όλες μοιράζονται τα ίδια εξαρτήματα: μια κεραία και ένα μικρό τσιπ που αποθηκεύει πληροφορίες και επικοινωνεί με τον αναγνώστη.

Υπάρχουν ετικέτες μόνο για ανάγνωση, των οποίων το UID είναι εργοστασιακά προγραμματισμένο και δεν μπορεί να τροποποιηθεί, και ετικέτες ανάγνωσης/εγγραφής, στις οποίες ένας κατάλληλος αναγνώστης, όπως η μονάδα RC522, μπορεί να διαβάσει και να γράψει δεδομένα . Αυτό επιτρέπει εφαρμογές όπως επαναφορτιζόμενες κάρτες δημόσιας συγκοινωνίας, συστήματα ελέγχου πρόσβασης με προπληρωμένα υπόλοιπα, συστήματα ωραρίου και παρουσίας και άλλα.

Από την άλλη πλευρά, έχουμε τον αναγνώστη ή πομποδέκτη RFID. Αυτή η συσκευή όχι μόνο λαμβάνει δεδομένα αλλά εκπέμπει και ένα ηλεκτρομαγνητικό πεδίο ραδιοσυχνοτήτων . Αυτό το πεδίο είναι το κλειδί για την κατανόηση του τρόπου με τον οποίο τροφοδοτούνται οι παθητικές ετικέτες και του τρόπου ανταλλαγής πληροφοριών μεταξύ της κάρτας και του αναγνώστη.

Τροφοδοσία ρεύματος και αρχή λειτουργίας των ετικετών RFID

Μια πολύ συνηθισμένη ερώτηση είναι: εάν τα αυτοκόλλητα RFID σε προϊόντα σούπερ μάρκετ ή στις κάρτες πρόσβασης δεν έχουν μπαταρίες, από πού αντλούν την ενέργεια για να λειτουργήσουν; Το κλειδί είναι ότι πολλές από αυτές τις ετικέτες είναι παθητικές και τροφοδοτούνται από ηλεκτρομαγνητική επαγωγή από το πεδίο που παράγεται από τον αναγνώστη.

Όταν φέρνετε μια παθητική ετικέτα κοντά σε έναν αναγνώστη, η κεραία της εισέρχεται στο ηλεκτρομαγνητικό πεδίο που παράγεται από τη μονάδα (για παράδειγμα, στα 13,56 MHz στην περίπτωση του RC522). Αυτό το πεδίο προκαλεί ένα ρεύμα στην κεραία της ετικέτας, το οποίο χρησιμοποιείται για την στιγμιαία τροφοδοσία του εσωτερικού τσιπ . Μόλις "ξυπνήσει", το τσιπ διαμορφώνει το σήμα που στέλνει πίσω στον αναγνώστη (αυτό ονομάζεται οπισθοσκέδαση), κωδικοποιώντας το UID και, εάν ισχύει, άλλα δεδομένα που είναι αποθηκευμένα στη μνήμη.

Σε αντίθεση με τεχνολογίες όπως οι υπέρυθρες, δεν απαιτείται άμεση οπτική επαφή μεταξύ της ετικέτας και του αναγνώστη : η ραδιοσυχνότητα μπορεί να διαπεράσει ορισμένα υλικά, αν και η συμπεριφορά της εξαρτάται από τη συχνότητα, την παρουσία μετάλλου, νερού κ.λπ. Ο αναγνώστης συλλαμβάνει το οπισθοσκεδαζόμενο σήμα, το ερμηνεύει και στη συνέχεια στέλνει τα δεδομένα σε έναν μικροελεγκτή (όπως Arduino, ESP8266 ή ESP32) ή σε έναν υπολογιστή.

Τύποι συστημάτων RFID ανάλογα με τη συχνότητα

Το φάσμα ραδιοσυχνοτήτων είναι πολύ ευρύ και τα ραδιοκύματα δεν συμπεριφέρονται το ίδιο σε όλες τις συχνότητες . Επομένως, χρησιμοποιούνται διαφορετικές ζώνες στην RFID ανάλογα με την εφαρμογή. Ο αναγνώστης και η ετικέτα πρέπει να έχουν σχεδιαστεί για να λειτουργούν στην ίδια συχνότητα, όπως ακριβώς ένα ραδιόφωνο πρέπει να συντονιστεί στον σωστό σταθμό.

Γενικά, μπορούμε να ομαδοποιήσουμε τα συστήματα RFID σε τρεις κύριες κατηγορίες ανάλογα με τη ζώνη που χρησιμοποιούν:

  • Χαμηλή συχνότητα (LF): περίπου 125-134 kHz.
  • Υψηλή συχνότητα (HF): περίπου 13,56 MHz, η οποία περιλαμβάνει τεχνολογίες όπως MIFARE και NFC.
  • Υπερυψηλής συχνότητας (UHF): μεταξύ περίπου 433 MHz και 860-960 MHz.

Συστήματα RFID χαμηλής συχνότητας (LF)

Τα συστήματα RFID χαμηλής συχνότητας έχουν σχετικά μεγάλο μήκος κύματος, επιτρέποντάς τους να διεισδύουν καλύτερα σε λεπτά υλικά και αντικείμενα με υψηλή περιεκτικότητα σε νερό , όπως φρούτα ή ποτά. Επίσης, έχουν αρκετά καλή απόδοση κοντά σε λεπτά μέταλλα.

Ωστόσο, αυτό το πλεονέκτημα συνοδεύεται από σημαντικούς περιορισμούς: η τυπική εμβέλεια είναι μόνο λίγα εκατοστά και ο ρυθμός μετάδοσης δεδομένων είναι χαμηλός, με αποτέλεσμα τη μειωμένη χωρητικότητα μνήμης και το υψηλότερο κόστος των ετικετών . Αυτά τα συστήματα χρησιμοποιούνται συνήθως για απλό έλεγχο πρόσβασης, παλαιότερα κλειδιά εγγύτητας και σήμανση ζώων.

Συστήματα RFID και NFC υψηλής συχνότητας (HF)

Η ζώνη υψηλών συχνοτήτων, στα 13,56 MHz, είναι πιθανώς η πιο δημοφιλής σε επίπεδο "κατασκευαστή" και έργων DIY, επειδή εκεί βρίσκονται οι κάρτες MIFARE και η τεχνολογία NFC (Near-Field Communication) , την οποία χρησιμοποιούν πολλά κινητά τηλέφωνα για ανέπαφες πληρωμές.

Τα συστήματα HF λειτουργούν καλά κοντά σε μέταλλο και παρουσία μέτριων έως υψηλών επιπέδων νερού, παρέχοντας συνήθως μια εμβέλεια από μερικά εκατοστά έως περίπου ένα μέτρο υπό ιδανικές συνθήκες. Οι ρυθμοί δεδομένων παραμένουν μέτριοι, αλλά επαρκούν για εφαρμογές ταυτοποίησης, πρόσβασης και μεταφοράς μικρών δεδομένων. Πολλά παγκόσμια πρότυπα βασίζονται στα HF, διευκολύνοντας τη διαλειτουργικότητα εξοπλισμού και καρτών.

Συστήματα RFID εξαιρετικά υψηλής συχνότητας (UHF)

Στο αντίθετο άκρο του φάσματος βρίσκονται τα συστήματα UHF, ικανά να φτάσουν σε αποστάσεις από λίγα εκατοστά έως και πάνω από 20 μέτρα. Είναι ιδανικά όταν πολλές ετικέτες πρέπει να διαβαστούν γρήγορα και από απόσταση , για παράδειγμα, για τη διαχείριση αποθεμάτων σε αποθήκες, την καταμέτρηση ατόμων σε εκδηλώσεις ή τη χρονομέτρηση αθλητών καθώς διασχίζουν τη γραμμή τερματισμού σε αγώνες.

Το μειονέκτημα είναι ότι, έχοντας μικρότερο μήκος κύματος, το σήμα εξασθενεί περισσότερο και διαπερνά το μέταλλο και το νερό λιγότερο αποτελεσματικά . Παρόλα αυτά, χρησιμοποιούνται ευρέως σε συστήματα διοδίων, έλεγχο πρόσβασης στάθμευσης και παρακολούθηση logistics μεγάλης κλίμακας.

Η μονάδα RFID RC522: χαρακτηριστικά και ακίδες

Για τα έργα Arduino, ένας από τους πιο δημοφιλείς αναγνώστες είναι ο RC522, που βασίζεται στο τσιπ NXP MFRC522. Είναι μια πολύ προσιτή και ευρέως χρησιμοποιούμενη μονάδα που λειτουργεί σε υψηλή συχνότητα (13,56 MHz) με κάρτες MIFARE και επιτρέπει τόσο την ανάγνωση όσο και την εγγραφή σε συμβατές ετικέτες.

Συνήθως πωλείται σε κιτ που περιλαμβάνει τον ίδιο τον αναγνώστη, μια πιστωτική κάρτα και ένα μπρελόκ RFID. Αυτές οι κάρτες είναι συνήθως κάρτες MIFARE Classic 1K ή 4K, ένα εξαιρετικά δημοφιλές πρότυπο στις μεταφορές, τον έλεγχο πρόσβασης και σε λύσεις χαμηλού κόστους. Το RC522 παράγει ένα ηλεκτρομαγνητικό πεδίο HF και στην πράξη, η χρήσιμη εμβέλειά του είναι περίπου 3-5 cm, αν και θεωρητικά μπορεί να φτάσει κάπως πιο μακριά.

Όσον αφορά την επικοινωνία με τον μικροελεγκτή, το RC522 ενσωματώνεται κυρίως μέσω SPI (Serial Peripheral Interface) και υποστηρίζει ταχύτητες έως και 10 Mbps. Υποστηρίζει επίσης I2C και UART, αν και στα περισσότερα έργα Arduino χρησιμοποιείται SPI λόγω της μεγαλύτερης ταχύτητας και απλότητάς του σε αυτό το πλαίσιο.

Ηλεκτρικά, η μονάδα λειτουργεί με τάση τροφοδοσίας μεταξύ 2,5V και 3,3V. Η πλακέτα συνήθως έχει μια σαφώς σημειωμένη ακίδα VCC για σύνδεση στα 3,3V. Μην την τροφοδοτείτε απευθείας με 5V , διαφορετικά κινδυνεύετε να την καταστρέψετε. Από τη θετική πλευρά, τα λογικά επίπεδα είναι γενικά ανεκτικά στα 5V, επομένως μπορεί να συνδεθεί με ψηφιακούς ακροδέκτες Arduino UNO χωρίς μετατροπείς στάθμης για βασικές δοκιμές, αν και σε επαγγελματικό σχεδιασμό, συνιστάται η προσαρμογή των επιπέδων.

Καρφίτσωμα της μονάδας RC522

Το τυπικό RC522 περιλαμβάνει 8 ακροδέκτες σύνδεσης στον μικροελεγκτή:

  • VCC: τροφοδοτικό, μεταξύ 2,5 V και 3,3 V.
  • RST: επαναφορά ακίδας; επιτρέπει την απενεργοποίηση και επανεκκίνηση της μονάδας ρυθμίζοντας το επίπεδο σε ΧΑΜΗΛΟ/ΥΨΗΛΟ.
  • GND: μάζα ή αναφορά της γης.
  • IRQ: ακίδα διακοπής που μπορεί να ειδοποιήσει τον μικροελεγκτή όταν μια ετικέτα εισέλθει στο πεδίο του αναγνώστη.
  • MISO / SCL / TX: πολυλειτουργική ακίδα· όπως MISO σε SPI, όπως SCL σε I2C ή όπως TX σε UART.
  • MOSI: γραμμή δεδομένων εξόδου από τον κύριο στον υποτελή στο SPI.
  • SCKΡολόι διεπαφής SPI.
  • SS / SDA / RX: ακροδέκτης επιλογής υποτελούς μονάδας στο SPI, SDA στο I2C ή RX στο UART.

Στο Arduino UNO και σε άλλες μητρικές που βασίζονται στο ATmega328P, οι ακροδέκτες SPI έχουν ήδη οριστεί από το υλικό, επομένως το τυπικό διάγραμμα σύνδεσης για τη χρήση του SPI είναι:

  • VCC → 3,3 V από το Arduino.
  • GND → Γείωση Arduino.
  • SCK → ακίδα 13 στο UNO/Nano.
  • MOSI → ακίδα 11 στο UNO/Nano.
  • ΜΙΣΟ → ακίδα 12 στο UNO/Nano.
  • SS (SDA) → ακίδα 10 (ή αυτή που επιλέγετε ως SS, αλλά πρέπει να την καθορίσετε στον κώδικα).
  • RST → για παράδειγμα, η ακίδα Arduino 9.
  • IRQ → Προαιρετικό, μπορεί να παραμείνει ασύνδετο εάν δεν χρησιμοποιείται διακοπή.

Σε πλακέτες όπως το Arduino Mega, το Leonardo ή το Micro, οι γραμμές SPI ενδέχεται να βρίσκονται σε διαφορετικές ακίδες ή στην υποδοχή ICSP, επομένως είναι σημαντικό να ελέγξετε τον πίνακα ισοδυναμίας στην επίσημη τεκμηρίωση πριν συνδέσετε οτιδήποτε.

Εγκατάσταση της βιβλιοθήκης MFRC522 και βασική ανάγνωση ετικετών

Παρόλο που το MFRC522 μπορεί να προγραμματιστεί από την αρχή, η εσωτερική του επικοινωνία είναι αρκετά περίπλοκη, επομένως είναι κοινή πρακτική η χρήση της βιβλιοθήκης που αναπτύχθηκε από τον Miguel Balboa , η οποία είναι διαθέσιμη στο GitHub και στον διαχειριστή βιβλιοθήκης του Arduino IDE. Αυτή η βιβλιοθήκη ενσωματώνει όλες τις απαραίτητες λειτουργίες για την αρχικοποίηση του αναγνώστη, την ανίχνευση καρτών, τον έλεγχο ταυτότητας τομέων και την ανάγνωση ή εγγραφή μπλοκ.

Για να το εγκαταστήσετε από το Arduino IDE, απλώς ανοίξτε το Library Manager, αναζητήστε το "MFRC522" και επιλέξτε την έκδοση που διατηρείται από την κοινότητα (GitHub Community) . Πρέπει επίσης να συμπεριλάβετε τη βιβλιοθήκη SPI, η οποία περιλαμβάνεται ήδη στο IDE.

Μόλις εγκατασταθεί, η τυπική ροή σε ένα απλό σκίτσο για την ανάγνωση του UID μιας ετικέτας είναι:

  • Συμπεριλάβετε βιβλιοπωλεία SPI.hy MFRC522.h.
  • Ορίστε τους ακροδέκτες RST και SS που θα χρησιμοποιεί ο αναγνώστης.
  • Δημιουργήστε ένα αντικείμενο MFRC522 περνώντας του αυτές τις ακίδες.
  • Στο setup(), αρχικοποιήστε το Serial, το SPI και τον αναγνώστη με PCD_Init().
  • Σε βρόχο(), χρησιμοποιήστε PICC_IsNewCardPresent() για να μάθετε αν υπάρχει κάποια κάρτα κοντά και PICC_ReadCardSerial() για να διαβάσετε τα βασικά σας δεδομένα.
  • Αποκτήστε πρόσβαση στο UID χρησιμοποιώντας mfrc522.uid.uidByte και στο μέγεθος με το mfrc522.uid.size.
  • Τερματίστε την επικοινωνία με την ετικέτα καλώντας PICC_HaltA().

Αυτός ο τύπος σκίτσου είναι ιδανικός για τη λήψη του UID πολλών καρτών ή μπρελόκ και την εκτέλεση γρήγορων δοκιμών, για παράδειγμα, για απλό έλεγχο πρόσβασης όπου μόνο το αναγνωσμένο UID συγκρίνεται με μια λίστα εξουσιοδοτημένων UID.

Δομή μνήμης σε κάρτες MIFARE Classic 1K

Οι κάρτες που συνήθως συνοδεύουν το RC522 είναι συνήθως MIFARE Classic 1K . Αυτές οι κάρτες προσφέρουν 1 KB μνήμης οργανωμένη ιεραρχικά σε τομείς και μπλοκ, με ένα μάλλον ιδιόμορφο σύστημα κλειδιών και δικαιωμάτων που θα πρέπει να κατανοηθεί πριν γραφτεί οτιδήποτε.

Η συνολική μνήμη χωρίζεται σε 16 τομείς με αριθμούς από 0 έως 15. Κάθε τομέας περιέχει 4 μπλοκ, με αριθμούς από 0 έως 3 εντός αυτού του τομέα. Κάθε μπλοκ αποθηκεύει 16 bytes δεδομένων , δηλαδή 16 θέσεις με αριθμούς από 0 έως 15, επομένως κάθε τομέας προσφέρει 64 bytes.

Μέσα σε αυτά τα τέσσερα μπλοκ ανά τομέα, μόνο τρία προορίζονται για την αποθήκευση δεδομένων χρήστη: τα μπλοκ 0, 1 και 2 κάθε τομέα (εκτός από τον τομέα 0, ο οποίος έχει ειδικά χαρακτηριστικά). Το τελευταίο μπλοκ κάθε τομέα, το μπλοκ 3, είναι γνωστό ως μπλοκ τρέιλερ . Αποθηκεύει τα κλειδιά κρυπτογράφησης και τα bit πρόσβασης που ελέγχουν ποιες λειτουργίες επιτρέπονται σε αυτόν τον τομέα.

Στο τρέιλερ, τα 16 bytes κατανέμονται ως εξής:

  • Κλειδί Α: 6 bytes.
  • Όροι πρόσβασης: 3 byte που ορίζουν δικαιώματα ανάγνωσης/εγγραφής, έλεγχο ταυτότητας και ορατότητα κλειδιού.
  • Αχρησιμοποίητο byte (U): 1 byte που δεν χρησιμοποιείται.
  • Κλειδί Β: 6 bytes.

Οι κάρτες που προέρχονται από το εργοστάσιο με τις μονάδες συνήθως έχουν το Κλειδί Α και το Κλειδί Β αρχικοποιημένα σε FF FF FF FF FF FF FF , κάτι που είναι εξαιρετικά ανασφαλές, καθώς οποιοσδήποτε γνωρίζει το πρότυπο μπορεί να επαληθεύσει και να τροποποιήσει το περιεχόμενο της κάρτας. Μια σχετικά κοινή πρακτική σε έργα DIY είναι η χρήση των ίδιων κλειδιών σε όλους τους τομείς, αν και για πραγματική ασφάλεια θα ήταν καλύτερο να διαφοροποιηθεί.

Επιπλέον, το μπλοκ 0 του τομέα 0 είναι ειδικό: αποθηκεύει το UID της κάρτας (συνήθως 4 bytes σε αυτές τις κάρτες MIFARE Classic) και τα δεδομένα του κατασκευαστή. Αυτό το μπλοκ θεωρείται στην πράξη μόνο για ανάγνωση. Η προσπάθεια τροποποίησής του μπορεί να καταστρέψει την κάρτα μη αναστρέψιμα.

Αλλάξτε τα πλήκτρα Πλήκτρο Α και Πλήκτρο Β σε έναν τομέα

Αν θέλετε να χρησιμοποιήσετε μια κάρτα MIFARE σε ένα έργο Arduino και RC522 με οποιονδήποτε ουσιαστικό τρόπο, το πρώτο πράγμα που πρέπει να κάνετε είναι να αλλάξετε τα προεπιλεγμένα κλειδιά . Αυτό εμποδίζει οποιονδήποτε διαθέτει αναγνώστη και την τυπική βιβλιοθήκη να παραβιάσει την κάρτα σας χωρίς εξουσιοδότηση.

Η βασική ιδέα για την ενημέρωση των κλειδιών ενός συγκεκριμένου τομέα (για παράδειγμα, τομέας 15) είναι η εξής:

  • Ορίστε τα τρέχοντα κλειδιά στον κώδικα (τις εργοστασιακές προεπιλογές, εάν δεν έχουν αλλάξει).
  • Ορίστε τις νέες λέξεις-κλειδιά Κλειδί Α και Κλειδί Β που θέλετε να χρησιμοποιήσετε σε αυτόν τον τομέα.
  • Υπολογίστε τον αριθμό μπλοκ ρυμουλκούμενου για αυτόν τον τομέα, ο οποίος είναι τομέας * 4 + 3 (για τον τομέα 15, τετράγωνο 63).
  • Επαληθεύστε πρώτα με το τρέχον Κλειδί Α χρησιμοποιώντας PCD_Authenticate() σχετικά με το μπλοκ ρυμουλκούμενου.
  • Διαβάστε το μπλοκ τρέιλερ με MIFARE_Read() για να λάβετε το περιεχόμενό σας.
  • Τροποποιήστε τα bytes που αντιστοιχούν στα νέα κλειδιά σε ένα buffer.
  • Επαναλάβετε την επαλήθευση ταυτότητας εάν είναι απαραίτητο (για παράδειγμα, με το Κλειδί Β).
  • Γράψτε το ενημερωμένο μπλοκ τρέιλερ με MIFARE_Write().

Κατά τη διάρκεια αυτής της διαδικασίας, είναι σημαντικό να μην μετακινήσετε την κάρτα από τον αναγνώστη μέχρι να ολοκληρωθεί η λειτουργία , επειδή μια διακοπή εγγραφής στο μπλοκ ρυμούλκησης θα μπορούσε να καταστήσει τον τομέα μη προσβάσιμο. Μόλις αλλάξουν τα κλειδιά, θα πρέπει επίσης να ενημερώσετε τον κώδικα Arduino για να χρησιμοποιήσετε αυτά τα νέα κλειδιά σε μελλοντικές λειτουργίες σε αυτόν τον τομέα.

Ανάγνωση και εγγραφή μπλοκ: προσομοίωση κάρτας μεταφοράς

Μια πολύ ενδεικτική εφαρμογή ανάγνωσης και γραφής με το MIFARE Classic είναι η προσομοίωση της συμπεριφοράς μιας επαναφορτιζόμενης κάρτας δημόσιων συγκοινωνιών . Η ιδέα είναι απλή: η κάρτα αποθηκεύει έναν αριθμό διαδρομών σε ένα συγκεκριμένο μπλοκ και το σύστημα σας επιτρέπει να φορτώνετε διαδρομές (επαναφόρτιση) ή να τις χρησιμοποιείτε (επικύρωση κατά την επιβίβαση στο λεωφορείο ή το τραμ).

Για τον σκοπό αυτό, ο τομέας 15 θα μπορούσε να δεσμευτεί για δεδομένα χρήστη, για παράδειγμα, και ένα από τα μπλοκ δεδομένων του (για παράδειγμα, το μπλοκ 60) θα μπορούσε να χρησιμοποιηθεί για την αποθήκευση του μετρητή ταξιδιών. Ο αριθμός των διαθέσιμων ταξιδιών αποθηκεύεται στο byte 0 του μπλοκ. Τα υπόλοιπα byte του μπλοκ θα μπορούσαν να χρησιμοποιηθούν για άλλα δεδομένα ή απλώς να αφεθούν στο μηδέν.

Η τυπική ροή κώδικα για το τμήμα επαναφόρτωσης θα ήταν:

  • Ορισμός Πλήκτρο Α και Πλήκτρο Β ισχύοντες κανονισμοί που προστατεύουν τον εν λόγω τομέα (για παράδειγμα, αυτοί που αλλάξαμε στο προηγούμενο βήμα).
  • Ορίστε τον αριθμό τομέα, το μπλοκ δεδομένων (60) και το μπλοκ ρυμούλκησης (63).
  • Δηλώστε έναν πίνακα 16 byte (blockData) όπου το πρώτο byte θα αντιπροσωπεύει τον αριθμό των ταξιδιών.
  • Κάθε φορά που μια κάρτα φέρεται κοντά στον αναγνώστη, Διαβάστε το μπλοκ 60 χρησιμοποιώντας την MIFARE_Read() για να λάβετε τα τρέχοντα ταξίδια.
  • Προσθέστε τον αριθμό των διαδρομών για επαναφόρτιση (για παράδειγμα, 10) στην τιμή που διαβάστηκε.
  • Ενημέρωση δεδομένων. Αποκλεισμός με τον νέο αριθμό ταξιδιών.
  • Επαληθεύστε τον έλεγχο ταυτότητας με το Κλειδί Α στο αντίστοιχο μπλοκ τρέιλερ.
  • Γράψτε το μπλοκ 60 με MIFARE_Write().
  • Διαβάστε ξανά για να επαληθεύσετε ότι η τιμή έχει ενημερωθεί σωστά.

Για το μέρος της κατανάλωσης διαδρομής (επικύρωση στο δίαυλο), ο κώδικας είναι πρακτικά πανομοιότυπος, αλλά αντί να προστίθεται, αφαιρείται ένα από τον μετρητή. Πριν από την αφαίρεση, ελέγχει εάν η τιμή ανάγνωσης είναι μηδέν: εάν δεν υπάρχουν απομένουσες διαδρομές, η πρόσβαση απαγορεύεται και ο χρήστης καλείται να επαναφορτώσει . Εάν ο μετρητής είναι μεγαλύτερος από μηδέν, μειώνεται, το μπλοκ ξαναγράφεται και ο αριθμός των απομενουσών διαδρομών εμφανίζεται στην οθόνη.

Και στις δύο περιπτώσεις, είναι σημαντικό να χειρίζεστε σωστά τους κωδικούς επιστροφής των συναρτήσεων της βιβλιοθήκης MFRC522 (π.χ., σφάλματα ελέγχου ταυτότητας ή εγγραφής) και να διακόπτετε πάντα την κρυπτογραφημένη επικοινωνία με την PCD_StopCrypto1() και την ίδια την κάρτα με την PICC_HaltA() στο τέλος κάθε κύκλου.

Απλός έλεγχος πρόσβασης βάσει UID

Ένα άλλο κλασικό έργο που χρησιμοποιεί το RC522 και το Arduino είναι ένα βασικό σύστημα ελέγχου πρόσβασης όπου η είσοδος επιτρέπεται ή απαγορεύεται με βάση το UID της πλακέτας που παρουσιάζεται. Αυτή η προσέγγιση δεν χρησιμοποιεί την εσωτερική μνήμη της πλακέτας, μόνο το μοναδικό αναγνωριστικό της, και ως εκ τούτου είναι αρκετά περιορισμένη σε ασφάλεια, αλλά χρησιμεύει ως ένα γρήγορο παράδειγμα.

Η τυπική προσέγγιση είναι:

  • Διαβάστε το UID της κάρτας χρησιμοποιώντας τις βασικές συναρτήσεις της βιβλιοθήκης (PICC_IsNewCardPresent, PICC_ReadCardSerial, κ.λπ.).
  • Αντιγράψτε τα bytes του UID ανάγνωσης σε έναν προσωρινό πίνακα (π.χ., ActualUID).
  • Ορίστε στον κώδικα αρκετούς πίνακες με τα UID των εξουσιοδοτημένων καρτών (για παράδειγμα, User1, User2).
  • Δημιουργήστε μια συνάρτηση σύγκρισης πίνακα byte που επιστρέφει αληθές αν και τα δύο είναι ίδια.
  • Συγκρίνετε το ActualUID με κάθε εξουσιοδοτημένο UID και, εάν υπάρχει κάποια αντιστοιχία, ενεργοποιήστε μια ψηφιακή έξοδο, εμφανίστε το μήνυμα "Πρόσβαση επιτράπηκε" ή ενεργοποιήστε μια ηλεκτρική κλειδαριά.
  • Εάν δεν ταιριάζει με κανένα από αυτά, εμφανίστε το μήνυμα "Δεν επιτρέπεται η πρόσβαση" και κρατήστε το σύστημα κλειστό.

Σε ένα πραγματικό περιβάλλον, ένα τέτοιο σύστημα είναι ευάλωτο στην κλωνοποίηση ετικετών, επειδή πολλοί φθηνοί αναγνώστες επιτρέπουν την αντιγραφή ή την εξομοίωση UID. Για την αύξηση της ασφάλειας, θα ήταν απαραίτητο να χρησιμοποιηθεί η εσωτερική μνήμη της κάρτας, τα προσαρμοσμένα κλειδιά και πιθανώς πιο ισχυροί κρυπτογραφικοί μηχανισμοί από αυτούς του MIFARE Classic, η ασφάλεια των οποίων αμφισβητείται ευρέως επί του παρόντος. Παρόλα αυτά, χρησιμεύει ως ένα εξαιρετικό παιδαγωγικό παράδειγμα για την εκμάθηση της ροής εργασίας ανάγνωσης καρτών και την ενσωμάτωση με φυσικούς ενεργοποιητές.

Με όλα τα παραπάνω, έχετε πλέον μια πλήρη κατανόηση των βασικών εννοιών RFID, κατανοείτε πώς συμπεριφέρονται οι διαφορετικές ζώνες συχνοτήτων, γνωρίζετε την εσωτερική λειτουργία μιας κάρτας MIFARE Classic 1K, έχετε κατακτήσει τη βασική σύνδεση και χρήση της μονάδας RC522 με το Arduino και έχετε δει λεπτομερώς πώς να διαβάζετε και να γράφετε μπλοκ για να δημιουργείτε συστήματα πραγματικού κόσμου, όπως έλεγχο πρόσβασης ή κάρτες συγκοινωνίας . Από εδώ, το επόμενο φυσικό βήμα είναι να συνδυάσετε την RFID με άλλες μονάδες (οθόνες LCD, ρελέ, Wi-Fi, βάσεις δεδομένων cloud) και να μάθετε πώς να ελέγχετε έξυπνες λάμπες για να δημιουργήσετε πιο ολοκληρωμένες λύσεις που είναι ακόμη πιο κοντά στα επαγγελματικά συστήματα που βλέπετε καθημερινά σε καταστήματα, δημόσιες συγκοινωνίες και συσκευές ανέπαφης πληρωμής.

Πώς να ελέγξετε τα δικαιώματα εφαρμογών στα Windows 11
σχετικό άρθρο:
Πώς να ελέγξετε και να ελέγξετε τα δικαιώματα εφαρμογών στα Windows 11

Προσθήκη ως προτιμώμενης πηγής στην Google