電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>基于RFID的學(xué)生出勤監(jiān)控系統(tǒng)

基于RFID的學(xué)生出勤監(jiān)控系統(tǒng)

2023-01-30 | zip | 0.05 MB | 次下載 | 免費

資料介紹

電路板如下圖:
pYYBAGPV_D2AZ07DAAA8M5r__sg755.jpg
poYBAGPV_ECASWVmAAA61qRWUv4046.jpg

組件

499
Adafruit 工業(yè)有限責任公司
x 1
ESP-WROOM-32 x 1

描述

基于 RFID 的學(xué)生出勤監(jiān)控系統(tǒng)

在教室里,時間被浪費在點名上,因為它是手動完成的。在這個提議的系統(tǒng)中,被授權(quán)的學(xué)生被賦予一個 RFID 標簽。通過將 RFID 標簽放在閱讀器上,學(xué)生或工作人員可以立即驗證他們的出勤情況。因此,存儲在該卡中的數(shù)據(jù)被稱為該人的身份/出勤。一旦學(xué)生將卡片放在 RFID 讀卡器前面,它就會讀取數(shù)據(jù)并與存儲的數(shù)據(jù)進行驗證。蜂鳴器會在掃描 RFID 標簽時發(fā)出蜂鳴聲。如果數(shù)據(jù)匹配,則它會在 LCD 上顯示一條消息,確認該學(xué)生的輸入,否則會顯示一條消息,拒絕出席。通過按下連接到微控制器的狀態(tài)按鈕,可以從該系統(tǒng)中檢索學(xué)生的出勤狀態(tài)。最后,他/她的日期和時間數(shù)據(jù)存儲在谷歌表格中。這個特定的谷歌表格顯示了日期、時間和 RFID 標簽中存儲的數(shù)據(jù)。因此,由于所有學(xué)生的出勤情況都直接存儲在數(shù)據(jù)庫中,因此節(jié)省了大量時間。它將產(chǎn)生一個實時考勤監(jiān)控系統(tǒng),供講師、校園管理人員和家長等各方訪問。

代碼

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");
? }
? //----------------------------------------------------------------------------
? }

pYYBAGPV_EeATsQ0AAC-dcdD7NQ567.png

?

poYBAGPV_EmAcifmAABqLBsfaks839.png

?

?

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學(xué)會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費