Đại Học SPKT Hưng Yên Khoa Điện – Điện Tử Ngày nay, ngành công nghệ kỹ thuật ngày càng phát triển. Các máy móc đều được tự động hóa đáp ứng nhu cầu con người và đem lại hiểu quả cao cho các doanh nghiệp trong nhiều lĩnh vực như công nghiệp, nông nghiệp,...Bên cạnh trang thiết bị máy móc hiện đại, nhân lực cũng là một trong những yếu tố quan trọng quyết định đến sự tồn tại và phát triển của các doanh nghiệp. Chính vì nhu cầu nhân lực cao và có nhiều phức tạp nên nhu cầu quản lý đòi hỏi cũng cần phải cải tiến để có thể đáp ứng nhu cầu người dùng một cách tốt nhất. Hiện nay, có rất nhiều cách để quản lý học sinh sinh viên đi học khác nhau, cụ thể như điểm danh trực tiếp (hình thức này yêu cầu giáo viên và phải có danh sách kèm theo bên cạnh, giáo viên thường sẽ gọi tên và đối chiếu với danh sách để kiểm tra. Hình thức này mất khá nhiều thời gian, lại không mang tính chuyên nghiệp. Bên cạnh đó yêu cầu thầycô phải có phương pháp xác định người được điểm danh là đúng.), điểm danh bằng hình thức làm bài kiểm tra giấy gây mất thời gian và độ chính xác chưa cao. quản lý kiểm soát bằng hình thức quẹt thẻ RFID ( hình thức này khá phổ biến, nhanh, gọn lại có tính chính xác cao, nhưng đòi hỏi người dùng phải mang theo thẻ, nếu khống có thì không thể điểm danh được) hay bằng hình thức quét vân tay (hình thức cũng rất phổ biến trong các doanh nghiệp, công ty hiện nay, chuyên nghiệp, chính xác, yêu cầu người dùng phải them vân tay trước đó, hay được áp dụng chấm công cho nhân viên). Nhận thấy nhu cầu quản lý thường hay có nhiều hình thức xảy ra như điểm danh chấm công cho nhân viên, hay điểm danh trong trường hợp đột xuất ( trong các cuộc họp), kiểm soát khách tham quan công ty nên nhóm quyết định chọn đề tài : “Thiết kế, chế tạo phần cứng thiết bị điểm danh lớp thực hành bằng cảm biến vân tay” để có thể điểm danh trong nhiều trường hợp khác nhau, và được lưu và một file excel và được đưa lên server nội bộ của công ty để dễ dàng quản lý từ xa.
TRƢỜNG ĐẠI HỌC SƢ PHẠM KỸ THUẬT HƢNG YÊN KHOA ĐIỆN –ĐIỆN TỬ ĐỒ ÁN TỐT NGHIỆP TÊN ĐỀ TÀI : Thiết kế, chế tạo thiết bị điểm danh cảm biến vân tay thẻ từ Sinh Viên Thực Hiện : Nguyễn Phương Hảo Lớp Giảng Viên Hướng Dẫn : 112182.1 : Nguyễn Thị Thắm Hưng Yên 2022 LỜI MỞ ĐẦU LỜI CẢM ƠN Chương Tổng quan đề tài 1.1 Giới thiệu đề tài 1.2 Mục đính nghiên cứu 1.3 Giới hạn đề tài 1.4 Phương pháp phương tiện nghiên cứu 1.4.1 Phương pháp nghiên cứu 1.4.2 Phương tiện Chương Cơ sở lý thuyết 2.1 Giới thiệu arduino 2.1.1 Khái niệm arduino 2.1.2 Arduino uno R3 2.2.2 Năng lượng 2.2.3 Bộ nhớ 2.2.4 Cơng cụ lập trình 2.2 Module RFID RC522 2.2.1 Tổng quan RFID RC522 2.2.2 Chi tiết cấu hình chân RC522 2.2.3 Các đặc tính RC522 2.2.4 Ứng dụng module RFID RC522 .10 2.2.5 Tổ chức vùng nhớ thẻ từ 10 2.2.6 Chuẩn giao tiếp spi 10 2.3 Cảm biến vân tay .12 2.3.1 Tổng quan cảm biến vân tay 12 2.3.2 Cảm biến As 608 13 2.4 Mạch chuyển đổi I2C 15 2.5 Stm32f103 16 2.5.1 Giới thiệu họ stm 16 2.5.2 Kit stm32f103 17 2.6 ESP 8266 19 2.6.1 Tổng quan ESP 8266 19 2.6.2 Thông số kĩ thuật 21 2.7 Module ds1307 chuẩn giao tiếp I2C 21 2.7.1 Module ds1307 21 2.7.2 Giao thức i2c 22 2.8 LCD 20x4 25 2.9 Chuẩn giao tiếp UART 26 2.10 Cấu hình CUBE MX cho mạch 28 Chương Thiết kế chế tạo .33 3.1 Sơ đồ khối hệ thống 33 3.2 Nguyên lý mạch .35 3.3 Sơ đồ mạch in bố trí linh kiện 36 3.3 Lưu đồ thuật toán .38 3.4 Hình ảnh hồn thiện 41 Chương Kết luận hướng phát triển………………………………………51 4.1 Kêt luận 42 4.2 Hướng phát triển đề tài 42 Tài liệu tham khảo .43 Phụ lục .44 Danh mục hình ảnh Hình 2.1 Uno r3 Hình 2.2 Vi điều khiển board uno Hình 2.3 Giao diện cơng cụ lập trình Hình 2.4 Giao diện device manager Hình 2.5 Thiết lập board cổng com cho uno Hình 2.6 Thẻ từ RFID .8 Hình 2.7 Sơ đồ chân RC522 Hình 2.8 Tổ chức vùng nhớ thẻ mifare class .10 Hình 2.9 Mơ hình giao tiếp spi (stm32 với RC522) 11 Hình 2.10 Cơ chế truyền nhận master slave 12 Hình 2.11 Một số mẫu vân tay 13 Hình 2.12 Cảm biến vân tay 14 Hình 2.13 Mạch chuyển đổi i2c lcd 15 Hình 2.14 Bảng địa i2c 16 Hình 2.15 Tổng quan kit 17 Hình 2.16 Sơ đồ chân 20 Hình 2.17 Chíp kít esp 8266 21 Hình 2.18 Module DS1307 22 Hình 2.19 Giao tiếp i2c master nhiều slave 23 Hình 2.20 Khung truyền i2c 23 Hình 2.21 Cách giao tiếp với master với slave thơng qua địa slave 24 Hình 2.22 Khởi tạo giao tiếp i2c .25 Hình 2.23 Màn hình LCD 20x4 26 Hình 2.24 Kết nối UART 27 Hình 2.25 Khung truyền UART 27 Hình 2.26 Cấu hình cho chip stm32 29 Hình 2.27 Sắp xếp thứ tự ngắt cho chip 29 Hình 2.28 Cấu hình clock cho chip 30 Hình 2.29 Cấu hình UART1 30 Hình 2.30 Cấu hình spi 31 Hình 2.31 Cấu hình I2C 31 Hình 3.1 Sơ đồ khối 33 Hình 3.2 Khối nguồn 33 Hình 3.3 Khối cảm biến 33 Hình 3.4 Khối hiển thị .34 Hình 3.5 Khối xử lý trung tâm 34 Hình 3.6 Sơ đồ nguyên lý 35 Hình 3.7 Sơ đồ mạch in .36 Hình 3.8 Sơ đồ bố trí linh kiện mặt board 37 Hình 3.9 Lưu đồ thuật tốn mạch 38 Hình 3.10 Lưu đồ thuật toán google scritp .39 Hình 3.11 Hình ảnh hồn thiện sản phẩm 41 LỜI MỞ ĐẦU Ngày nay, ngành công nghệ kỹ thuật ngày phát triển Các máy móc tự động hóa đáp ứng nhu cầu người đem lại hiểu cao cho doanh nghiệp nhiều lĩnh vực công nghiệp, nông nghiệp, Bên cạnh trang thiết bị máy móc đại, nhân lực yếu tố quan trọng định đến tồn phát triển doanh nghiệp Chính nhu cầu nhân lực cao có nhiều phức tạp nên nhu cầu quản lý đòi hỏi cần phải cải tiến để đáp ứng nhu cầu người dùng cách tốt Hiện nay, có nhiều cách để quản lý học sinh sinh viên học khác nhau, cụ thể điểm danh trực tiếp (hình thức yêu cầu giáo viên phải có danh sách kèm theo bên cạnh, giáo viên thường gọi tên đối chiếu với danh sách để kiểm tra Hình thức nhiều thời gian, lại khơng mang tính chun nghiệp Bên cạnh u cầu thầy/cơ phải có phương pháp xác định người điểm danh đúng.), điểm danh hình thức làm kiểm tra giấy gây thời gian độ xác chưa cao quản lý kiểm sốt hình thức quẹt thẻ RFID ( hình thức phổ biến, nhanh, gọn lại có tính xác cao, đòi hỏi người dùng phải mang theo thẻ, khống có khơng thể điểm danh được) hay hình thức quét vân tay (hình thức phổ biến doanh nghiệp, công ty nay, chuyên nghiệp, xác, yêu cầu người dùng phải them vân tay trước đó, hay áp dụng chấm cơng cho nhân viên) Nhận thấy nhu cầu quản lý thường hay có nhiều hình thức xảy điểm danh chấm cơng cho nhân viên, hay điểm danh trường hợp đột xuất ( họp), kiểm soát khách tham quan cơng ty nên nhóm định chọn đề tài : ―Thiết kế, chế tạo phần cứng thiết bị điểm danh lớp thực hành cảm biến vân tay‖ để điểm danh nhiều trường hợp khác nhau, lưu file excel đưa lên server nội công ty để dễ dàng quản lý từ xa Tất thao tác chip STM32F103C8T6 đảm nhận thực thông qua chuẩn giao tiếp Bên cạnh đó, nhóm muốn thơng qua đề tài để tìm hiểu thêm ứng dụng công nghệ vào đời sống đồng thời vận dụng hiểu sâu kiến thức học LỜI CẢM ƠN Nhóm sinh viên thực đề tài xin chân thành cảm ơn thầy cô giáo khoa Điện – Điện tử trường ĐHSPKT Hưng Yên, tận tình bảo, truyền đạt cho chúng em kiến thức, thành tựu khoa học xã hội nghành điện tử để chúng em thực đề tài Đặc biệt chúng em xin bày tỏ lòng biết ơn sâu sắc đến cô Nguyễn Thị Thắm người hướng dẫn tận tình giúp đỡ, dạy chúng em để chúng em thực đề tài Nhóm sinh viên xin chân thành cám ơn ý kiến đóng góp quý thầy, cô giáo bạn cho việc thực đề tài Chúng em xin chân thành cảm ơn! Chƣơng I Tổng quan đề tài 1.1 Giới thiệu đề tài Ngày với phát triển mạnh mẽ ngành khoa học kỹ thuật, cơng nghệ kỹ thuật điện tử mà kỹ thuật tự động điều khiển đóng vai trị quan trọng lĩnh vực khoa học kỹ thuật, quản lí, cơng nghiệp, cung cấp thơng tin Do sinh viên chuyên ngành Điện tử, phải biết nắm bắt vận dụng cách có hiệu nhằm góp phần vào phát triển khoa học kỹ thuật giới nói chung phát triển kỹ thuật điện tử nói riêng Bên cạnh cịn thúc đẩy phát triển kinh tế nước nhà Như biết, Trường học nơi cần rèn luyện tính kỷ luật cao tạo nhân tài đất nước Ý thức sinh viên môi trường học tập cần phải nâng cao Tuy nhiên khơng tránh khỏi tình trạng gian lận học đường như: Nhờ học hộ, điểm danh hộ, thi hộ… làm ảnh hưởng tới chất lượng dạy học trường Một giải pháp nhiều trường học áp dụng để loại bỏ tình trạng tiêu cực sử dụng máy điểm danh quẹt thẻ RFID quét vân tay Điều giúp hỗ trợ điểm danh tiết học nhằm giúp giáo viên quản lý nắm bắt tình trạng học sinh cách xác Đặc biệt sử dụng máy điểm danh vào việc điểm danh cho sinh viên giúp cho sinh viên chủ động thời gian học tập tới lớp theo quy định nhà trường Việc điểm danh tự động nhanh chóng cần lần xác nhận vân tay sinh viên điểm danh xong giúp tiện kiệm thời gian xác nhằm nâng cao tính chuyên nghiệp nhà trường Từ yêu cầu thực tế, chúng em chọn đề tài: ―Thiết kế thi công hệ thống điểm danh sinh viên sử dụng hai phương pháp quẹt thẻ RFID quét vân tay‖ 1.2 Mục đính nghiên cứu Đồ án nghiên cứu, khảo sát thực với mục đích áp dụng kiến thức học nhà trường để thiết kế, tạo hệ thống điểm danh sinh viên hai phương pháp quẹt thẻ RFID quét vân tay Hệ thống gồm có: Module RFID RC522 Module AS 608 Module ESP8266 Module DS1307 Mạch điều khiển dùng chip Stm32 chip Arduino để xử lý Màn hình LCD 20x4 1.3 Giới hạn đề tài Trong giới hạn thời gian cho phép đề tài kết hợp với kiến thức có đươc suốt trình học khơng cho phép thực sản phẩm hồn thiện Cho nên nhóm chúng em tập trung vào vấn đề sau: Dùng Board Arduino Stm32 để làm trung tâm điều khiển toàn hệ thống Module RFID RC522 để quẹt thẻ từ Module AS 608 dùng đề quét vân tay Module ESP8266 để kết nối mạng để gửi danh sách điểm danh lên gg sheet Module DS1307 dùng để gửi danh sách điểm danh theo ca Mạch điều khiển dùng chip Stm32 chip Arduino để xử lý Màn hình LCD 20x4 để thị Mạch chạy ổn định toàn trình 1.4 Phƣơng pháp phƣơng tiện nghiên cứu 1.4.1 Phƣơng pháp nghiên cứu Kết hợp lý thuyết thực nghiệm: Sau nhận đề tài, nhóm tập trung tìm hiểu vấn đề liên quan đến đề tài Sau lập trình mơ phỏng, chế tạo mạch để kiểm tra thực tế Trong trình chạy thực tế kiểm tra lỗi, hạn chế mắc phải để chỉnh sửa phát triển thêm ý tưởng Phương pháp quan sát: khảo sát số mạch điện thực tế có thị trường tham khảo thêm số dạng mạch từ mạng Internet Phương pháp tham khảo tài liệu: cách thu thập thông tin từ sách, tạp chí điện tử truy cập từ mạng Internet 1.4.2 Phƣơng tiện Phần mềm biên dịch chương trình Keilc, IDE arduino, phần mềm thiết lập CUBE MX, phần mềm thiết kế mạch Altium, phần mềm mơ Proteus Các giáo trình điện tử học, tài liệu thảo luận Internet 1.5 Ý nghĩa thực tiễn Ý nghĩa thực tiễn đề tài giúp giáo viên quản lý nắm bắt tình trạng học sinh cách xác giúp cho sinh viên chủ động thời gian học tập tới lớp theo quy định nhà trường Chƣơng II Cơ sở lý thuyết 2.1 Giới thiệu Arduino 2.1.1 Khái niệm arduino Arduino tảng mã nguồn mở sử dụng để xây dựng dự án điện tử Arduino bao gồm bảng mạch lập trình (thường gọi vi điều khiển) phần mềm IDE (Mơi trường phát triển tích hợp) chạy máy tính, sử dụng để viết tải mã máy tính lên bo mạch Nền tảng Arduino phổ biến với người bắt đầu với thiết bị điện tử Không giống hầu hết bo mạch lập trình trước đây, Arduino khơng cần phần cứng riêng để tải mã lên bo mạch - bạn cần sử dụng cáp USB Ngồi ra, Arduino IDE sử dụng phiên đơn giản C++, giúp việc học lập trình dễ dàng Arduino cung cấp mẫu chuẩn giúp dễ tiếp cận chức vi điều khiển 2.1.2 Arduino uno R3 Hình 2.1 Uno r3 lcd.print("3.xoa full");} void loop() { finger.confidence=0; i=0; getFingerprintID(); delay(50); if (d!=5){ lcd.clear(); lcd.setCursor(0,0); lcd.print("van tay"); d=5;} if ( digitalRead(buttonPin4)==0){delay(20);while(digitalRead(buttonPin4)==0); giao_dien_lcd(); d=4;while(1){ if ( digitalRead(buttonPin1)==0){delay(20);while(digitalRead(buttonPin1)==0);them();} if ( digitalRead(buttonPin2)==0){delay(20);while(digitalRead(buttonPin2)==0); xoa();} if ( digitalRead(buttonPin3)==0){delay(20);while(digitalRead(buttonPin3)==0); xoa_all();} if ( digitalRead(buttonPin4)==0){delay(20);while(digitalRead(buttonPin4)==0); break;}}} } void add(){ // Serial.print("van tay co ID #"); // Serial.println(id); while (! getFingerprintEnroll() ); } uint8_t getFingerprintEnroll() { lcd.setCursor(0,1); lcd.print("quet ngon tay");delay(2000); a=1; int p = -1; // Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id); 59 while (p != FINGERPRINT_OK) {//khac chup van tay p = finger.getImage();//tim anh ngon tay switch (p) { case FINGERPRINT_OK: // Serial.println("Image taken");//chup van tay break; case FINGERPRINT_NOFINGER: //Serial.println(".");///doi xac nhan van tay break; case FINGERPRINT_PACKETRECIEVEERR: // Serial.println("Communication error");//loi giao tiep break; case FINGERPRINT_IMAGEFAIL: // Serial.println("Imaging error");//loi hinh ảnh break; default: //Serial.println("Unknown error");//loi break; } } // OK success!//oke p = finger.image2Tz(1);//tim hinh anh switch (p) { case FINGERPRINT_OK: // Serial.println("Image converted");//van tay dc sang ảnh break; case FINGERPRINT_IMAGEMESS: // Serial.println("Image too messy");//anh qua lon xon return p; case FINGERPRINT_PACKETRECIEVEERR: //Serial.println("Communication error");//loi dao tiep return p; case FINGERPRINT_FEATUREFAIL: // Serial.println("Could not find fingerprint features");//k tim thay van tay 60 return p; case FINGERPRINT_INVALIDIMAGE: // Serial.println("Could not find fingerprint features"); return p; default: // Serial.println("Unknown error"); return p; } ///kiem tra van tay co duoc dich sang anh // Serial.println("Remove finger"); // delay(2000); p = 0; while (p != FINGERPRINT_NOFINGER) { p = finger.getImage();//rim kiem ginh anh van tay dc xac nhan roi check lại kiem tra } //Serial.print("ID "); Serial.println(id);//in id p = -1; lcd.setCursor(0,1); lcd.print("dat lai tay"); // Serial.println("Place same finger again"); while (p != FINGERPRINT_OK) { //chua doc dc anh p = finger.getImage();//tim kiem ảnh van tay switch (p) { case FINGERPRINT_OK: // Serial.println("Image taken");// da thay van tay dc chup break; case FINGERPRINT_NOFINGER://dang doi van tay dc chon // Serial.print("."); break; case FINGERPRINT_PACKETRECIEVEERR: // Serial.println("Communication error"); break; case FINGERPRINT_IMAGEFAIL: // Serial.println("Imaging error"); 61 break; default: // Serial.println("Unknown error"); break; } } // OK success! p = finger.image2Tz(2); switch (p) { case FINGERPRINT_OK: //Serial.println("Image converted");// anh da dc oke break; case FINGERPRINT_IMAGEMESS: //Serial.println("Image too messy");// van tay k ro rang return p; case FINGERPRINT_PACKETRECIEVEERR: // Serial.println("Communication error"); return p; case FINGERPRINT_FEATUREFAIL: // Serial.println("Could not find fingerprint features"); return p; case FINGERPRINT_INVALIDIMAGE: // Serial.println("Could not find fingerprint features"); return p; default: //Serial.println("Unknown error"); return p; } // OK converted! // Serial.print("Creating model for #"); Serial.println(id); p = finger.createModel(); //tao van tay sau lan xac thuc if (p == FINGERPRINT_OK) { 62 // lan ban in da khop lcd.setCursor(0,1); lcd.print("van tay dang duoc luu");delay(2000); a=2; } else if (p == FINGERPRINT_PACKETRECIEVEERR) { return p; } else if (p == FINGERPRINT_ENROLLMISMATCH) { lcd.setCursor(0,1); lcd.print("2 van tay k khop"); delay(1000);a=1; return p; } else { lcd.setCursor(1,1); lcd.print("loi"); delay(1000);a=1; return p; } // Serial.print("ID "); Serial.println(id); p = finger.storeModel(id); // da them cong if (p == FINGERPRINT_OK) { //Serial.println("Stored!"); id++;lcd.setCursor(1,1); Serial.println("oke hoan tat");lcd.print("hoan ");delay(2000); EEPROM.write(2,id); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { //Serial.println("Communication error"); return p; } else if (p == FINGERPRINT_BADLOCATION) { // Serial.println("Could not store in that location"); return p; } else if (p == FINGERPRINT_FLASHERR) { //Serial.println("Error writing to flash"); return p; } else { // Serial.println("Unknown error"); return p; } 63 tat return true; } uint8_t deleteFingerprint(uint8_t id) { uint8_t p = -1; p = finger.deleteModel(id); if (p == FINGERPRINT_OK) { // Serial.println("Deleted!"); lcd.setCursor(0,1); lcd.print(" Deleted!"); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { // Serial.println("Communication error"); } else if (p == FINGERPRINT_BADLOCATION) { // Serial.println("Could not delete in that location"); } else if (p == FINGERPRINT_FLASHERR) { // Serial.println("Error writing to flash"); } else { // Serial.print("Unknown error: 0x"); Serial.println(p, HEX); } return p; }////////////////////////////////////// doc van tay uint8_t getFingerprintID() { uint8_t p = finger.getImage(); switch (p) { case FINGERPRINT_OK: // Serial.println("Image taken"); break; case FINGERPRINT_NOFINGER: // Serial.println("No finger detected"); return p; // case FINGERPRINT_PACKETRECIEVEERR: // Serial.println("Communication error"); 64 // return p; // case FINGERPRINT_IMAGEFAIL: // Serial.println("Imaging error"); // return p; default: // Serial.println("Unknown error"); return p; } // OK success! p = finger.image2Tz(); switch (p) { case FINGERPRINT_OK: // Serial.println("Image converted"); break; case FINGERPRINT_IMAGEMESS: // Serial.println("Image too messy"); return p; case FINGERPRINT_PACKETRECIEVEERR: // Serial.println("Communication error"); return p; // case FINGERPRINT_FEATUREFAIL: //Serial.println("Could not find fingerprint features"); // return p; // case FINGERPRINT_INVALIDIMAGE: // Serial.println("Could not find fingerprint features"); // return p; default: // Serial.println("Unknown error"); return p; } // OK converted! p = finger.fingerSearch(); if (p == FINGERPRINT_OK) { 65 // Serial.println("Found a print match!"); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { // Serial.println("Communication error"); return p; // } else if (p == FINGERPRINT_NOTFOUND) { // Serial.println("Did not find a match"); // return p; } else { // Serial.println("Unknown error"); return p; } // found a match! // Serial.print("Found ID #"); Serial.print(finger.fingerID); // Serial.print(" with confidence of "); Serial.println(finger.confidence); lcd.clear(); lcd.setCursor(0,1); lcd.print("id:"); lcd.print(finger.fingerID); char buf [3]; sprintf(buf,"%02d",finger.fingerID); Serial.print(buf); i=1; delay(1000); lcd.clear(); lcd.clear(); lcd.setCursor(1,0); lcd.print("tim van tay:"); return finger.fingerID; } // returns -1 if failed, otherwise returns ID # int getFingerprintIDez() { uint8_t p = finger.getImage(); if (p != FINGERPRINT_OK) return -1; 66 p = finger.image2Tz(); if (p != FINGERPRINT_OK) return -1; p = finger.fingerFastSearch(); if (p != FINGERPRINT_OK) return -1; // found a match! // Serial.print("Found ID #"); Serial.print(finger.fingerID); return finger.fingerID; } //////////////////////////////////////// void xoa(){ s=5; lcd.clear(); lcd.setCursor(0,0); lcd.print(" can xoa id:"); while(1){ if(digitalRead(buttonPin1)==0){delay(200);while(digitalRead(buttonPin1)==0);break; } if(digitalRead(buttonPin2)==0){delay(200);while(digitalRead(buttonPin2)==0);s++;} if (digitalRead(buttonPin3)==0){delay(200);while (digitalRead(buttonPin3)==0);s ;} if(digitalRead(buttonPin4)==0){delay(200);while(digitalRead(buttonPin4)==0); out =5;break;} if(s==100)s=99; if(s==2)s=3; if(c!=s){ lcd.setCursor(7,1); lcd.print(s); // Serial.println("van tay dc chon la"); //Serial.println(s); c=s; 67 }} id=s; deleteFingerprint(id); lcd.clear(); giao_dien_lcd(); } void xoa_all(){ unsigned char c; for(c=0;c Your wifi name or SSID const char* password = "19001570"; // > Your wifi password const char* host = "script.google.com"; const int httpsPort = 443; WiFiClientSecure client; // > Create a WiFiClientSecure object //https://script.google.com/macros/s/AKfycbwJk-rqHxKFSEvRljMsk1yILkY6rL_ZZtfp9b1_fIiQoOhkqqJEkel7IEIzdJQnAew/exec?value1=22&val ue2=10 const String GAS_ID = "AKfycbwJk-rqHxKFSEvRljMsk1yILkY6rL_ZZtfp9b1_fIiQoOhkqqJEkel7IEIzdJQnAew"; // > spreadsheet script ID int i=0; char bu[15]; void setup() { // Open serial communications and wait for port to open: pinMode(4,INPUT); pinMode(5,OUTPUT); Serial.begin(9600); serial_ESP.begin(9600); delay(2000); serial_ESP.print("0"); WiFi.begin(ssid, password); // > Connect to your WiFi router Serial.println(""); Serial.print("Connecting"); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); } Serial.println(""); Serial.print("Successfully connected to : "); Serial.println(ssid); Serial.print("IP address: "); 70 Serial.println(WiFi.localIP()); Serial.println(); // -client.setInsecure(); serial_ESP.print("1"); Serial.println("1"); } int xx=1; void loop() { if (xx==1){ if(!client.connect(host, httpsPort)) { serial_ESP.print("0"); } else {serial_ESP.print("1");}} // run over and over if (serial_ESP.available()>0) { xx=2; byte c = serial_ESP.read(); if (c >47){ bu[i++]=c; if (c=='x'){ Serial.println(bu);delay(20); i=0;gui();xx=1; } }}} void gui(){ char value2[3]={0}; char value3[10]={0}; int p; value2[0]=bu[0]; 71 value2[1]=bu[1]; for(p=2 ;p