Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 104 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
104
Dung lượng
7,09 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH KỸ THUẬT ÐIỆN TỬ TRUYỀN THÔNG THIẾT KẾ VÀ THI CÔNG HỆ THỐNG BÁO CHUÔNG TRUỜNG HỌC GVHD: NGUYỄN VĂN HIỆP SVTH : VŨ ÐỨC HẢI MSSV: 15141013 SVTH : LÊ TUỜNG VÂN MSSV: 15141086 SKL 0 Tp Hồ Chí Minh, tháng 07/2019 an BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG HỆ THỐNG BÁO CHUÔNG TRƯỜNG HỌC GVHD: Th Nguyễn Văn Hiệp SVTH: Vũ Đức Hải MSSV: 15141013 SVTH: Lê Tường Vân MSSV: 15141086 Tp Hồ Chí Minh – 07/2019 an TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập- Tự do- Hạnh phúc o0o -TPHCM, ngày….tháng…năm 2019 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Vũ Đức Hải Chuyên ngành: Kỹ thuật Điện tử - Truyền thông MSSV: 15141013 Mã ngành: 41 Hệ đào tạo: Đại học quy Mã hệ: Họ tên sinh viên 2: Lê Tường Vân MSSV: 15141086 Chuyên ngành: Kỹ thuật Điện tử - Truyền thông Hệ đào tạo: Đại học quy Mã ngành: 41 Mã hệ: Khóa: 2015 I TÊN ĐỀ TÀI: HỆ THỐNG BÁO CHUÔNG TRƯỜNG HỌC II Nhiệm vụ: Các số liệu ban đầu: - Kích thước mơ hình: chiều dài 85cm,chiều rộng 95cm, chiều cao 4cm - Nguồn sử dụng thiết bị 220v - Nguồn sử dụng realy,vi điều khiển 5v,3.3v - Các mơ hình ứng dụng trường học, quan Nội dung thực hiện: - Trần Thu Hà – Trương Thị Bích Ngà – Nguyễn Thị Lưỡng – Bùi Thị Tuyết Đan – Phù Thị Ngọc Hiếu – Dương Thị Cẩm Tú, Giáo trình Điện tử bản, Nhà xuất đại học quốc gia TP Hồ Chí Minh - Nguyễn Đình Phú, Giáo trình Vi điều khiển, Trường ĐH Sư Phạm Kỹ Thuật TP Hồ Chí Minh - Nguyễn Văn Hiệp – Đinh Quang Hiệp, Giáo trình Lập trình Android bản, Nhà xuất đại học quốc gia TP Hồ Chí Minh - Nguyễn Văn Hiệp, Giáo trình Lập trình Android ứng dụng điều khiển, Nhà xuất đại học quốc gia TP Hồ Chí Minh i an - Thiết kế thi công phần cứng: Thiết kế thi công khối nạp vi điều khiển Thiết kế thi công khối điều khiển Thiết kế thi cơng khối hiển thị Lập trình phần cứng - Tìm hiểu firebase để cập nhật liệu điều khiển - Tìm hiểu giao diện cho ứng dụng chạy thiết bị Android - Tìm hiểu cách điều khiển module ESP8266 thông qua firebase - Đánh giá kết III NGÀY GIAO NHIỆM VỤ: IV NGÀY HOÀN THÀNH NHIỆM VỤ: V HỌ TÊN CÁN BỘ HƯỚNG DẪN CÁN BỘ HƯỚNG DẪN ThS Nguyễn Văn Hiệp BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP ii an TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập- Tự do- Hạnh phúc o0o -TPHCM, ngày….tháng…năm 2019 Họ tên sinh viên 1: Vũ Đức Hải MSSV: 15141013 Chuyên ngành: Kỹ thuật Điện tử - Truyền thông Mã ngành: 41 Hệ đào tạo: Đại học quy Mã hệ: Họ tên sinh viên 2: Lê Tường Vân MSSV: 15141086 Chuyên ngành: Kỹ thuật Điện tử - Truyền thông Hệ đào tạo: Đại học quy Mã ngành: 41 Mã hệ: Khóa: 2015 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Nội dung Tuần/Ngày Từ 26/3 đến 30/3 Từ 31/3 đến 7/4 Từ 8/4 đến 15/4 Từ 16/4 đến 16/5 Từ 17/5 đến 17/6 Từ 18/6 đến 20/6 Xác nhận GVHD Gặp giáo viên hướng dẫn trao đổi đề tài tốt nghiệp -Sơ lược đề cương chi tiết -Tìm hiểu kiến thức liên quan đến đề tài Gặp GVHD để báo cáo hướng thực đề tài -Tìm hiểu linh kiện sử dụng -Kết nối cảm biến -Tìm hiểu giao tiếp ESP8266 -Tìm hiểu điều khiển Relay -Tìm hiểu giao tiếp hình Nextion -Thiết kế phần cứng -Tìm hiểu lập trình Android -Viết ứng dụng điều khiển -Báo cáo tiến độ cho GVHD iii an Từ 21/6 đến 30/6 Từ 31/6 đến 1/7 -Kết nối ứng dụng điều khiển với phần cứng -Kiểm tra lỗi hệ thống -Báo cáo GVHD -Viết hoàn thiện báo cáo iv an LỜI CAM ĐOAN Đề tài nhóm tơi tự thực dựa vào số tài liệu trước khơng chép từ tài liệu hay cơng trình có trước Những người thực đề tài Vũ Đức Hải Lê Tường Vân v an MỤC LỤC LỜI CAM ĐOAN v MỤC LỤC vi MỤC LỤC HÌNH viii MỤC LỤC BẢNG x LỜI CẢM ƠN xi CHƯƠNG TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU 1.3 NỘI DUNG NGHIÊN CỨU 1.4 GIỚI HẠN 1.5 BỐ CỤC CHƯƠNG CƠ SỞ LÝ THUYẾT 2.1 GIỚI THIỆU 2.2 TỔNG QUAN VỀ HỆ ĐIỀU HÀNH ANDROID 2.2.1 Khái niệm Android 2.2.2 Ưu nhược điểm Android 2.3 TỔNG QUAN VỀ FIREBASE 2.3.1 Lịch sử 2.3.2 Các chức Firebase CHƯƠNG TÍNH TỐN VÀ THIẾT KẾ 3.1 GIỚI THIỆU 3.1.1 Thực trạng nhu cầu 3.1.2 Sơ đồ khối tổng quát sơ đồ khối hệ thống chuông 3.1.3 Thiết kế điện thoại 11 3.2 Thiết kế mạch điều khiển chuông 12 3.2.1 Vi điều khiển 12 3.2.2 Mạch nạp 14 3.2.3 Khối nguồn công suất 18 3.2.4 Khối nút nhấn 24 3.2.5 Khối nguồn 25 3.3 Khối hiển thị 26 vi an 3.4 Khối thời gian thực 28 3.5 SƠ ĐỒ TOÀN MẠCH 31 CHƯƠNG THI CÔNG HỆ THỐNG 27 4.1 GIỚI THIỆU 27 4.2 THIẾT KẾ ỨNG DỤNG 27 4.2.1 Giới thiệu phần mềm Andrdoi Studio 27 4.2.2 Xây dựng Firebase 33 4.2.3 Xây dựng chương trình thực tế điện thoại thông minh 36 4.2.4 Thiết kế chương trình điện thoại thơng minh 38 4.3 Phần mềm lập trình cho vi điều khiển ESP8266 51 Lưu đồ giải thuật mạch vi điền khiển ESP8266 55 Lưu đồ giải thuật thực thi điều khiển 58 Lưu đồ giải thuật nút nhấn 61 4.4 THIẾT KẾ PHẦN CỨNG 61 4.4.1 THIẾT KẾ GIAO DIỆN MÀN HÌNH 61 4.4.2 THI CÔNG MẠCH ĐIỆN 65 CHƯƠNG KẾT QUẢ NHẬN XÉT ĐÁNH GIÁ 70 5.1 KẾT QUẢ 70 5.1.1 Thiết kế chuông 70 5.1.2 Firebase 70 5.1.3 Phần mềm điều khiển 70 5.1.4 Một số hình ảnh ta sử dụng 70 5.2 Database Firebase 71 5.3 Phần mềm điều khiển 71 CHƯƠNG HƯỚNG PHÁT TRIỂN 73 6.1 Dữ liệu quản lý 73 6.2 Phần mềm thông minh 73 TÀI LIỆU THAM KHẢO Tiếng Việt 74 Phục lục Code Vi điều khiển ESP8266 75 vii an MỤC LỤC HÌNH Hình Các phiên hệ điều hành Android Hình 2 Các thiết bị kết nối WiFI Hình Các dịch vụ Firebase Hình Sơ đồ tổng quát hệ thống Hình Sơ đồ khối hệ thống chuông 10 Hình 3 Giao diện hình điện thoại 11 Hình Giao diện cài đặt chế độ thi ngày lễ 12 Hình Vi điều khiển ESP8266 13 Hình USB PL2303 15 Hình Sơ đồ chân chíp PL2303 16 Hình Cách thức truyền liệu qua usb pl2303 16 Hình Sơ đồ kết nối esp-12f 18 Hình 10 Domino-2footprint 18 Hình 11 Relay 5v 19 Hình 12 OPPTO PC817 19 Hình 13 Thơng số C1815 21 Hình 14 Thông số 1N4007 22 Hình 15 Sơ đồ khối công suất 23 Hình 16 Nút nhấn 4x4 24 Hình 17 Sơ đồ nút nhấn 4x4 24 Hình 18 Nguồn xung hạ áp 220vAC-5vDC 25 Hình 19 AMS117 26 Hình 20 Sơ đồ cung cấp nguồn 26 Hình 21 Giao diện thiết hình cảm ứng 28 Hình 22 Màn hình HMI-Nextion 28 Hình 23 IC DS3231 28 Hình 24 Sơ đồ chân ICDS3231 28 Hình 25 Sơ đồ khối DS3231 30 Hình Phần mềm Android Studio 27 Hình Tải phần mềm Android Studio 28 Hình Tiến hành trình cài đặt Android Studio 28 Hình 4 Kết thúc trình cài đặt phần mềm Android Studio 29 Hình Cửa sổ Welcome to Android Studio 29 Hình Màn hình tạo project Android Studio 30 Hình Màn hình thẻ Mainactivity.java 30 Hình Màn hình thẻ MainXML.java 30 Hình Màn hình thẻ thiết kế giao diện 32 Hình 10 Màn hình thẻ Text 32 Hình 11 Giao diện hiển thị Firebase 33 Hình 12 Cửa sổ tạo project Firebase 34 Hình 13 Các package Firebase-App 34 Hình 14 Tải tập tin google-services.json 35 Hình 15 Các câu lệnh giúp App kết nối Firebase 35 Hình 16 Cho phép can thiệp rules vào RealtimeDatabase 36 Hình 17 Thiết kế giao diện đơn giản 37 viii an TÀI LIỆU THAM KHẢO TÀI LIỆU THAM KHẢO Tiếng Việt [1] Trang web, “developer.android.com” mục “building apps for wearables “ [4] Trang web, “developer.android.com” mục “tin tức công nghệ” với chủ đề “Building Your First App” Sách tham khảo [1] Beginning Android [Calvo 2015-03-27] [2] Developing for Android [Devavrata Sharma] [7] Nguyễn Văn Hiệp – Đinh Quang Hiệp (2014), “Lập trình Android bản”, Đại Học SPKT HCM Tiếng Anh [9] Datasheet Opto 4n35 [10] Datasheet Mosfet IRF840 [11] Datasheet ESP8266EX BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 74 PHỤC LỤC CODE Phục lục Code Vi điều khiển ESP8266 #define QUOTE( ) # VA_ARGS // hỗ trợ write đoạn mã http dễ dàng #include #include //tạo sever wifi để save vào nhớ #include "Nextion.h" #include "FS.h" // quản lý nhớ #include #include // Comes with Arduino IDE ESP8266WebServer server(80); // dùng sever cổng 80 #define DS3231_I2C_ADDRESS 0x68 #include #define FIREBASE_AUTH "Pjo5ZTsJTnFSU63eUzyNGkrhKaX7xG8goTgTDhmQ" #define FIREBASE_HOST "timerrtc-30fc8.firebaseio.com" #define RL_MANHINH 13 #define RL_APP 12 #define BTN 16 boolean trang_thai_btn=0; int trangthai_1hoi,trangthai_2hoi; NexButton b00 = NexButton(0, 8, "b0"); NexButton b111 = NexButton(0, 9, "b1"); NexButton b1 = NexButton(1, 14, "b1"); NexButton b2 = NexButton(1, 15, "b2"); NexButton b3 = NexButton(1, 16, "b3"); NexButton b4 = NexButton(1, 17, "b4"); NexButton b5 = NexButton(1, 18, "b5"); NexButton b6 = NexButton(1, 19, "b6"); // NexButton b7 = NexButton(1, 20, "b7"); NexButton b8 = NexButton(1, 21, "b8"); NexButton b9 = NexButton(1, 22, "b9"); NexButton b10 = NexButton(1,23, "b10"); NexButton b11 = NexButton(1,24, "b11"); NexButton b12 = NexButton(1,25, "b12"); // NexText t2 = NexText(0, 10, "t2"); NexText t5 = NexText(0, 11, "t5"); NexText t6 = NexText(0, 12, "t6"); NexText t9 = NexText(0, 16, "t9"); // unsigned long timed; unsigned long curtimed; unsigned long timep; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 75 PHỤC LỤC CODE unsigned long curtimep; char buffer[15] = {0}; char buffer_temp[10] = {0}; char buffer_hour[10] = {0}; char buffer_week[10] = {0}; char buffer_second[10] = {0}; char buffer_year[10] = {0}; uint8_t number = 0; /* * Register a button object to the touch event list */ NexTouch *nex_listen_list[] = { &b00, &b111, &b1, &b2, &b3, &b4, &b5, &b6, &b7, &b8, &b9, &b10, &b11, &b12, &t2, &t5, &t6, &t9, NULL }; /* * Button bOn component pop callback function * When the ON button is released, the LED turns on and the state text changes */ void bOnPopCallback(void *ptr) { b00.setText("VAOHOC"); digitalWrite(RL_MANHINH, HIGH); delay(5000); digitalWrite(RL_MANHINH,LOW); } /* * Button bOff component pop callback function BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 76 PHỤC LỤC CODE * When the OFF button is released, the LED turns off and the state text changes */ void bOffPopCallback(void *ptr) { b111.setText("RAVE"); digitalWrite(RL_MANHINH, HIGH); delay(10000); digitalWrite(RL_MANHINH,LOW); } void b1PopCallback(void *ptr) { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); if (hour == 23){hour=-1;} setDS3231time(second, minute, hour+1, dayOfWeek, dayOfMonth, month, year); } // void b2PopCallback(void *ptr) { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); if (hour == 0){hour=24;} setDS3231time(second, minute, hour-1, dayOfWeek, dayOfMonth, month, year); } // void b3PopCallback(void *ptr) { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); if (minute == 59){minute=-1;} setDS3231time(second, minute+1, hour, dayOfWeek, dayOfMonth, month, year); } // void b4PopCallback(void *ptr) { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); if (minute == 0){minute=60;} setDS3231time(second, minute-1, hour, dayOfWeek, dayOfMonth, month, year); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 77 PHỤC LỤC CODE } // void b5PopCallback(void *ptr) { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); if (second == 59){second=-1;} setDS3231time(second+1, minute, hour, dayOfWeek, dayOfMonth, month, year); } // void b6PopCallback(void *ptr) { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); if (second == 0){second=60;} setDS3231time(second-1, minute, hour, dayOfWeek, dayOfMonth, month, year); } // void b9PopCallback(void *ptr) { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // if (dayOfMonth == 31){dayOfMonth=0;} // setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth+1, month, year); setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month+1, year); } // void b10PopCallback(void *ptr) { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // if (month == 12){month=0;} // setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month+1, year); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 78 PHỤC LỤC CODE setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month-1, year); } // void b11PopCallback(void *ptr) { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // if (year == 99){year=-1;} // setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month, year+1); setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month, year+1); } // void b12PopCallback(void *ptr) { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // if (dayOfMonth == 1){dayOfMonth=32;} // setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth-1, month, year); setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month, year1); } // void b7PopCallback(void *ptr) { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // if (month == 1){month=13;} // setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month-1, year); setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth+1, month, year); } // void b8PopCallback(void *ptr) { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // if (year == 0){year=100;} BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 79 PHỤC LỤC CODE // setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth, month, year1); setDS3231time(second, minute, hour, dayOfWeek, dayOfMonth-1, month, year); } void setDeviceFirebase() { Firebase.set("mothoi", 0); Firebase.set("haihoi", 0); } void dieukhien_cachoichuong() { trangthai_1hoi=Firebase.getInt("mothoi"); trangthai_2hoi=Firebase.getInt("haihoi"); // xu ly if(trangthai_1hoi==1) { // Serial.println("LED ON5s"); digitalWrite(RL_APP,HIGH); delay(5000); } if(trangthai_2hoi==1) { //Serial.println("LED ON10s"); digitalWrite(RL_APP,HIGH); delay(10000); } if(trangthai_1hoi==0) { //Serial.println("LED OFF5s"); digitalWrite(RL_APP,LOW); } if(trangthai_2hoi==0) { //Serial.println("LED OFF10s"); digitalWrite(RL_APP,LOW); } } void chong_doi_xuly_btn() { if(!digitalRead(BTN)){ delay(20); if(!digitalRead(BTN)) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 80 PHỤC LỤC CODE trang_thai_btn=!trang_thai_btn; if(trang_thai_btn==1) digitalWrite(RL_MANHINH,HIGH); if(trang_thai_btn==0) digitalWrite(RL_MANHINH,LOW); while(!digitalRead(BTN)); } } } void setup(void) { Serial.begin(115200); Wire.begin(); timed = millis(); /* Set the baudrate which is for debug and communicate with Nextion screen */ nexInit(); /* Register the pop event callback function of the current button component */ pinMode(RL_MANHINH,OUTPUT); digitalWrite(RL_MANHINH,LOW); pinMode(RL_APP,OUTPUT); digitalWrite(RL_APP,LOW); pinMode(BTN,INPUT); b00.attachPush(bOnPopCallback, &b00); b111.attachPush(bOffPopCallback, &b111); b1.attachPop(b1PopCallback, &b1); b2.attachPop(b2PopCallback, &b2); b3.attachPop(b3PopCallback, &b3); b4.attachPop(b4PopCallback, &b4); b5.attachPop(b5PopCallback, &b5); b6.attachPop(b6PopCallback, &b6); b7.attachPop(b7PopCallback, &b7); b8.attachPop(b8PopCallback, &b8); b9.attachPop(b9PopCallback, &b9); b10.attachPop(b10PopCallback, &b10); b11.attachPop(b11PopCallback, &b11); b12.attachPop(b12PopCallback, &b12); // // ESP QUÉT NHẬN WIFI- VỪA THU WIFI- VỪA PHÁT WIFI server.on("/",[]{ //khi có người truy cập truyền hàm if (server.hasArg("ssid") && server.hasArg("sspass")) { String tmp = server.arg("ssid") + "\n" + server.arg("sspass"); // gán giá trị ssid+sspass vào biến tmp SPIFFS.begin(); File f = SPIFFS.open("wifi", "w"); if (f) { f.write((const uint8_t*)tmp.c_str(), tmp.length()); // ép kiểu tmp BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 81 PHỤC LỤC CODE } f.close(); server.send(200, "text/plain; charset=utf-8", "Đã thiết lập xong"); // gởi trình duyệt ESP.reset(); }else{ server.send(200, "text/html", QUOTE( // khơng kết nối(trạng thái qt wifi// gởi lại trình duyệt đoạn lệnh htlm Config WiFi // gởi địa server.on (dòng 18) Tên wifi: //trả tham số tên wifi Mật wifi: //trả tham số mật wifi //Tạo list wifi viết JAVA scrip window.onload = getData; function getData() { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function () { if (this.readyState == && this.status == 200) { var resText = xhttp.responseText.split('|'); var tmp = ''; for (i = 0; i < resText.length; i++) { tmp = tmp + '' + resText[i] + '' ; } document.getElementById('listWifi').innerHTML = tmp; getData(); } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 82 PHỤC LỤC CODE }; xhttp.open('GET', '/listWifi', true); xhttp.send(); }; function setUsr(divObj) { document.getElementById('wfname').value = divObj.innerHTML; } )); } }); server.on("/listWifi", [] { // liệu truyền tới ,sẽ tự động quét WIFI String list; int n = WiFi.scanNetworks(); if (n == 0) { list = "no networks found"; // Dữ liệu trả khơng có WIFI } else { for (int i = 0; i < n; ++i) { list += String(WiFi.SSID(i)) + "|"; } } server.send(200, "text/html", list); // Gởi lại liệu }); server.begin(); WiFi.mode(WIFI_AP_STA); //SETUP TÊN WIFI WiFi.softAP("DATN_THANG7", "12345678"); //SETUP TÊN WIFI String id = ""; String pass = ""; SPIFFS.begin(); File f = SPIFFS.open("wifi", "r"); if (f) { id = f.readStringUntil('\n'); pass = f.readString(); } f.close(); if ( id != "" && pass != "") { //Serial.println(String("Đang kết nối: ") + id + " | " + pass); WiFi.begin(id, pass); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 83 PHỤC LỤC CODE while (WiFi.status() != WL_CONNECTED ) { delay(100); //Serial.print("."); server.handleClient(); } //Serial.print(String("Kết nối thành cơng")); }else //Serial.print(String("Chưa có liệu wifi")); // ket noi firebase Firebase.begin(FIREBASE_HOST,FIREBASE_AUTH); // } void loop(void) { server.handleClient(); // RUN cho server chong_doi_xuly_btn(); setDeviceFirebase(); dieukhien_cachoichuong(); /* * When a pop or push event occured every time, * the corresponding component[right page id and component id] in touch event list will be asked */ nexLoop(nex_listen_list); curtimed = millis(); if (abs(curtimed-timed) >= 500){ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); number = hour; itoa(number, buffer_temp, 10); if (number < 10) { strcpy(buffer, "0"); strcat(buffer, buffer_temp); if (strcmp(buffer, buffer_second)) { t2.setText(buffer); //t0 strcpy(buffer_second, buffer); } } else BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 84 PHỤC LỤC CODE { if (strcmp(buffer_temp, buffer_second)) { t2.setText(buffer_temp); //t0 strcpy(buffer_second, buffer_temp); } } number = minute; itoa(number, buffer_temp, 10); if (number < 10) { strcpy(buffer, "0"); strcat(buffer, buffer_temp); if (strcmp(buffer, buffer_second)) { t5.setText(buffer); //t1 strcpy(buffer_second, buffer); } } else { if (strcmp(buffer_temp, buffer_second)) { t5.setText(buffer_temp); //t1 strcpy(buffer_second, buffer_temp); } } number = second; itoa(number, buffer_temp, 10); if (number < 10) { strcpy(buffer, "0"); strcat(buffer, buffer_temp); if (strcmp(buffer, buffer_second)) { t6.setText(buffer);//t2 strcpy(buffer_second, buffer); } } else { if (strcmp(buffer_temp, buffer_second)) { t6.setText(buffer_temp); //t2 strcpy(buffer_second, buffer_temp); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP an 85 PHỤC LỤC CODE } } memset(buffer, 0, sizeof(buffer)); memset(buffer_temp, 0, sizeof(buffer_temp)); /*receive day's data*/ number = dayOfMonth; itoa(number, buffer_temp, 10); strcat(buffer, buffer_temp); strcat(buffer, "/"); /*receive month's data*/ number = month; itoa(number, buffer_temp, 10); strcat(buffer, buffer_temp); strcat(buffer, "/"); /*receive year's data*/ number = year; strcat(buffer, "20"); if (year