rc522python
https://randomnerdtutorials.com/security-access-using-mfrc522-rfid-reader-with-arduino/dom
切記 3.3Voop
/* * ----------------------------------------------------------------------------------------- * MFRC522 Arduino Arduino Arduino Arduino Arduino * Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro * Signal Pin Pin Pin Pin Pin Pin * ----------------------------------------------------------------------------------------- * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST * SPI SS SDA(SS) 10 53 D10 10 10 * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 * */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class MFRC522::MIFARE_Key key; //保存卡的信息 String namerfid; // 初始化卡的id byte nuidPICC[4]; //初始化讀卡器 void Rfid_int() { SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522 for (byte i = 0; i < 6; i++) { key.keyByte[i] = 0xFF; } } //實時獲取新卡的信息 void Get_rfid() { // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle. if ( ! rfid.PICC_IsNewCardPresent()) { return; } // Verify if the NUID has been readed if ( ! rfid.PICC_ReadCardSerial()) { return; } //Serial.print(F("PICC type: ")); MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); // Serial.println(rfid.PICC_GetTypeName(piccType)); String rfig_type=String(rfid.PICC_GetTypeName(piccType)); // Check is the PICC of Classic MIFARE type if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { //Serial.println(F("Your tag is not of type MIFARE Classic.")); return; } if (rfid.uid.uidByte[0] != nuidPICC[0] || rfid.uid.uidByte[1] != nuidPICC[1] || rfid.uid.uidByte[2] != nuidPICC[2] || rfid.uid.uidByte[3] != nuidPICC[3] ) { // Store NUID into nuidPICC array 保存上個 卡信息 for (byte i = 0; i < 4; i++) { nuidPICC[i] = rfid.uid.uidByte[i]; namerfid=namerfid+String(rfid.uid.uidByte[i]);//新卡-和上一張不同 } namerfid=namerfid+"-new-1-type-"+rfig_type+"-";//新卡-和上一張不同 } else { // Store NUID into nuidPICC array 保存上個 卡信息 for (byte i = 0; i < 4; i++) { nuidPICC[i] = rfid.uid.uidByte[i]; namerfid=namerfid+String(rfid.uid.uidByte[i]);//舊卡-和上一張同樣 } namerfid=namerfid+"-new-0-type-"+rfig_type+"-";///舊卡-和上一張同樣 } Serial.println(namerfid); namerfid=""; // Halt PICC rfid.PICC_HaltA(); // Stop encryption on PCD rfid.PCD_StopCrypto1(); } void setup() { Serial.begin(9600); Rfid_int(); } void loop() { //獲取卡的信息 Get_rfid(); //delay(1); }