資料介紹
電路板如下圖:

組件
|
499 Adafruit 工業(yè)有限責(zé)任公司 |
x 1 |
| ESP-WROOM-32 | x 1 |
描述
基于 RFID 的學(xué)生出勤監(jiān)控系統(tǒng)
在教室里,時(shí)間被浪費(fèi)在點(diǎn)名上,因?yàn)樗鞘謩?dòng)完成的。在這個(gè)提議的系統(tǒng)中,被授權(quán)的學(xué)生被賦予一個(gè) RFID 標(biāo)簽。通過(guò)將 RFID 標(biāo)簽放在閱讀器上,學(xué)生或工作人員可以立即驗(yàn)證他們的出勤情況。因此,存儲(chǔ)在該卡中的數(shù)據(jù)被稱為該人的身份/出勤。一旦學(xué)生將卡片放在 RFID 讀卡器前面,它就會(huì)讀取數(shù)據(jù)并與存儲(chǔ)的數(shù)據(jù)進(jìn)行驗(yàn)證。蜂鳴器會(huì)在掃描 RFID 標(biāo)簽時(shí)發(fā)出蜂鳴聲。如果數(shù)據(jù)匹配,則它會(huì)在 LCD 上顯示一條消息,確認(rèn)該學(xué)生的輸入,否則會(huì)顯示一條消息,拒絕出席。通過(guò)按下連接到微控制器的狀態(tài)按鈕,可以從該系統(tǒng)中檢索學(xué)生的出勤狀態(tài)。最后,他/她的日期和時(shí)間數(shù)據(jù)存儲(chǔ)在谷歌表格中。這個(gè)特定的谷歌表格顯示了日期、時(shí)間和 RFID 標(biāo)簽中存儲(chǔ)的數(shù)據(jù)。因此,由于所有學(xué)生的出勤情況都直接存儲(chǔ)在數(shù)據(jù)庫(kù)中,因此節(jié)省了大量時(shí)間。它將產(chǎn)生一個(gè)實(shí)時(shí)考勤監(jiān)控系統(tǒng),供講師、校園管理人員和家長(zhǎng)等各方訪問(wèn)。
代碼
RFID入口代碼
阿杜諾
| ? |
#include |
| ? |
#include |
| ? | //-------------------------------------------------- |
| ? | //GPIO 0 --> D3 |
| ? | //GPIO 2 --> D4 |
| ? | const uint8_t RST_PIN = D3; |
| ? | const uint8_t SS_PIN = D4; |
| ? | int BUZZER = 2; |
| ? | //-------------------------------------------------- |
| ? | MFRC522 mfrc522(SS_PIN, RST_PIN); |
| ? | MFRC522::MIFARE_Key key; |
| ? | //-------------------------------------------------- |
| ? | /* Be aware of Sector Trailer Blocks */ |
| ? | int blockNum = 4; |
| ? | byte block_data[16]; |
| ? | /* Create array to read data from Block */ |
| ? | /* Length of buffer should be 4 Bytes |
| ? | more than the size of Block (16 Bytes) */ |
| ? | byte bufferLen = 18; |
| ? | byte readBlockData[18]; |
| ? | //-------------------------------------------------- |
| ? | MFRC522::StatusCode status; |
| ? | //-------------------------------------------------- |
| ? | ? |
| ? | ? |
| ? | ? |
| ? | void setup() |
| ? | { |
| ? | //------------------------------------------------------ |
| ? | //Initialize serial communications with PC |
| ? | Serial.begin(9600); |
| ? | //------------------------------------------------------ |
| ? | //Initialize SPI bus |
| ? | SPI.begin(); |
| ? | //------------------------------------------------------ |
| ? | //Initialize MFRC522 Module |
| ? | mfrc522.PCD_Init(); |
| ? | Serial.println("Scan a MIFARE 1K Tag to write data..."); |
| ? | //------------------------------------------------------ |
| ? | } |
| ? | ? |
| ? | ? |
| ? | ? |
| ? | /**************************************************************************************************** |
| ? | * loop() function |
| ? | ****************************************************************************************************/ |
| ? | void loop() |
| ? | { |
| ? | //------------------------------------------------------------------------------ |
| ? | /* Prepare the ksy for authentication */ |
| ? | /* All keys are set to FFFFFFFFFFFFh at chip delivery from the factory */ |
| ? | for (byte i = 0; i < 6; i++){ |
| ? | key.keyByte[i] = 0xFF; |
| ? | } |
| ? | //------------------------------------------------------------------------------ |
| ? | /* Look for new cards */ |
| ? | /* Reset the loop if no new card is present on RC522 Reader */ |
| ? | if ( ! mfrc522.PICC_IsNewCardPresent()){return;} |
| ? | //------------------------------------------------------------------------------ |
| ? | /* Select one of the cards */ |
| ? | if ( ! mfrc522.PICC_ReadCardSerial()) {return;} |
| ? | //------------------------------------------------------------------------------ |
| ? | Serial.print("\n"); |
| ? | Serial.println("**Card Detected**"); |
| ? | /* Print UID of the Card */ |
| ? | Serial.print(F("Card UID:")); |
| ? | for (byte i = 0; i < mfrc522.uid.size; i++){ |
| ? | Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); |
| ? | Serial.print(mfrc522.uid.uidByte[i], HEX); |
| ? | } |
| ? | Serial.print("\n"); |
| ? | /* Print type of card (for example, MIFARE 1K) */ |
| ? | Serial.print(F("PICC type: ")); |
| ? | MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); |
| ? | Serial.println(mfrc522.PICC_GetTypeName(piccType)); |
| ? | ? |
| ? | ------------------------------------------------------------------------------ |
| ? | blockNum =4; |
| ? | toBlockDataArray("211EC206"); //ID |
| ? | WriteDataToBlock(blockNum, block_data); |
| ? | ReadDataFromBlock(blockNum, readBlockData); |
| ? | dumpSerial(blockNum, readBlockData); |
| ? | ? |
| ? | blockNum =5; |
| ? | toBlockDataArray("Madhumithra"); //First Name |
| ? | WriteDataToBlock(blockNum, block_data); |
| ? | ReadDataFromBlock(blockNum, readBlockData); |
| ? | dumpSerial(blockNum, readBlockData); |
| ? | ? |
| ? | blockNum =6; |
| ? | toBlockDataArray("S"); //Last Name |
| ? | WriteDataToBlock(blockNum, block_data); |
| ? | ReadDataFromBlock(blockNum, readBlockData); |
| ? | dumpSerial(blockNum, readBlockData); |
| ? | ? |
| ? | blockNum =8; |
| ? | toBlockDataArray("Shanmugavel.M"); //Father Name |
| ? | WriteDataToBlock(blockNum, block_data); |
| ? | ReadDataFromBlock(blockNum, readBlockData); |
| ? | dumpSerial(blockNum, readBlockData); |
| ? | ? |
| ? | blockNum =9; |
| ? | toBlockDataArray("24-09-2003"); //Date of Birth |
| ? | WriteDataToBlock(blockNum, block_data); |
| ? | ReadDataFromBlock(blockNum, readBlockData); |
| ? | dumpSerial(blockNum, readBlockData); |
| ? | ? |
| ? | blockNum =10; |
| ? | toBlockDataArray("8526267629"); //Phone Number |
| ? | WriteDataToBlock(blockNum, block_data); |
| ? | ReadDataFromBlock(blockNum, readBlockData); |
| ? | dumpSerial(blockNum, readBlockData); |
| ? | ? |
| ? | blockNum =12; |
| ? | toBlockDataArray("Pollachi"); //Address |
| ? | WriteDataToBlock(blockNum, block_data); |
| ? | ReadDataFromBlock(blockNum, readBlockData); |
| ? | dumpSerial(blockNum, readBlockData); |
| ? | ? |
| ? | //tone(BUZZER, 1000, 1000); |
| ? | } |
| ? | ? |
| ? | ? |
| ? | ? |
| ? | /**************************************************************************************************** |
| ? | * Writ() function |
| ? | ****************************************************************************************************/ |
| ? | void WriteDataToBlock(int blockNum, byte blockData[]) |
| ? | { |
| ? | Serial.print("Writing data on block "); |
| ? | Serial.print(blockNum); |
| ? | //------------------------------------------------------------------------------ |
| ? | /* Authenticating the desired data block for write access using Key A */ |
| ? | status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, blockNum, &key, &(mfrc522.uid)); |
| ? | if (status != MFRC522::STATUS_OK){ |
| ? | Serial.print("Authentication failed for Write: "); |
| ? | Serial.println(mfrc522.GetStatusCodeName(status)); |
| ? | return; |
| ? | } |
| ? | //------------------------------------------------------------------------------ |
| ? | else { |
| ? | Serial.println("Authentication success"); |
| ? | } |
| ? | //------------------------------------------------------------------------------ |
| ? | /* Write data to the block */ |
| ? | status = mfrc522.MIFARE_Write(blockNum, blockData, 16); |
| ? | if (status != MFRC522::STATUS_OK) { |
| ? | Serial.print("Writing to Block failed: "); |
| ? | Serial.println(mfrc522.GetStatusCodeName(status)); |
| ? | return; |
| ? | } |
| ? | else |
| ? | {Serial.println("Data was written into Block successfully");} |
| ? | //------------------------------------------------------------------------------ |
| ? | } |
| ? | ? |
| ? | ? |
| ? | ? |
| ? | ? |
| ? | ? |
| ? | /**************************************************************************************************** |
| ? | * ReadDataFromBlock() function |
| ? | ****************************************************************************************************/ |
| ? | void ReadDataFromBlock(int blockNum, byte readBlockData[]) |
| ? | { |
| ? | Serial.print("Reading data from block "); |
| ? | Serial.println(blockNum); |
| ? | //------------------------------------------------------------------------------ |
| ? | /* Authenticating the desired data block for Read access using Key A */ |
| ? | status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, blockNum, &key, &(mfrc522.uid)); |
| ? | //------------------------------------------------------------------------------ |
| ? | if (status != MFRC522::STATUS_OK){ |
| ? | Serial.print("Authentication failed for Read: "); |
| ? | Serial.println(mfrc522.GetStatusCodeName(status)); |
| ? | return; |
| ? | } |
| ? | else { |
| ? | Serial.println("Authentication success"); |
| ? | } |
| ? | //------------------------------------------------------------------------------ |
| ? | /* Reading data from the Block */ |
| ? | status = mfrc522.MIFARE_Read(blockNum, readBlockData, &bufferLen); |
| ? | if (status != MFRC522::STATUS_OK){ |
| ? | Serial.print("Reading failed: "); |
| ? | Serial.println(mfrc522.GetStatusCodeName(status)); |
| ? | return; |
| ? | } |
| ? | else { |
| ? | Serial.println("Block was read successfully"); |
| ? | } |
| ? | //------------------------------------------------------------------------------ |
| ? | } |
| ? | ? |
| ? | ? |
| ? | ? |
| ? | /**************************************************************************************************** |
| ? | * dumpSerial() function |
| ? | ****************************************************************************************************/ |
| ? | void dumpSerial(int blockNum, byte blockData[]) |
| ? | { |
| ? | Serial.print("\n"); |
| ? | Serial.print("Data in Block:"); |
| ? | Serial.print(blockNum); |
| ? | Serial.print(" --> "); |
| ? | for (int j=0 ; j<16 ; j++){ |
| ? | Serial.write(readBlockData[j]); |
| ? | } |
| ? | Serial.print("\n");Serial.print("\n"); |
| ? | } |
| ? | ? |
| ? | ? |
| ? | /**************************************************************************************************** |
| ? | * dumpSerial() function |
| ? | ****************************************************************************************************/ |
| ? | void toBlockDataArray(String str) |
| ? | { |
| ? | byte len = str.length(); |
| ? | if(len > 16) len = 16; |
| ? | for (byte i = 0; i < len; i++) block_data[i] = str[i]; |
| ? | for (byte i = len; i < 16; i++) block_data[i] = ' '; |
| ? | } |
RFID發(fā)布代碼
阿杜諾
| ? |
#include |
| ? |
#include |
| ? |
#include |
| ? |
#include |
| ? |
#include |
| ? | ? |
| ? |
#include |
| ? |
#include |
| ? | LiquidCrystal_I2C lcd(0x27, 16, 2); |
| ? | //--------------------------------------------------------------------------------------------------------- |
| ? | // Enter Google Script Deployment ID: |
| ? | const char *GScriptId = "AKfycbwTtq4rcL8zUaB8rjExY9KYo26q_n0hVqkiEdjS9YEBtfRg5C80OWvEVK2Hv5YUEj8ivw"; |
| ? | //--------------------------------------------------------------------------------------------------------- |
| ? | // Enter network credentials: |
| ? | const char* ssid = "ECE"; |
| ? | const char* password = "62806280"; |
| ? | //--------------------------------------------------------------------------------------------------------- |
| ? | // Enter command (insert_row or append_row) and your Google Sheets sheet name (default is Sheet1): |
| ? | String payload_base ="{"command": "insert_row", "sheet_name": "Sheet1", "values": "; |
| ? | String payload = ""; |
| ? | //--------------------------------------------------------------------------------------------------------- |
| ? | // Google Sheets setup (do not edit) |
| ? | const char* host= "script.google.com"; |
| ? | const int httpsPort = 443; |
| ? | const char* fingerprint = ""; |
| ? | String url = String("/macros/s/") + GScriptId + "/exec"; |
| ? | HTTPSRedirect* client = nullptr; |
| ? | //------------------------------------------------------------ |
| ? | // Declare variables that will be published to Google Sheets |
| ? | String student_id; |
| ? | //------------------------------------------------------------ |
| ? | int blocks[] = {4,5,6,8,9, 10, 12}; |
| ? | #define total_blocks(sizeof(blocks) / sizeof(blocks[0])) |
| ? | //------------------------------------------------------------ |
| ? | #define RST_PIN0//D3 |
| ? | #define SS_PIN 2//D4 |
| ? | #define BUZZER 4//D2 |
| ? | //------------------------------------------------------------ |
| ? | MFRC522 mfrc522(SS_PIN, RST_PIN); |
| ? | MFRC522::MIFARE_Key key; |
| ? | MFRC522::StatusCode status; |
| ? | //------------------------------------------------------------ |
| ? | /* Be aware of Sector Trailer Blocks */ |
| ? | int blockNum = 2; |
| ? | /* Create another array to read data from Block */ |
| ? | /* Legthn of buffer should be 2 Bytes more than the size of Block (16 Bytes) */ |
| ? | byte bufferLen = 18; |
| ? | byte readBlockData[18]; |
| ? | //------------------------------------------------------------ |
| ? | ? |
| ? | /**************************************************************************************************** |
| ? | * setup Function |
| ? | ****************************************************************************************************/ |
| ? | void setup() { |
| ? | //---------------------------------------------------------- |
| ? | Serial.begin(9600); |
| ? | delay(10); |
| ? | Serial.println('\n'); |
| ? | //---------------------------------------------------------- |
| ? | SPI.begin(); |
| ? | //---------------------------------------------------------- |
| ? | //initialize lcd screen |
| ? | lcd.init(); |
| ? | // turn on the backlight |
| ? | lcd.backlight(); |
| ? | lcd.clear(); |
| ? | lcd.setCursor(0,0); //col=0 row=0 |
| ? | lcd.print("Connecting to"); |
| ? | lcd.setCursor(0,1); //col=0 row=0 |
| ? | lcd.print("WiFi..."); |
| ? | //---------------------------------------------------------- |
| ? | // Connect to WiFi |
| ? | WiFi.begin(ssid, password); |
| ? | Serial.print("Connecting to "); |
| ? | Serial.print(ssid); Serial.println(" ..."); |
| ? | ? |
| ? | while (WiFi.status() != WL_CONNECTED) { |
| ? | delay(1000); |
| ? | Serial.print("."); |
| ? | } |
| ? | Serial.println('\n'); |
| ? | Serial.println("Connection established!"); |
| ? | Serial.print("IP address:\t"); |
| ? | Serial.println(WiFi.localIP()); |
| ? | //---------------------------------------------------------- |
| ? | // Use HTTPSRedirect class to create a new TLS connection |
| ? | client = new HTTPSRedirect(httpsPort); |
| ? | client->setInsecure(); |
| ? | client->setPrintResponseBody(true); |
| ? | client->setContentTypeHeader("application/json"); |
| ? | //---------------------------------------------------------- |
| ? | lcd.clear(); |
| ? | lcd.setCursor(0,0); //col=0 row=0 |
| ? | lcd.print("Connecting to"); |
| ? | lcd.setCursor(0,1); //col=0 row=0 |
| ? | lcd.print("Google "); |
| ? | delay(5000); |
| ? | //---------------------------------------------------------- |
| ? | Serial.print("Connecting to "); |
| ? | Serial.println(host); |
| ? | //---------------------------------------------------------- |
| ? | // Try to connect for a maximum of 5 times |
| ? | bool flag = false; |
| ? | for(int i=0; i<5; i++){ |
| ? | int retval = client->connect(host, httpsPort); |
| ? | //************************************************* |
| ? | if (retval == 1){ |
| ? | flag = true; |
| ? | String msg = "Connected. OK"; |
| ? | Serial.println(msg); |
| ? | lcd.clear(); |
| ? | lcd.setCursor(0,0); //col=0 row=0 |
| ? | lcd.print(msg); |
| ? | delay(2000); |
| ? | break; |
| ? | } |
| ? | //************************************************* |
| ? | else |
| ? | Serial.println("Connection failed. Retrying..."); |
| ? | //************************************************* |
| ? | } |
| ? | //---------------------------------------------------------- |
| ? | if (!flag){ |
| ? | //____________________________________________ |
| ? | lcd.clear(); |
| ? | lcd.setCursor(0,0); //col=0 row=0 |
| ? | lcd.print("Connection fail"); |
| ? | //____________________________________________ |
| ? | Serial.print("Could not connect to server: "); |
| ? | Serial.println(host); |
| ? | delay(5000); |
| ? | return; |
| ? | //____________________________________________ |
| ? | } |
| ? | //---------------------------------------------------------- |
| ? | delete client;// delete HTTPSRedirect object |
| ? | client = nullptr; // delete HTTPSRedirect object |
| ? | //---------------------------------------------------------- |
| ? | } |
| ? | ? |
| ? | /**************************************************************************************************** |
| ? | * loop Function |
| ? | ****************************************************************************************************/ |
| ? | void loop() { |
| ? | //---------------------------------------------------------------- |
| ? | static bool flag = false; |
| ? | if (!flag){ |
| ? | client = new HTTPSRedirect(httpsPort); |
| ? | client->setInsecure(); |
| ? | flag = true; |
| ? | client->setPrintResponseBody(true); |
| ? | client->setContentTypeHeader("application/json"); |
| ? | } |
| ? | if (client != nullptr){ |
| ? | if (!client->connected()) |
| ? | {client->connect(host, httpsPort);} |
| ? | } |
| ? | else{Serial.println("Error creating client object!");} |
| ? | //---------------------------------------------------------------- |
| ? | lcd.clear(); |
| ? | lcd.setCursor(0,0); //col=0 row=0 |
| ? | lcd.print("Scan your Tag"); |
| ? | ? |
| ? | /* Initialize MFRC522 Module */ |
| ? | mfrc522.PCD_Init(); |
| ? | /* Look for new cards */ |
| ? | /* Reset the loop if no new card is present on RC522 Reader */ |
| ? | if ( ! mfrc522.PICC_IsNewCardPresent()) {return;} |
| ? | /* Select one of the cards */ |
| ? | if ( ! mfrc522.PICC_ReadCardSerial()) {return;} |
| ? | /* Read data from the same block */ |
| ? | Serial.println(); |
| ? | Serial.println(F("Reading last data from RFID...")); |
| ? | //---------------------------------------------------------------- |
| ? | String values = "", data; |
| ? | /* |
| ? | //creating payload - method 1 |
| ? | //---------------------------------------------------------------- |
| ? | ReadDataFromBlock(blocks[0], readBlockData); //student id |
| ? | data = String((char*)readBlockData); data.trim(); |
| ? | student_id = data; |
| ? | //---------------------------------------------------------------- |
| ? | ReadDataFromBlock(blocks[1], readBlockData); //first name |
| ? | data = String((char*)readBlockData); data.trim(); |
| ? | first_name = data; |
| ? | //---------------------------------------------------------------- |
| ? | ReadDataFromBlock(blocks[2], readBlockData); //last name |
| ? | data = String((char*)readBlockData); data.trim(); |
| ? | last_name = data; |
| ? | //---------------------------------------------------------------- |
| ? | ReadDataFromBlock(blocks[3], readBlockData); //phone number |
| ? | data = String((char*)readBlockData); data.trim(); |
| ? | phone_number = data; |
| ? | //---------------------------------------------------------------- |
| ? | ReadDataFromBlock(blocks[4], readBlockData); //address |
| ? | data = String((char*)readBlockData); data.trim(); |
| ? | address = data; data = ""; |
| ? | //---------------------------------------------------------------- |
| ? | values = """ + student_id + ","; |
| ? | values += first_name + ","; |
| ? | values += last_name + ","; |
| ? | values += phone_number + ","; |
| ? | values += address + ""}"; |
| ? | //----------------------------------------------------------------*/ |
| ? | //creating payload - method 2 - More efficient |
| ? | for (byte i = 0; i < total_blocks; i++) { |
| ? | ReadDataFromBlock(blocks[i], readBlockData); |
| ? | //************************************************* |
| ? | if(i == 0){ |
| ? | data = String((char*)readBlockData); |
| ? | data.trim(); |
| ? | student_id = data; |
| ? | values = """ + data + ","; |
| ? | } |
| ? | //************************************************* |
| ? | else if(i == total_blocks-1){ |
| ? | data = String((char*)readBlockData); |
| ? | data.trim(); |
| ? | values += data + ""}"; |
| ? | } |
| ? | //************************************************* |
| ? | else{ |
| ? | data = String((char*)readBlockData); |
| ? | data.trim(); |
| ? | values += data + ","; |
| ? | } |
| ? | } |
| ? | //---------------------------------------------------------------- |
| ? | // Create json object string to send to Google Sheets |
| ? | // values = """ + value0 + "," + value1 + "," + value2 + ""}" |
| ? | payload = payload_base + values; |
| ? | //---------------------------------------------------------------- |
| ? | lcd.clear(); |
| ? | lcd.setCursor(0,0); //col=0 row=0 |
| ? | lcd.print("Publishing Data"); |
| ? | lcd.setCursor(0,1); //col=0 row=0 |
| ? | lcd.print("Please Wait..."); |
| ? | //---------------------------------------------------------------- |
| ? | // Publish data to Google Sheets |
| ? | Serial.println("Publishing data..."); |
| ? | Serial.println(payload); |
| ? | if(client->POST(url, host, payload)){ |
| ? | // do stuff here if publish was successful |
| ? | lcd.clear(); |
| ? | lcd.setCursor(0,0); //col=0 row=0 |
| ? | lcd.print("Student ID: "+student_id); |
| ? | lcd.setCursor(0,1); //col=0 row=0 |
| ? | lcd.print("Present"); |
| ? | } |
| ? | //---------------------------------------------------------------- |
| ? | else{ |
| ? | // do stuff here if publish was not successful |
| ? | Serial.println("Error while connecting"); |
| ? | lcd.clear(); |
| ? | lcd.setCursor(0,0); //col=0 row=0 |
| ? | lcd.print("Failed."); |
| ? | lcd.setCursor(0,1); //col=0 row=0 |
| ? | lcd.print("Try Again"); |
| ? | } |
| ? | //---------------------------------------------------------------- |
| ? | // a delay of several seconds is required before publishing again |
| ? | delay(5000); |
| ? | tone(BUZZER, 1000, 1000); |
| ? | } |
| ? | ? |
| ? | ? |
| ? | /**************************************************************************************************** |
| ? | * |
| ? | ****************************************************************************************************/ |
| ? | /**************************************************************************************************** |
| ? | * ReadDataFromBlock() function |
| ? | ****************************************************************************************************/ |
| ? | void ReadDataFromBlock(int blockNum, byte readBlockData[]) |
| ? | { |
| ? | //---------------------------------------------------------------------------- |
| ? | /* Prepare the ksy for authentication */ |
| ? | /* All keys are set to FFFFFFFFFFFFh at chip delivery from the factory */ |
| ? | for (byte i = 0; i < 6; i++) { |
| ? | key.keyByte[i] = 0xFF; |
| ? | } |
| ? | //---------------------------------------------------------------------------- |
| ? | /* Authenticating the desired data block for Read access using Key A */ |
| ? | status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, blockNum, &key, &(mfrc522.uid)); |
| ? | //----------------------------------------------------------------------------s |
| ? | if (status != MFRC522::STATUS_OK){ |
| ? | Serial.print("Authentication failed for Read: "); |
| ? | Serial.println(mfrc522.GetStatusCodeName(status)); |
| ? | return; |
| ? | } |
| ? | //---------------------------------------------------------------------------- |
| ? | else { |
| ? | Serial.println("Authentication success"); |
| ? | } |
| ? | //---------------------------------------------------------------------------- |
| ? | /* Reading data from the Block */ |
| ? | status = mfrc522.MIFARE_Read(blockNum, readBlockData, &bufferLen); |
| ? | if (status != MFRC522::STATUS_OK) { |
| ? | Serial.print("Reading failed: "); |
| ? | Serial.println(mfrc522.GetStatusCodeName(status)); |
| ? | return; |
| ? | } |
| ? | //---------------------------------------------------------------------------- |
| ? | else { |
| ? | readBlockData[16] = ' '; |
| ? | readBlockData[17] = ' '; |
| ? | Serial.println("Block was read successfully"); |
| ? | } |
| ? | //---------------------------------------------------------------------------- |
| ? | } |

?

?
?
- 基于GPS/RFID、GPRS技術(shù)的學(xué)生安全定位系統(tǒng)
- 基于RFID模塊的在線考勤系統(tǒng) 0次下載
- 基于RFID的訪問(wèn)控制和監(jiān)控系統(tǒng)
- 基于RFID的智能安防閉鎖系統(tǒng)設(shè)計(jì)方案 41次下載
- 時(shí)隙ALOHA法對(duì)RFID系統(tǒng)防碰撞問(wèn)題中的應(yīng)用說(shuō)明 5次下載
- 如何進(jìn)行RFID中間件讀寫(xiě)器管理的倉(cāng)庫(kù)管理系統(tǒng) 21次下載
- RFID 學(xué)生考勤系統(tǒng)的詳細(xì)資料介紹免費(fèi)下載 46次下載
- 2017年江西省大學(xué)生電子設(shè)計(jì)制作現(xiàn)場(chǎng)(28屆)賽題 22次下載
- 基于RFID工業(yè)炸藥生產(chǎn)過(guò)程實(shí)時(shí)監(jiān)控系統(tǒng)的開(kāi)發(fā)與實(shí)現(xiàn)許亮 4次下載
- 基于ZigBee和RFID技術(shù)的冷鏈無(wú)線監(jiān)控系統(tǒng)張學(xué)龍 1次下載
- 基于RFID技術(shù)的核心物品實(shí)時(shí)監(jiān)控管理系統(tǒng) 13次下載
- 基于RFID的醫(yī)院廢物監(jiān)控管理系統(tǒng) 34次下載
- 基于RFID的學(xué)生考勤系統(tǒng)設(shè)計(jì)
- 基于CAN總線的負(fù)荷監(jiān)控系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)
- 人員出勤表
- RFID系統(tǒng)的基本組成 rfid系統(tǒng)的工作原理 4221次閱讀
- 基于SSM的學(xué)生管理系統(tǒng) 1097次閱讀
- 基于SSM的學(xué)生管理系統(tǒng) 954次閱讀
- 運(yùn)用RFID技術(shù)的學(xué)生考勤系統(tǒng)設(shè)計(jì) 2812次閱讀
- 使用RFID標(biāo)簽的安防監(jiān)控系統(tǒng)設(shè)計(jì) 1357次閱讀
- RFID倉(cāng)儲(chǔ)管理系統(tǒng)的特點(diǎn) 1624次閱讀
- RFID在牧場(chǎng)中是如何應(yīng)用的 905次閱讀
- 基于rfid的車輛監(jiān)控系統(tǒng)如何來(lái)設(shè)計(jì)實(shí)現(xiàn) 1793次閱讀
- 走班考勤系統(tǒng)是如何發(fā)揮RFID的特長(zhǎng)的 1371次閱讀
- 基于RFID技術(shù)的MES系統(tǒng)設(shè)計(jì)方案 3353次閱讀
- rfid系統(tǒng)的工作原理_rfid系統(tǒng)的組成 1.4w次閱讀
- 基于RFID監(jiān)控系統(tǒng)的醫(yī)療廢物信息化管理方案 3967次閱讀
- 基于RFID技術(shù)的嵌入式系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)方案分析 768次閱讀
- 智慧校園安全設(shè)備視頻監(jiān)控檢測(cè)系統(tǒng)方案 2419次閱讀
- 基于ZigBee技術(shù)的有源RFID系統(tǒng) 2204次閱讀
下載排行
本周
- 1PFC電路與BOOST電路設(shè)計(jì)實(shí)例分享
- 1.83 MB | 12次下載 | 4 積分
- 2世平基于靈動(dòng)微 SPIN560C 的低壓無(wú)刷電機(jī)應(yīng)用方案
- 10.93 MB | 11次下載 | 免費(fèi)
- 3電源測(cè)試報(bào)告-基于 國(guó)民技術(shù) N32L406 和杰華特 JW3376+3330 的 BMS 方案
- 6.47 MB | 11次下載 | 免費(fèi)
- 4PWM控制器的控制方法
- 0.39 MB | 3次下載 | 4 積分
- 5電流檢測(cè)芯片F(xiàn)P135應(yīng)用說(shuō)明
- 1.24 MB | 3次下載 | 免費(fèi)
- 6全面解讀被動(dòng)式與主動(dòng)式PFC電路
- 1.27 MB | 1次下載 | 4 積分
- 7HC88L051F4低功耗芯片規(guī)格書(shū)
- 4.76 MB | 1次下載 | 免費(fèi)
- 8CIU32D655x5數(shù)據(jù)手冊(cè)
- 2.14 MB | 1次下載 | 免費(fèi)
本月
- 1常用電子元器件使用手冊(cè)
- 2.40 MB | 52次下載 | 免費(fèi)
- 2高功率密度碳化硅MOSFET軟開(kāi)關(guān)三相逆變器損耗分析
- 2.27 MB | 33次下載 | 10 積分
- 3PFC電路與BOOST電路設(shè)計(jì)實(shí)例分享
- 1.83 MB | 12次下載 | 4 積分
- 4世平基于靈動(dòng)微 SPIN560C 的低壓無(wú)刷電機(jī)應(yīng)用方案
- 10.93 MB | 11次下載 | 免費(fèi)
- 5電源測(cè)試報(bào)告-基于 國(guó)民技術(shù) N32L406 和杰華特 JW3376+3330 的 BMS 方案
- 6.47 MB | 11次下載 | 免費(fèi)
- 6USB拓展塢PCB圖資料
- 0.57 MB | 11次下載 | 免費(fèi)
- 7MS1826 HDMI 多功能視頻處理器數(shù)據(jù)手冊(cè)
- 4.51 MB | 9次下載 | 免費(fèi)
- 8HAL9303線性霍爾效應(yīng)傳感器技術(shù)手冊(cè)
- 0.70 MB | 9次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935134次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191424次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183352次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81600次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73818次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App






創(chuàng)作
發(fā)文章
發(fā)帖
提問(wèn)
發(fā)資料
發(fā)視頻
上傳資料賺積分
評(píng)論