Đồ án Thiết kế và thi công hệ thống quản lý mô hình airbnb, homestay

TRƯỜNG ĐH SPKT TP. HỒ CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN-ĐIỆN TỬ ĐỘC LẬP - TỰ DO - HẠNH PHÚC BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ----o0o---- Tp. HCM, ngày 18 tháng 12 năm 2019 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Hoàng Bảo Phúc MSSV: 15142283 Nguyễn Chí Thương MSSV: 15141299 Chuyên ngành: Kỹ thuật Điện - Điện tử Mã ngành: 41 Hệ đào tạo: Đại học chính quy Mã hệ: 1 Khóa: 2015 Lớp: 15141DT I. TÊN ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG HỆ THỐNG QUẢN LÝ MÔ HÌNH

pdf164 trang | Chia sẻ: huong20 | Ngày: 13/01/2022 | Lượt xem: 233 | Lượt tải: 0download
Tóm tắt tài liệu Đồ án Thiết kế và thi công hệ thống quản lý mô hình airbnb, homestay, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
H AIRBNB, HOMESTAY II. NHIỆM VỤ 1. Các số liệu ban đầu: Hệ thống quản lý mô hình Airbnb, HomeStay được thực hiện với các số liệu ban đầu như sau: − Hệ thống nhận thông tin của khách cần thuê phòng. Sau đó sẽ kiểm tra thông tin của khách hàng được gửi đến, nếu hợp lệ thì hệ thống sẽ gửi thông tin lại cho khách hàng thông qua địa chỉ mail và số điện thoại (mật khẩu vào phòng, ngày vào phòng, ngày trả phòng, ) − Hệ thống kiểm soát thông tin vào/ra của từng phòng, lưu lại thông tin trên hệ thống và truy xuất ra file excel. − LCD hiển thị một vài thông tin khi khách hàng nhập mật khẩu vào phòng. − Đến thời hạn trả phòng, hệ thống sẽ tự động vô hiệu hóa mật khẩu vào phòng. − Có sử dụng cảm biến vân tay dành riêng cho chủ nhà và nhân viên để mở cửa trong những trường hợp cần thiết. 2. Nội dung thực hiện: − Lên ý tưởng đồ án − Tìm hiểu về linh kiện sử dụng − Thiết kế và thi công hệ thống web server, web app. Truyền nhận thông tin giữa các hệ thống. − Thiết kế khối giao tiếp ngoại vi, lấy cơ sở dữ liệu trực tuyến thông qua Internet, truyền nhận thông tin giữa trạm phụ và trạm trung tâm. − Thiết kế và thi công hệ thống quản lý ra/vào của mô hình AirBNB, Homestay. − Vẽ lưu đồ giải thuật − Lắp ráp các khối vào mô hình. − Chạy thử nghiệm hệ thống. − Cân chỉnh hệ thống. − Viết luận văn. − Báo cáo đề tài tốt nghiệp. i III. NGÀY GIAO NHIỆM VỤ: IV. NGÀY HOÀN THÀNH NHIỆM VỤ: V. HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: KS. Hà A Thồi CÁN BỘ HƯỚNG DẪN BM. ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ii TRƯỜNG ĐH SPKT TP. HỒ CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN-ĐIỆN TỬ ĐỘC LẬP - TỰ DO - HẠNH PHÚC BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ----o0o---- Tp. HCM, ngày 18 tháng 12 năm 2019 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Hoàng Bảo Phúc Lớp: 15141DT2A MSSV: 15142283 Họ tên sinh viên 2: Nguyễn Chí Thương Lớp: 15141DT2B MSSV: 15141299 Tên đề tài: Thiết kế và thi công hệ thống quản lý mô hình airbnb, homestay Xác nhận Tuần/ngày Nội dung GVHD GV HƯỚNG DẪN (Ký và ghi rõ họ và tên) iii LỜI CAM ĐOAN Nhóm sinh viên – Hoàng Bảo Phúc và Nguyễn Chí Thương xin cam đoan đây là đồ án do nhóm tự thực hiện dưới sự hướng dẫn của thầy Hà A Thồi. Nhóm chỉ tham khảo các tài liệu trước đó và các nghiên cứu trên mạng online. Kết quả công bố trong khóa luận tốt nghiệp là trung thực không sao chép từ tài liệu hay công trình đã có trước đó. Tp.HCM, ngày 18 tháng 12 năm 2019 SV thực hiện đồ án ( Ký và ghi rõ họ tên) Nguyễn Chí Thương Hoàng Bảo Phúc iv LỜI CẢM ƠN Nhóm thực hiện đồ án xin được gửi lời cảm ơn đặc biệt đến giảng viên hướng dẫn thầy Hà A Thồi vì đã giúp đỡ nhóm trong quá trình thực hiện đồ án, người đã đưa ra hướng nghiên cứu, giải đáp thắc mắc, cũng như tận tình quan sát nhóm làm việc. Trong quá trình thực hiện nhóm đã tiếp thu được những kiến thức thực tế và cách làm việc nghiêm túc, hiệu quả từ thầy. Nhóm em xin gửi lời tri ân thành nhất đến các quý thầy cô trong khoa Điện - điện tử đã hỗ trợ chúng em về những kiến thức nền tảng vững vàng, tạo điều kiện tốt nhất cho sinh viên trong quá trình học tập và nghiên cứu. Sự hỗ trợ thầm lặng và vô cùng quan trọng từ gia đình và bạn bè luôn là động lực để nhóm có thể làm việc hết khả năng và hoàn thành đồ án một cách tốt nhất. Một lần nữa nhóm vô cùng hân hạnh khi được làm sinh viên tại trường ĐH Sư Phạm Kỹ Thuật TPHCM, là học trò của những giảng viên đầy tâm huyết, lời cảm ơn này cũng là sự ghi nhận sâu sắc mà nhóm muốn gửi đến thầy cô, gia đình và bạn bè. Người thực hiện đề tài Nguyễn Chí Thương Hoàng Bảo phúc v MỤC LỤC NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP ....................................................................... i LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP ......................................... iii LỜI CAM ĐOAN ................................................................................................... iv LỜI CẢM ƠN .......................................................................................................... v MỤC LỤC ............................................................................................................... vi DANH SÁCH HÌNH ẢNH .................................................................................... ix DANH SÁCH BẢN VẼ ......................................................................................... xii TÓM TẮT ............................................................................................................. xiii CHƯƠNG 1. TỔNG QUAN ................................................................................... 1 1.1 ĐẶT VẤN ĐỀ ........................................................................................................... 1 1.2 MỤC TIÊU ................................................................................................................ 1 1.3 NỘI DUNG NGHIÊN CỨU ...................................................................................... 2 1.4 GIỚI HẠN ................................................................................................................. 2 1.5 BỐ CỤC ..................................................................................................................... 2 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT ...................................................................... 4 2.1 GIỚI THIỆU VỀ MÔ HÌNH HOMESTAY VÀ AIRBNB ....................................... 4 2.1.1 Homestay ........................................................................................................................ 4 2.1.2 AirBNB ........................................................................................................................... 5 2.2 GIỚI THIỆU VỀ ARDUINO. ................................................................................... 6 2.2.1 Phần cứng ....................................................................................................................... 6 2.2.2 Arduino Uno R3 ............................................................................................................. 7 2.2.3 Phần mềm ..................................................................................................................... 12 2.3 CẢM BIẾN VÂN TAY ........................................................................................... 14 2.3.1 Máy quét quang học ..................................................................................................... 14 2.3.2 Máy quét điện dung ...................................................................................................... 15 2.3.3 Máy quét siêu âm .......................................................................................................... 15 2.3.4 Cảm biến vân tay R305. ............................................................................................... 16 2.4 GIỚI THIỆU HỆ THỐNG INTERNET .................................................................. 18 2.4.1 Cấu trúc của mạng Internet ........................................................................................... 19 2.4.2 Các mạng truy nhập không dây .................................................................................... 19 vi 2.5 MODULE WIFI ESP8266 ....................................................................................... 20 2.5.1 Các chế độ boot up của ESP8266 ................................................................................. 20 2.5.2 Các loại module cho ESP8266 trên thị trường ............................................................. 21 2.6 BÀN PHÍM MA TRẬN 4x4. ................................................................................... 23 2.7 NGUỒN CUNG CẤP .............................................................................................. 25 2.7.1 Bộ chuyển đổi adapter .................................................................................................. 25 2.7.2 Bộ chuyển đổi nguồn DC- DC ..................................................................................... 26 2.8 MODULE LCD 16x2 .............................................................................................. 27 2.9 MODULE I2C ......................................................................................................... 28 2.10 CÁC CHUẨN GIAO TIẾP ................................................................................... 29 2.10.1 Giao tiếp uart .............................................................................................................. 29 2.10.2 Giao tiếp I2C .............................................................................................................. 34 2.11 IoT .......................................................................................................................... 37 2.11.1 Giới thiệu về IoT ........................................................................................................ 37 2.11.2 IoT hoạt động như thế nào ........................................................................................ 38 2.11.3. Một số ứng dụng của IoT ........................................................................................ 38 2.11.4 Web socket ................................................................................................................. 39 2.12. SERVER ............................................................................................................... 41 2.12.1. Node JS ...................................................................................................................... 41 2.12.2. Postgresql .................................................................................................................. 42 2.12.3. Heroku ....................................................................................................................... 45 CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG ................................ 49 3.1 GIỚI THIỆU VỀ MÔ HÌNH HỆ THỐNG .............................................................. 49 3.2 TÍNH TOÁN VÀ THIẾT KẾ CHI TIẾT HỆ THỐNG ........................................... 49 3.2.1 Thiết kế sơ đồ khối hệ thống ........................................................................................ 49 3.2.2 Tính toán và thiết kế mạch ........................................................................................... 51 3.2.2.1 Cảm biến vân tay ................................................................................................................. 51 3.2.2.2 Bàn phím ma trận 4x4 ......................................................................................................... 54 3.2.2.3 Khối hiển thị ........................................................................................................................ 56 3.2.2.4 Kit Wifi ESP8266 ............................................................................................................... 58 3.2.2.5 Khối xử lý trung tâm Arduino ............................................................................................. 59 3.2.3 Sơ đồ nguyên lý của hệ thống ...................................................................................... 63 CHƯƠNG 4. THI CÔNG HỆ THỐNG .............................................................. 66 4.1 GIỚI THIỆU ............................................................................................................ 66 vii 4.2 THI CÔNG MÔ HÌNH ............................................................................................ 66 4.3 LƯU ĐỒ GIẢI THUẬT .......................................................................................... 69 4.4 PHẦN MỀM LẬP TRÌNH ...................................................................................... 75 4.4.1. Lập trình giao diện Web .............................................................................................. 81 4.4.1.1. Lập trình giao tiếp Web socket .......................................................................................... 81 4.4.1.2. Giao diện HTML ................................................................................................................ 83 CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ.......................................... 87 5.1 GIỚI THIỆU ............................................................................................................ 87 5.2 KẾT QUẢ ĐẠT ĐƯỢC .......................................................................................... 87 5.2.1 Sử dụng cảm biến ......................................................................................................... 87 5.2.2 Sử dụng Arduino Uno R3 ............................................................................................. 87 5.2.3 Đưa dữ liệu lên Server dùng ESP8266 NodeMCU. ..................................................... 87 5.3 KẾT QUẢ THỰC NGHIỆM ................................................................................... 87 5.4 NHẬN XÉT_ĐÁNH GIÁ ....................................................................................... 93 5.4.1 Nhận xét ........................................................................................................................ 93 5.4.2 Đánh giá ........................................................................................................................ 93 CHƯƠNG 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIẾN ................................... 94 6.1 KẾT LUẬN.............................................................................................................. 94 6.2 HƯỚNG PHÁT TRIỂN .......................................................................................... 94 TÀI LIỆU THAM KHẢO .................................................................................... 95 PHỤ LỤC ............................................................................................................... 96 viii DANH SÁCH HÌNH ẢNH Chương 2 Hình 2. 1: Căn hộ HomeStay .............................................................................................. 4 Hình 2. 2: Arduino Uno R3 ................................................................................................. 8 Hình 2. 3: Các khối cơ bản trên Arduino ............................................................................ 9 Hình 2. 4: Các chân tín hiệu của Arduino ......................................................................... 11 Hình 2. 5: Các chức năng cơ bản của IDE ........................................................................ 13 Hình 2. 6: Quá trình chụp ảnh của máy quét quang học ................................................... 14 Hình 2. 7: Máy quét điện dung sử dụng các tụ điện ......................................................... 15 Hình 2. 8: Quét siêu âm ..................................................................................................... 16 Hình 2. 9: Cảm biến vân tay R305 .................................................................................... 16 Hình 2. 10: Các chân giao tiếp .......................................................................................... 17 Hình 2. 11: Mạng LAN không dây ................................................................................... 19 Hình 2. 12: Mạng không dây diện rộng ............................................................................ 20 Hình 2. 13: Kit RF thu phát WIFI ESP8266 NodeMCU LUA CP2102 ........................... 21 Hình 2. 14: Kit RF thu phát WIFI ESP8266 NodeMCU LUA V3 CH340 ...................... 21 Hình 2. 15: Mạch thu phát Wifi ESP8266 UART ESP-01 ............................................... 22 Hình 2. 16: Sơ đồ chân ESP8266 ...................................................................................... 23 Hình 2.17: : Bàn phím ma trận 4x4 ................................................................................... 24 Hình 2. 18: Adapter 12V-1.5A .......................................................................................... 25 Hình 2. 19: : Sơ đồ nguyên lý hoạt động mạch hạ áp ....................................................... 26 Hình 2. 20: Mạch hạ áp DC-DC ASM1117 ...................................................................... 26 Hình 2. 21: Module LCD 16x2 ......................................................................................... 27 Hình 2. 22: Module I2C .................................................................................................... 28 Hình 2. 23: Định dạng chuỗi dữ liệu ................................................................................. 30 Hình 2. 24: Truyền đơn công ............................................................................................ 30 Hình 2. 25: Truyền bán song công .................................................................................... 31 Hình 2. 26: Truyền song công ........................................................................................... 31 Hình 2. 27: Khung truyền dữ liệu bất đồng bộ ................................................................. 32 Hình 2. 28: Khung truyền dữ liệu đồng bộ ....................................................................... 33 Hình 2. 29: Bus I2C và các thiết bị ngoại vi ..................................................................... 34 Hình 2. 30: Hướng đi của xung Clock và hướng đi của đường dữ liệu ............................ 35 Hình 2. 31: Trình tự truyền bit .......................................................................................... 36 Hình 2. 32: Start bit và Stop bit......................................................................................... 36 Hình 2. 33: Giới thiệu về IoT ............................................................................................ 37 Hình 2. 34: Hoạt động của mô hình IoT ........................................................................... 38 Hình 2. 35: Biểu tượng của PostgreSQL........................................................................... 43 Hình 2. 36: Logo của Heroku ............................................................................................ 47 ix Chương 3 Hình 3. 1: Sơ đồ khối thu .................................................................................................. 49 Hình 3. 2: Sơ đồ khối phát ................................................................................................ 50 Hình 3. 3: Hình ảnh thực tế của cảm biến R305 ............................................................... 51 Hình 3. 4: Sơ đồ nối chân của cảm biến R305 .................................................................. 52 Hình 3. 5: Hình ảnh thực tế của bàn phím ma trận 4x4 .................................................... 54 Hình 3. 6: Hình ảnh thực tế của bàn phím ma trận 4x4 .................................................... 55 Hình 3. 7: Hình ảnh LCD 16x2 ......................................................................................... 56 Hình 3. 8: Module ESP8266 NodeMCU Lua CP2102 ..................................................... 58 Hình 3. 9: Sơ đồ chân Module ESP8266 NodeMCU Lua CP2102 .................................. 59 Hình 3. 10: Arduino Uno R3 ............................................................................................. 60 Hình 3. 11: Sơ đồ kết nối chân của Arduino Uno R3 ....................................................... 62 Hình 3. 12: Sơ đồ nguyên lý khối thu thập dữ liệu ........................................................... 63 Hình 3. 13: Mô hình giao tiếp của hệ thống ...................................................................... 65 Chương 4 Hình 4. 1: Giấy Foam ........................................................................................................ 66 Hình 4. 2: Bên ngoài mô hình ........................................................................................... 67 Hình 4. 3: Bên trong mô hình............................................................................................ 67 Hình 4. 4: Mặt trước của mô hình ..................................................................................... 68 Hình 4. 5: Lưu đồ chương trình của toàn hệ thống ........................................................... 69 Hình 4. 6: Lưu đồ giải thuật của Arduino ......................................................................... 70 Hình 4. 7: Lưu đồ chương trình của ESP8266 .................................................................. 71 Hình 4. 8: Lưu đồ chương trình của Server ...................................................................... 74 Hình 4. 9: Download Arduino IDE ................................................................................... 76 Hình 4. 10: Giải nén gói Arduino IDE .............................................................................. 77 Hình 4. 11: Màn hình khởi động Arduino IDE ................................................................. 78 Hình 4. 12: Cài đặt Driver cho Arduino IDE .................................................................... 79 Hình 4. 13: Quá trình đợi install ....................................................................................... 79 Hình 4. 14: Cài đặt thành công và kết thúc ....................................................................... 80 Hình 4. 15: Giao diện lập trình Arduino IDE ................................................................... 80 Hình 4. 16: Cài đặt Web socket ........................................................................................ 82 Hình 4. 17: Tạo kết nối với Web Socket ........................................................................... 82 Hình 4. 18: Tạo kết nối với Web Socket ........................................................................... 83 Hình 4. 19: Giao diện để đăng nhập vào đặt phòng .......................................................... 83 Hình 4. 20: Đăng nhập thành công.................................................................................... 84 Hình 4. 21: Nhập thông tin để cấp mã .............................................................................. 84 Hình 4. 22: Thông báo cấp mã thành công ....................................................................... 85 Hình 4. 23: Kiểm tra danh sách mã đã cấp ....................................................................... 85 Hình 4. 24: Kiểm tra trạng thái các phòng ........................................................................ 86 x Chương 5 Hình 5. 1: Hệ thống đang hoạt động ................................................................................. 88 Hình 5. 2: Nhập dữ liệu để cấp mã .................................................................................... 89 Hình 5. 3: Nhận được mã cung cấp ................................................................................... 89 Hình 5. 4: Yêu cầu nhập mã ban đầu ................................................................................ 90 Hình 5. 5: Sau khi nhập mã thành công ............................................................................ 90 Hình 5. 6: Dữ liệu được lưu trên Server............................................................................ 91 Hình 5. 7: Kiểm tra dữ liệu ở webserver ........................................................................... 91 Hình 5. 8: Kiểm tra dữ liệu ở webapp ............................................................................... 92 Hình 5. 9: Xuất dữ liệu ra file excel .................................................................................. 92 xi DANH SÁCH BẢN VẼ Chương 2 Bảng 2. 1: Các chế độ boot up của ESP ............................................................................ 20 Chương 3 Bảng 3. 1: Thông số kỹ thuật của cảm biến R305 ............................................................ 52 Bảng 3. 2: Các chân giao tiếp của cảm biến R305 ............................................................ 53 Bảng 3. 3: Chức năng các chân của LCD 16x2 ................................................................ 57 Bảng 3. 4: Danh sách linh kiện sử dụng nguồn 5v ........................................................... 64 Bảng 3. 5: Danh sách linh kiện sử dụng nguồn 3.3v ........................................................ 64 Chương 4 Bảng 4.1: Danh sách nút lệnh của Arduino IDE xii TÓM TẮT Cuộc sống ngày càng hiện đại, mức sống ngày càng tăng cao khiến cho nhu cầu du lịch, nghỉ ngơi cũng theo đó mà được chú trọng. Nhu cầu của du khách ngày một đa dạng khiến lĩnh vực du lịch phải không ngừng đổi mới, tạo ra nhiều loại hình, lưu trú mới để đáp ứng nhu cầu của khách và tăng sức cạnh tranh. Trong đó, du lịch Homestay, AirBNB là loại hình khá mới mẻ và đang là xu thế được nhiều người lựa chọn hiện nay. Đối với loại hình du lịch mới này, việc quản lý mô hình vẫn còn gặp khó khăn (giờ ra/vào của khách, cân bằng giữa ngân sách và nhân sự, cạnh tranh trên thị trường, ). Với mục tiêu là hệ thống sẽ hỗ trợ các nhà đầu tư về công việc quản lý thông tin ra/vào của khách dễ dàng hơn, quản lý mô hình hoạt động đơn giản hơn, có thể giảm bớt nhân công để cân bằng tài chính hơn. Nhóm sẽ thực hiện hệ thống thông qua việc tích lũy kiến thức được học tại trường cũng như quan sát và nghiên cứu thực tiễn. Tất cả vì mục đích hoàn thành được mô hình dễ lắp đặt, dễ sử dụng, tiết kiệm điện, mang lại cho người dùng cảm giác tin cậy và an toàn. xiii CHƯƠNG 1. TỔNG QUAN CHƯƠNG 1. TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ Cuộc sống ngày càng hiện đại, mức sống ngày càng tăng cao khiến cho nhu cầu du lịch, nghỉ ngơi cũng theo đó mà được chú trọng. Nhu cầu của du khách ngày một đa dạng khiến lĩnh vực du lịch phải không ngừng đổi mới, tạo ra nhiều loại hình, lưu trú mới để đáp ứng nhu cầu của khách và tăng sức cạnh tranh. Trong đó, du lịch Homestay, AirBNB là loại hình khá mới mẻ và đang là xu thế được nhiều người lựa chọn hiện nay. Không những vậy, xu hướng này còn dần được áp dụng phổ biến trong ngành Nhà hàng – Khách sạn. Đây cũng là tiền đề để Airbnb, Homestay ra đời. Airbnb, Homestay là những loại hình lưu trú phổ biến hiện nay. Sự khác biệt trong kiến trúc, dịch vụ cung cấp, trải nghiệm ở từng loại hình giúp du khách dễ dàng lựa chọn nơi nghỉ dưỡng phù hợp với nhu cầu. Tuy nhiên, đây là mô hình mới, vì vậy người chủ nhà cho thuê có thể gặp một số khó khăn trong việc quản lý căn hộ, tình hình an ninh của căn hộ và sự an toàn của khách hàng. Một số vấn đề khó khăn khi quản lý mô hình này: • Có airbnb, homestay tại nhiều tỉnh thành và chúng ta gặp vấn đề về việc kiểm soát khách ra vào. • Cảm thấy bất tiện mỗi khi khách yêu cầu giao chìa khóa vào ban đêm • Tốn quá nhiều thời gian, công sức để quản lý hệ thống kinh doanh Airbnb, Homestay. • Hệ thống Airbnb, Homestay rải khắp tại các thành phố lớn mà không quản lý được chặt chẽ, thất thoát doanh thu. Giải pháp giúp thay đổi cách thức quản lý Airbnb, Homestay đó chính là sử dụng hệ thống khóa cửa IoT. Với giải pháp này, khách hàng chỉ có thể vào được phòng khi có key (mã PIN) do phần mềm tạo ra. Để tạo key cho khách hàng, lễ tân bắt buộc phải nhập thông tin lên phần mềm. Do đó, rất khó để gian lận. Đây không chỉ là giải pháp giúp chống thất thoát doanh thu hiệu quả mà nó còn mang lại hình ảnh chuyên nghiệp cho Airbnb, Homestay của chúng ta trong mắt khách hàng (đặc biệt là những du khách nước ngoài). Ngoài ra, để quản lý chặt chẽ hơn, có thể sử dụng thêm một ứng dụng di động đã được kết nối với phần mềm quản lý. Với ứng dụng này, mọi giao dịch từ homestay sẽ được thông báo về điện thoại di động. Đây là một giải pháp quản lý homestay từ xa rất hiệu quả. 1.2 MỤC TIÊU • Tạo mã khóa ngẫu nhiên để cung cấp cho khách hàng 1 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 1. TỔNG QUAN • Gửi cho khách hàng qua email và điện thoại • Kết nối wi-fi cho hệ thống và đưa dữ liệu lên Server. • Điều khiển mở khóa bằng mã khóa đã tạo hoặc bằng vân tay. • Giám sát điều khiển thông qua webapp • Có thể xuất dữ liệu thành các file .excel để quản lý 1.3 NỘI DUNG NGHIÊN CỨU • Xác định mục tiêu và giới hạn đề tài. • Tìm hiểu cơ sở lý thuyết. • Thiết kế khối cảm biến, khối hiển thị, khối đưa dữ liệu lên server, thiết kế cách hoạt động mô hình quản lý. • Thiết kế và thi công bộ xử lí. • Viết code cho Arduino Uno R3. • Viết code cho ESP8266 NodeMCU. • Tạo tài khoản và server để liên kết và đưa dữ liệu lên. • Lập trình webapp • Thiết kế mô hình • Lắp ráp các board mạch, cảm biến vào mô hình. • Chỉnh sửa các lỗi điều khiển, lỗi lập trình và lỗi của các thiết bị. • Chạy thử nghiệm hệ thống. • Cân chỉnh hệ thống • Viết sách luận văn. • Báo cáo đề tài tốt nghiệp. 1.4 GIỚI HẠN • Số lượng phòng mô hình: 3. • Hệ thống chỉ ở mức độ giám sát và điều khiển từ xa. • Mô hình được thiết kế vệ với chất liệu: bìa cứng. 1.5 BỐ CỤC Với đề tài: “Thiết kế và thi công hệ thống quản lý mô hình AirBNB, Homestay” thì bố cục đồ án như sau: • Chương 1: Tổng Quan. Chương này trình bày đặt vấn đề dẫn nhập lý do chọn đề tài, mục tiêu của đề tài, nội dung nghiên cứu, các giới hạn thông số và bố cục đề tài. • Chương 2: Cơ Sở Lý Thuyết. Chương này trình bày giới thiệu phần cứng của hệ thống điều khiển, các chuẩn giao tiếp trong quá trình truyền – nhận dữ liệu. 2 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯ...1= R2= R3= R4=1: vậy kết luận không có nút được bấm trên C4. Quét tương tự đối với những nút bấm khác. 24 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.7 NGUỒN CUNG CẤP 2.7.1 Bộ chuyển đổi adapter ❖ Khái niệm Adapter là bộ phận chuyển đổi điện áp giữa các thiết bị điện tử sử dụng nguồn điện khác 220V xuống một điện áp thấp hơn. Thiết bị chuyển đổi này được gọi chung là Adapter. ❖ Chức năng chính của Adapter • Cung cấp nguồn điện thích hợp cho các thiết bị điện tử hoạt động ổn định. • Ngoài cung cấp nguồn điện Adapter còn có thể sạc pin cho thiết bị điển hình nhất là pin cho laptop. Các thiết bị nhỏ hơn như smarphone, camera quan sát thì các adapter có công suất 1,5A, 3,5A là đủ. ❖ Các thông số kỹ thuật của Adapter • Điện áp Đây là điện áp là thiết bị cần để sử dụng ổn định. Từ nguồn điện cao áp chuẩn (AC) sẽ được biến đổi thành điện áp thấp hơn (DV) để nạp vào pin hoặc cung cấp trực tiếp cho thiết bị hoạt động. • Cường độ dòng điện Thông số này được đo bằng đơn vị Ampe(A) thể hiện sức mạnh của dòng điện để thiết bị hoạt động. Một thiết bị có ghi 4,5A có nghĩa dòng điện đầu vào phải có cường độ đủ 4,5A thì mới đáp ứng được. Cường độ dòng điện chuẩn của nguồn 220V thường là 12A các thiết bị sử dụng adapter phải có cường độ thấp hơn con số này. Hình 2. 18: Adapter 12V-1.5A 25 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.7.2 Bộ chuyển đổi nguồn DC- DC Mạch hạ áp ASM1117 Mạch hạ áp ASM1117 là bộ chuyển đổi nguồn DC-DC có điện áp đầu ra nhỏ hơn điện áp đầu vào. Hình 2. 19: : Sơ đồ nguyên lý hoạt động mạch hạ áp Khi khóa ở trên đóng, điện áp trên cuộn dây là VL = Vi - Vo. Dòng chạy trong cuộn dây tắng tuyến tính. Khi diode có điện áp ngược bởi nguồn V, không có dòng qua nó. Khi khóa mở, diode bị phân cực ngược. Điện áp cuộn dây là VL = -Vo. Dòng IL giảm. Hình 2. 20: Mạch hạ áp DC-DC ASM1117 Mạch cấp nguồn 3.3VDC ASM1117 được sử dụng để tạo điện áp 3.3VDC / 800mA cấp cho mạch điện với đầu vào linh hoạt từ 4.5~9VDC, thường được sử dụng với các mạch module ESP8266, vi điều khiển sử dụng điện áp 3.3VDC,... 26 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT ❖ Thông sô kỹ thuật: • Điện áp vào : 4.5~9VDC. • Điện áp ra: 3.3VDC, 800mA (Dòng điện thực tế có thể vượt hơn 800mA). • Kích thước: 25 x 11 mm. 2.8 MODULE LCD 16x2 Màn hình LCD (Liquid Crystal Display) là một module hiển thị điện tử và tìm thấy một loạt các ứng dụng. Màn hình LCD 16x2 là module rất cơ bản và thường được sử dụng trong các thiết bị và mạch khác nhau. Các module này được ưu tiên hơn bảy phân đoạn và các LED đa phân đoạn khác. Lý do là: LCD là kinh tế; dễ dàng lập trình; không có giới hạn hiển thị các ký tự đặc biệt và thậm chí tùy chỉnh (không giống như trong bảy phân đoạn), hoạt ảnh và v.v. Màn hình LCD 16x2 có nghĩa là nó có thể hiển thị 16 ký tự trên mỗi dòng và có 2 dòng như vậy. Trong màn hình LCD, mỗi ký tự được hiển thị bằng ma trận pixel 5x7. Màn hình LCD này có hai thanh ghi, cụ thể là Command và Data. Thanh ghi lệnh lưu trữ các lệnh chỉ thị cho màn hình LCD. Một lệnh là một lệnh cho LCD để thực hiện một tác vụ được xác định trước như khởi tạo nó, xóa màn hình, thiết lập vị trí con trỏ, điều khiển hiển thị, Thanh ghi dữ liệu lưu trữ dữ liệu được hiển thị trên màn hình LCD. Dữ liệu là giá trị ASCII của ký tự được hiển thị trên màn hình LCD. Hình 2. 21: Module LCD 16x2 27 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT ❖ Thông số kỹ thuật: • VSS: tương đương với GND - cực âm • VDD: tương đương với VCC - cực dương (5V) • Constrast Voltage (Vo): điều khiển độ sáng màn hình • Register Select (RS): điều khiển địa chỉ nào sẽ được ghi dữ liệu • Read/Write (RW): đọc (read mode) hay ghi (write mode) dữ liệu, nó sẽ phụ thuộc vào việc chúng ta gửi giá trị gì vào. • Enable pin: Cho phép ghi vào LCD • D0 - D7: 8 chân dư liệu, mỗi chân sẽ có giá trị HIGH hoặc LOW nếu bạn đang ở chế độ đọc (read mode) và nó sẽ nhận giá trị HIGH hoặc LOW nếu đang ở chế độ ghi (write mode) • Backlight (Backlight Anode (+) và Backlight Cathode (-)): Tắt bật đèn màn hình LCD. 2.9 MODULE I2C Hình 2. 22: Module I2C LCD có quá nhiều chân gây khó khăn trong quá trình kết nối và chiếm dụng nhiều chân của vi điều khiển. Module chuyển đổi I2C cho LCD sẽ giải quyết vấn đề này, thay vì sử dụng tối thiểu 6 chân của vi điều khiển để kết nối với LCD (RS, EN, D7, D6, D5 và D4) thì với module chuyển đổi bạn chỉ cần sử dụng 2 chân (SCL, SDA) để kết nối. Module chuyển đổi I2C hỗ trợ các loại LCD sử dụng driver HD44780(LCD 1602, LCD 2004, ), kết nối với vi điều khiển thông qua giao tiếp I2C, tương thích với hầu hết các vi điều khiển hiện nay. ❖ Ưu điểm: • Tiết kiệm chân cho vi điều khiển 28 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT • Dễ dàng kết nối với LCD ❖ Thông số kỹ thuật: • Điện áp hoạt động: 2.5-6V DC • Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780) • Giao tiếp: I2C • Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2) • Kích thước: 41.5mm(L)x19mm(W)x15.3mm(H) • Trọng lượng: 5g • Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt • Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD 2.10 CÁC CHUẨN GIAO TIẾP 2.10.1 Giao tiếp uart Các tên đầy đủ UART là “Universal Asynchronous Receiver/Transmitter”, và nó là một vi mạch sẵn có trong một vi điều khiển nhưng không giống như một giao thức truyền thông (I2C & SPI). Chức năng chính của UART là truyền dữ liệu nối tiếp. Trong UART, giao tiếp giữa hai thiết bị có thể được thực hiện theo hai cách là giao tiếp dữ liệu nối tiếp và giao tiếp dữ liệu song song. Các máy tính/vi điều khiển thường truyền tín hiệu theo hai cách: Song song và nối tiếp. Trong kênh truyền song song, khi truyền một gói dữ liệu n-bit thì ta cần n đường truyền, mỗi bit trong gói dữ liệu sẽ đi trên một đường truyền. Trong kênh truyền nối tiếp, ta chỉ cần một đường truyền để truyền tuần tự n bit của gói dữ liệu. Như vậy, để truyền một gói dữ liệu trong kênh truyền song song ta tốn một khoản thời gian tbit, trong kênh truyền nối tiếp để truyền n bit ta tốn khoản thời gian n*tbit. 29 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Hình 2. 23: Định dạng chuỗi dữ liệu ❖ Các loại kênh truyền dữ liệu nối tiếp: Các kênh truyền được gọi là simplex (đơn công), hay half duplex(bán song công), hay full duplex (song công) tùy thuộc vào kiểu mà mình kết nối. • Kênh truyền nối tiếp simplex chỉ truyền được theo một hướng duy nhất trên một đường truyền xác định. Hình 2. 24: Truyền đơn công • Kênh truyền nối tiếp half –duplex chỉ có một trường truyền nhưng dữ liệu có thể truyền theo 2 hướng, tuy nhiên trong một lúc, dữ liệu chỉ đi được theo 1 hướng. 30 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Hình 2. 25: Truyền bán song công • Kênh truyền nối tiếp full – duplex có 2 đường truyền dữ liệu riêng biệt, một đường truyền và một đường nhận, cho phép dữ liệu truyền nhận theo 2 hướng cùng lúc. Hình 2. 26: Truyền song công ❖ Đồng bộ dữ liệu trong các kênh truyền nối tiếp • Tất cả các kênh truyền nối tiếp đều yêu cầu tín hiệu clock nhằm thiết lập tốc độ tín hiệu truyền nhận dữ liệu giữa các bên cho khớp với nhau. Tùy thuộc vào cách sử dụng tín hiệu clock như thế nào mà chúng ta có định nghĩa về kênh truyền đồng bộ hay kênh truyền không đồng bộ. • Kênh truyền không đồng bộ sử dụng bộ tạo tín hiệu clock độc lập ở mỗi thiết bị, dữ liệu được truyền theo một khung truyền và tốc độ baud được thống nhất bởi bên truyền và bên nhận. Còn đối với kênh truyền đồng bộ sẽ có những tín hiệu clock được truyền đồng thời với dữ liệu trên một đường truyền nối giữa hai thiết bị. ❖ Khung truyền và một số khái niệm, thuật ngữ Khung truyền dữ liệu (data frame) • Dữ liệu đi vào ở đầu thu của đường dữ liệu trong truyền dữ liệu nối tiếp là một dãy các số 0 và 1, và rất khó để hiểu được ý nghĩa của các dữ liệu ấy nếu bên phát và bên thu không cùng thống nhất về một tập các luật, một thủ tục, về cách dữ liệu được đóng gói, bao nhiêu bit tạo nên một ký tự và khi nào dữ liệu bắt đầu và kết thúc. Bên cạnh tốc độ baud, khung truyền là một yếu tố quan trọng tạo nên sự thành công khi truyền và nhận. Khung truyền bao gồm các quy định về số bit trong mỗi lần truyền, các bit “báo” như bit Start và bit Stop, các bit kiểm tra như Parity, ngoài ra số lượng các bit trong một data hay thứ tự truyền các bit trên đường truyền cũng 31 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT được quy định bởi khung truyền. Hình ảnh cấu trúc dữ liệu trong truyền thông nối tiếp bất đồng bộ: Hình 2. 27: Khung truyền dữ liệu bất đồng bộ • Start là bit đầu tiên được truyền trong một frame truyền, bit này có chức năng báo cho thiết bị nhận biết rằng có một gói dữ liệu sắp được truyền tới. Start là bit bắt buộc phải có trong khung truyền, và nó là một bit thấp (0). • Data hay dữ liệu cần truyền là thông tin chính mà chúng ta cần gởi và nhận. Số lượng bit data tùy thuộc vào các loại vi điều khiển khác nhau, thường thì data có 8 bit. Trong truyền thông nối tiếp UART, bit có trọng số nhỏ nhất (LSB – Least Significant Bit, bit bên phải) của data sẽ được truyền trước và cuối cùng là bit có trọng số lớn nhất (MSB – Most Significant Bit, bit bên trái). Tuy nhiên thứ tự truyền này có thể được cài đặt bởi người dùng. • Parity là bit dùng để kiểm tra dữ liệu truyền có đúng không (một cách tương đối). Có 2 loại parity là parity chẵn (even parity) và parity lẻ (odd parity). Parity chẵn nghĩa là số lượng số “1” trong dữ liệu bao gồm bit parity luôn là số chẵn. Ngược lại tổng số lượng các số “1” trong parity lẻ luôn là số lẻ. Thí dụ: nếu dữ liệu của bạn là 10111011 nhị phân, có tất cả 6 bit có giá trị “1” trong dữ liệu này, nếu quy định parity chẵn được dùng, bit parity sẽ mang giá trị 0 để đảm bảo tổng các số “1” là số chẵn (6 số 1). Nếu parity lẻ được yêu cầu thì giá trị của parity bit là 1. Sau khi truyền chuỗi dữ liệu kèm theo cả bit parity trên, bên nhận thu được và kiểm tra lại tổng số số “1” (bao gồm cả bit parity), nếu vi phạm quy định parity đã đặt trước thì ta khẳng định là dữ liệu nhận được là sai, còn nếu không vi phạm thì cũng không khẳng định được điều gì (mang tính tương đối). Parity bit không phải là bit bắt buộc và vì thế chúng ta có thể loại bit này khỏi khung truyền. • Stop bits là 01 hoặc nhiều bit báo cho thiết bị nhận rằng một gói dữ liệu đã được gởi xong. Sau khi nhận được stop bits, thiết bị nhận sẽ tiến hành kiểm tra khung truyền để đảm bảo tính chính xác của dữ liệu. Stop bits là các bit bắt buộc xuất hiện trong khung truyền. 32 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Ví dụ về gói dữ liệu 0x7B với lựa chọn kiểm tra bít chẵn: Hình 2. 28: Khung truyền dữ liệu đồng bộ Tốc độ bit và tốc độ baud • Có hai thuật ngữ thường dùng trong truyền số liệu là tốc độ bit (bit rate) và tốc độ baud (baud rate) thường bị nhầm lẫn. Tốc độ bit là số bit được truyền trong một giây, Tốc độ baud là số đơn vị tín hiệu trong một giây cần có để biểu diễn số bit vừa nêu. Khi nói về hiệu quả của máy tính, thì tốc độ bit luôn là yếu tố quan trọng. Tuy nhiên, trong truyền số liệu ta lại cần quan tâm đến hiệu quả truyền dẫn dữ liệu từ nơi này đến nơi khác, như thế khi dùng ít đơn vị tín hiệu cần có, thì hiệu quả càng cao, và băng thông truyền càng thấp; như thế thì cần chú ý đến tốc độ baud. Tốc độ baud xác định băng thông cần thiết để truyền tín hiệu. Tốc độ bit là tốc độ baud nhân với số bit trong mỗi đơn vị tín hiệu. Tốc độ baud chia cho số bit biểu diễn trong mỗi đơn vị truyền. Tốc độ bit là số bit trong mỗi giây. Tốc độ baud là số đơn vị tín hiệu trong mỗi giây. Tốc độ baud thường bé hơn hay bằng tốc độ bit. • Một ý niệm tương đồng có thể giúp hiểu rõ vấn đề này, baud tương tư như xe khách, còn bit tương tự như số hành khách. Một chuyến xe mang một hoặc nhiều hành khách. Nếu 1000 xe di chuyển từ điểm này sang điểm khác chỉ mang một hành khách (thí dụ lái xe) thì mang được 1000 hành khách. Tuy nhiên, với số xe này, mỗi xe mang 4 người, thì ta vận chuyển được 4000 hành khách. Chú ý là chính số xe, chứ không phải số hành khách, là đơn vị lưu thông trên đường, tức là tạo nhu cầu về độ rộng của xa lộ. Nói cách khác, tốc độ baud xác định băng thông cần thiết, chứ không phải số bit. Thí dụ 1: Một tín hiệu analog mang 4 bit trong mỗi phần tử tín hiệu. Nếu 1000 phần tử tín hiệu được gởi trong một giây, xác định tốc độ baud và tốc độ bit. 33 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Giải: Tốc độ baud = số đơn vị tín hiệu = 1000 baud/giây Tốc độ bit = tốc độ baud x số bit trong một đơn vị tín hiệu =1000 x 4 = 4000 bps. Thí dụ 2: Tốc độ bit của tín hiệu là 3000. Nếu mỗi phần tử tín hiệu mang 6 bit, cho biết tốc độ baud? Giải: Tốc độ baud = tốc độ bit/ số bit trong mỗi phần tử tín hiệu = 3000/6 =500 baud/giây 2.10.2 Giao tiếp I2C I2C là tên viết tắt của cụm từ Inter-Intergrated Circuit. Đây là đường Bus giao tiếp giữa các IC với nhau. I2C mặc dù được phát triển bới Philips, nhưng nó đã được rất nhiều nhà sản xuất IC trên thế giới sử dụng. Bus I2C được sử dụng làm bus giao tiếp ngoại vi cho rất nhiều loại IC khác nhau như các loại Vi điều khiển 8051, PIC, AVR, ARM... chip nhớ như: RAM tĩnh (Static Ram), EEPROM, bộ chuyển đổi tương tự số (ADC), số tương tự (DAC), IC điểu khiển LCD, LED... Hình 2. 29: Bus I2C và các thiết bị ngoại vi Đặc điểm giao tiếp của I2C Một giao tiếp I2C gồm có 2 dây: Serial Data (SDA) và Serial Clock (SCL). SDA là đường truyền dữ liệu 2 hướng, còn SCL là đường truyền xung đồng hồ để đồng bộ và chỉ theo một hướng. Mỗi dây SDA hãy SCL đều được nối với điện áp dương của nguồn cấp thông qua một điện trở kéo lên (pullup resistor). Sự cần thiết của các điện trở kéo này là vì chân giao tiếp 34 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT I2C của các thiết bị ngoại vi thường là dạng cực máng hở (opendrain hay opencollector). Giá trị của các điện trở này khác nhau tùy vào từng thiết bị và chuẩn giao tiếp, thường dao động trong khoảng 1K đến 4.7k. Một thiết bị hay một IC khi kết nối với bus I2C, ngoài một địa chỉ (duy nhất) để phân biệt, nó còn được cấu hình là thiết bị đầu hay thiết bị cuối. Thiết bị đầu nắm vai trò tạo xung đồng hồ cho toàn hệ thống, khi giữa hai thiết bị đầu – cuối giao tiếp thì thiết bị đầu có nhiệm vụ tạo xung đồng hồ và quản lý địa chỉ của thiết bị cuối trong suốt quá trình giao tiếp. Thiết bị đầu giữ vai trò chủ động, còn thiết bị cuối giữ vai trò bị động trong việc giao tiếp. Hình 2. 30: Hướng đi của xung Clock và hướng đi của đường dữ liệu Chế độ hoạt động Các bus I2C có thể hoạt động ở ba chế độ, hay nói cách khác các dữ liệu trên bus I2C có thể được truyền trong ba chế độ khác nhau: • Chế độ tiêu chuẩn: tốc độ truyền dữ liệu tối đa là 100Kpbs, sử dụng 7 bit địa chỉ và 112 địa chỉ tớ • Chế độ nhanh: tốc độ truyền lên đến 400Kpbs • Chế độ tốc độ cao: Chế độ này đã được tạo ra chủ yếu để tăng tốc độ dữ liệu lên đến 36 lần nhanh hơn so với chế độ tiêu chuẩn. Nó cung cấp 1,7 Mbps (với Cb = 400 pF), và 3.4Mbps (với C> b = 100pF). Một bus I2C có thể hoạt động ở nhiều chế độ khác nhau: • Một chủ một tớ (one master - one slave) • Một chủ nhiều tớ (one master - multi slave) • Nhiều chủ nhiều tớ (Multi master - Multi slave) Thiết bị chủ xác định đúng địa chỉ của thiết bị tớ, cùng với việc xác định địa chỉ, thiết bị chủ sẽ quyết định việc đọc hay ghi vào thiết bị tớ. Thiết bị chủ gửi dữ liệu tới thiết bị tớ. Thiết bị tớ kết thúc quá trình truyền dữ liệu. 35 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Trình tự truyền bit trên đường truyền Hình 2. 31: Trình tự truyền bit Thiết bị chủ tạo một điều kiện start. Điều kiện này thông báo cho tất cả các thiết bị tớ lắng nghe dữ liệu trên đường truyền. Thiết bị chủ gởi địa chỉ của thiết bị tớ mà thiết bị chủ muốn giao tiếp và cờ đọc/ghi dữ liệụ (nếu cờ thiết lập lên 1 byte tiếp theo được truyền từ thiết bị tớ đến thiết bị chủ, nếu cờ thiết lập xuống 0 thì byte tiếp theo truyền từ thiết bị chủ đến thiết bị tớ). Khi thiết bị tớ trên bus I2C có địa chỉ đúng với địa chỉ mà thiết bị chủ gửi sẻ phản hồi lại bằng một xung ACK. Giao tiếp giữa thiết bị chủ và tớ trên bus dữ liệu bắt đầu. Cả chủ và tớ đều có thể nhận hoặc truyền dữ liệu tùy thuộc vào việc truyền thông là đọc hay viết. Bộ truyền gửi 8 bit dữ liệu tới bộ nhận, bộ nhận trả lời với một bit ACK. Để kết thúc quá trình giao tiếp, thiết bị chủ tạo ra một điều kiện stop. Điều kiện START và STOP START và STOP là những điều kiện bắt buộc phải có khi một thiết bị chủ muốn thiết lập giao tiếp với một thiết bị nào đó trên bus I2C. START là điều kiện khởi đầu, báo hiệu bắt đầu của giao tiếp, còn STOP báo hiệu kết thúc một giao tiếp. Hình dưới đây mô tả điều kiện START và STOP. Hình 2. 32: Start bit và Stop bit Ban đầu khi chưa thực hiện quá trình giao tiếp, cả hai đường SDA và SCL đều ở mức cao (SDA = SCL = HIGH). Lúc này bus I2C được coi là rỗi (“bus free”), sẵn sàng cho một giao tiếp. Hai điều kiện START và STOP là không thể thiếu trong việc giao tiếp giữa các thiết bị I2C với nhau. 36 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Điều kiện START: một sự chuyển đồi trạng thái từ cao xuống thấp trên đường SDA trong khi đường SCL đang ở mức cao (cao = 1, thấp = 0) báo hiệu một điều kiện START Đỉều kiện STOP: Một sự chuyển đổi trạng thái từ mức thấp lên cao trên đường SDA trong khi đường SCL đang ở mức cao. Cả hai điều kiện START và STOP đều được tạo ra bởi thiết bị chủ. Sau tín hiệu START, bus I2C coi như đang trong trạng thái làm việc (busy). Bus I2C sẽ rỗi, sẵn sàng cho một giao tiếp mới sau tín hiệu STOP từ phía thiết bị chủ. Sau khi có một điều kiện START, trong quá trình giao tiếp, khi có một tín hiệu START được lặp lại thay vì một tín hiệu STOP thì bus I2C vẫn tiếp tục trong trạng thái bận. Tín hiệu START và lặp lại START (Repeated START) đều có chức năng giống nhau là khởi tạo một giao tiếp. 2.11 IoT 2.11.1 Giới thiệu về IoT Hình 2. 33: Giới thiệu về IoT IoT là khái niệm kết nối các thiết bị với nhau và với Internet. IoT là một mạng lưới khổng lồ gồm các vật (things) và con người được kết nối - tất cả đều thu thập và chia sẻ dữ liệu với nhau. Việc kết nối có thể thực hiện qua Wifi, ZigBee, Bluetooth IoT là một kịch bản của thế giới, khi mà mỗi đồ vật, con người được cung cấp một định danh của riêng mình, và tất cả có khả năng truyền tải, trao đổi thông tin, dữ liệu qua một mạng duy nhất mà không cần đến sự tương tác trực tiếp giữa người với người, hay người với máy tính. IoT đã phát triển từ sự hội tụ của công nghệ không dây, công nghệ vi cơ điện 37 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT tử và Internet. Nói đơn giản là một tập hợp các thiết bị có khả năng kết nối với nhau, với Internet và với thế giới bên ngoài để thực hiện một công việc nào đó. 2.11.2 IoT hoạt động như thế nào Hình 2. 34: Hoạt động của mô hình IoT Các thiết bị được kết nối với nhau và cùng kết nối trong cùng một mạng. Con người có thể giám sát, điều khiển thiết bị, thu thập dữ liệu ở bất cứ nơi nào và bất cứ thời điểm nào thông qua IoT Platform. Một IoT Platform cũng thường được coi là phần mềm trung gian IoT, trong đó nhấn mạnh vai trò chức năng của nó như là một trung gian (middleware) giữa phần cứng và các ứng dụng. Các IoT Platform có thể được tích hợp với hầu hết các thiết bị kết nối và các ứng dụng mà thiết bị sử dụng. Các cảm biến, các thiết bị đo,... gửi dữ liệu thu thập được lên IoT Platform. Sau đó IoT platform sẽ thực hiện tích hợp dữ liệu nhận được và phân tích để chia sẻ thông tin với các ứng dụng để giải quyết vấn đề. 2.11.3. Một số ứng dụng của IoT IoT có rất nhiều ứng dụng trong các lĩnh vực đời sống khác nhau. Có thể kể ra bao gồm từ lò vi sóng thông minh, tự động nấu thức ăn trong một khoảng thời gian thích hợp, cho đến những chiếc xe tự lái, có cảm biến phức tạp phát hiện vật thể trên đường đi, đến các 38 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT thiết bị thể dục có thể đo được nhịp tim của con người và số bước đi đã thực hiện ngày hôm đó, sau đó sử dụng thông tin đó để đề xuất các kế hoạch tập thể dục phù hợp. 2.11.4 Web socket WebSocket là công nghệ hỗ trợ giao tiếp hai chiều giữa client và server bằng cách sử dụng một TCP socket để tạo một kết nối hiệu quả và ít tốn kém. Mặc dù được thiết kế để chuyên sử dụng cho các ứng dụng web, lập trình viên vẫn có thể đưa chúng vào bất kì loại ứng dụng nào. WebSocket mới xuất hiện trong HTML5, là một kỹ thuật Reverse Ajax. WebSockets cho phép các kênh giao tiếp song song hai chiều và hiện đã được hỗ trợ trong nhiều trình duyệt (Firefox, Google Chrome và Safari). Kết nối được mở thông qua một HTTP request (yêu cầu HTTP), được gọi là liên kết WebSockets với những header đặc biệt. Kết nối được duy trì để bạn có thể viết và nhận dữ liệu bằng JavaScript như khi bạn đang sử dụng một TCP socket đơn thuần. Dữ liệu truyền tải thông qua giao thức HTTP (thường dùng với kĩ thuật Ajax) chứa nhiều dữ liệu không cần thiết trong phần header. Một header request/response của HTTP có kích thước khoảng 871 byte, trong khi với WebSocket, kích thước này chỉ là 2 byte (sau khi đã kết nối). Vậy giả sử bạn làm một ứng dụng game có thể tới 10,000 người chơi đăng nhập cùng lúc, và mỗi giây họ sẽ gửi/nhận dữ liệu từ server. Hãy so sánh lượng dữ liệu header mà giao thức HTTP và WebSocket trong mỗi giây: HTTP: 871 x 10,000 = 8,710,000 bytes = 69,680,000 bits per second (66 Mbps) WebSocket: 2 x 10,000 = 20,000 bytes = 160,000 bits per second (0.153 Kbps) Như bạn thấy chỉ riêng phần header thôi cũng đã chiếm một phần lưu lượng đáng kể với giao thức HTTP truyền thống. ❖ Giao thức bắt tay của WebSocket Để thực hiện kết nối, client phải gửi một WebSocket handshake request đến server. Server sẽ gửi trả lại WebSocket handshake response như bên dưới: Client request: GET /mychat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat 39 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Sec-WebSocket-Version: 13 Origin: Server response:(Server Architecture) HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Để xác nhận việc kết nối, client sẽ gửi một giá trị Sec-WebSocket-Key được mã hóa bằng Based64 đến server. Sau đó bên server sẽ thực hiện: – Nối thêm chuỗi cố định là “258EAFA5-E914-47DA-95CA-C5AB0DC85B11″ vào Sec-WebSocket-Key để được chuỗi mới là “x3JJHMbDL1EzLkh9GBhXDw==258EAFA5-E914-47DA-95CA- C5AB0DC85B11″. – Thực hiện mã hóa SHA-1 chuỗi trên để được “1d29ab734b0c9585240069a6e4e3e91b61da1969″. – Mã hóa kết quả vừa nhận được bằng Base64 để được “HSmrc0sMlYUkAGmm5OPpG2HaGWk=”. – Gửi response lại client kèm với giá trị Sec-WebSocket-Accept chính là chuỗi kết quả vừa tạo ra. Client sẽ kiểm tra status code (phải bằng 101) và Sec-WebSocket-Accept xem có đúng với kết quả mong đợi không và thực hiện kết nối. ❖ Ưu điểm • WebSockets cung cấp khả năng giao tiếp hai chiều mạnh mẽ, có độ trễ thấp và dễ xử lý lỗi. Không cần phải có nhiều kết nối như phương pháp Comet long-polling và cũng không có những nhược điểm như Comet streaming. • API cũng rất dễ sử dụng trực tiếp mà không cần bất kỳ các tầng bổ sung nào, so với Comet, thường đòi hỏi một thư viện tốt để xử lý kết nối lại, thời gian chờ timeout, các Ajax request (yêu cầu Ajax), các tin báo nhận và các dạng truyền tải tùy chọn khác nhau (Ajax long-polling và jsonp polling). ❖ Nhược điểm Những nhược điểm của WebSockets gồm có: • Nó là một đặc tả mới của HTML5, nên nó vẫn chưa được tất cả các trình duyệt hỗ trợ. • Không có phạm vi yêu cầu nào. Do WebSocket là một TCP socket chứ không phải là HTTP request, nên không dễ sử dụng các dịch vụ có phạm vi-yêu cầu, như SessionInViewFilter của Hibernate. Hibernate là một framework kinh điển cung cấp một bộ lọc xung quanh một HTTP request. Khi bắt đầu một request, nó sẽ thiết lập một contest (chứa các transaction và liên kết JDBC) được ràng buộc với luồng request. Khi request đó kết thúc, bộ lọc hủy bỏ contest này. 40 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.12. SERVER 2.12.1. Node JS Node.js là một nền tảng chạy trên môi trường V8 JavaScript runtime - một trình thông dịch JavaScript cực nhanh chạy trên trình duyệt Chrome. Chúng ta có thể tải bộ V8 và nhúng nó vào bất cứ thứ gì, Node.js làm điều đó đối với các web server. Trong một môi trường server điển hình LAMP (Linux-Apache-MySQL-PHP), bạn có một web server là Apache hoặc NGINX nằm dưới, cùng với PHP chạy trên nó. Mỗi một kết nối tới server sẽ sinh ra một thread mới, và điều này khiến ứng dụng nhanh chóng trở nên chậm chạp hoặc quá tải - cách duy nhất để hỗ trợ nhiều người dùng hơn là bằng cách bổ sung thêm nhiều máy chủ. Đơn giản là nó không có khả năng mở rộng tốt. Nhưng với Node.js thì điều này không phải là vấn đề. Không có một máy chủ Apache lắng nghe các kết nối tới và trả về mã trạng thái HTTP - bạn sẽ phải tự quản lý kiến trúc lõi của máy chủ đó. May mắn thay, có một số module giúp thực hiện điều này được dễ dàng hơn, nhưng công việc này vẫn gây cho chúng ta một chút khó khăn khi mới bắt đầu. Tuy nhiên, kết quả thu được là một ứng dụng web có tốc độ thực thi cao. JavaScript là một ngôn ngữ dựa trên sự kiện, vì vậy bất cứ thứ gì xảy ra trên server đều tạo ra một sự kiện non-blocking. Mỗi kết nối mới sinh ra một sự kiện, dữ liệu nhận được từ một upload form sinh ra một sự kiện data-received, việc truy vấn dữ liệu từ database cũng sinh ra một sự kiện. Trong thực tế, điều này có nghĩa là một trang web Node.js sẽ chẳng bao giờ bị khóa (lock up) và có thể hỗ trợ cho hàng chục nghìn user truy cập cùng lúc. Node.js đóng vai trò của server - Apache - và thông dịch mã ứng dụng chạy trên nó. Giống như Apache, có rất nhiều module (thư viện) có thể được cài đặt để bổ sung thêm các đặc trưng và chức năng - như lưu trữ dữ liệu, hỗ trợ file Zip, đăng nhập bằng Facebook, hoặc các cổng thanh toán. Dĩ nhiên, nó không có nhiều thư viện như PHP, nhưng Node.js vẫn đang ở trong giai đoạn ban đầu và có một cộng đồng rất mạnh mẽ ở đằng sau nó. Một khái niệm cốt lõi của Node.js đó là các function bất đồng bộ (asynchronous functions) - vì vậy về cơ bản thì mọi thứ chạy trên nền tảng này. Với hầu hết các ngôn ngữ kịch bản máy chủ, chương trình phải đợi mỗi function thực thi xong trước khi có thể tiếp tục chạy tiếp. Với Node.js, chúng ta xác định các function sẽ chạy để hoàn thành một tác vụ nào đó, trong khi phần còn lại của ứng dụng vẫn chạy đồng thời. ❖ Ưu điểm • Đầu tiên là ưu điểm về tốc độ thực thi và khả năng mở rộng. Node.js có tốc độ rất nhanh. Đó là một yêu cầu khá quan trọng khi chúng ta là một startup đang cố gắng tạo ra một sản phẩm lớn và muốn đảm bảo có thể mở rộng nhanh chóng, đáp ứng được một lượng lớn người dùng khi trang web của bạn phát triển lên. • Node.js có thể xử lý hàng ngàn kết nối đồng thời. 41 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CHƯƠNG 2: CƠ SỞ LÝ THUYẾT ❖ Nhược điểm • Giống như hầu hết các công nghệ mới, việc triển khai Node.js trên host không phải là điều dễ dàng. Nếu chúng ta có một web hosting xài chung, chúng ta không thể đơn giản tải lên một ứng dụng Node.js và mong chờ nó hoạt động tốt. VPS và dedicated server là một sự lựa chọn tốt hơn – chúng ta có thể cài đặt Node.js trên chúng. Thậm chí dễ hơn là sử dụng một dịch vụ có khả năng mở rộng như là Heroku, và ta có thể hoàn toàn an tâm để phát triển trang web của mình trên đó – chúng ta chỉ cần trả tiền khi cần thêm nhiều tài nguyên hơn. • Mặt khác, chúng ta rất dễ cài đặt Node.js chạy cục bộ trên máy tính của bạn sử dụng các hệ điều hành như Windows, Mac hoặc Linux và bắt đầu phát triển ứng dụng ngay lập tức - chỉ việc tải phiên bản Node.js tương ứng tại đây. Một điều quan trọng nên chú ý là Node.js không chỉ đơn giản là một sự thay thế cho Apache - các ứng dụng web đang tồn tại sẽ không có khả năng tương thích, và bạn ta làm việc hiệu quả với những ứng dụng phát triển từ đầu (mặc dù có rất nhiều framework ngoài kia để giúp đỡ bạn với nhiều đặc trưng phổ biến). • Một nhược điểm lớn khác của Node.js đó là nó vẫn đang trong giai đoạn phát triển ban đầu, điều này có nghĩa là một số đặc trưng sẽ thay đổi trong quá trình phát triển tiếp theo. Trong thực tế, nếu ta đọc các tài liệu đi kèm, thì nó bao gồm một chỉ số ổn định (stability index), chỉ số này cho thấy mức độ rủi ro khi bạn sử dụng các đặc trưng hiện có. 2.12.2. Postgresql PostgreSQL là một hệ thống quản trị cơ sở dữ liệu quan hệ-đối tượng (object-relational database management system) có mục đích chung, hệ thống cơ sở dữ liệu mã nguồn mở tiên tiến nhất hiện nay. PostgreSQL được phát triển dựa trên POSTGRES 4.2 tại phòng khoa học máy tính Berkeley, Đại học California. PostgreSQL được thiết kế để chạy trên các nền tảng tương tự UNIX. Tuy nhiên, PostgreSQL sau đó cũng được điều chỉnh linh động để có thể chạy được trên nhiều nền tảng khác nhau như Mac OS X, Solaris và Windows. PostgreSQL là một phầ...me()) { console.log('Dat fail: '); status = 0; clone(socket, "ADD Fail"); break; } else if (checkendDay.getTime() >= startSQL.getTime() && checkendDay.getTime() <= endSQL.getTime()) { console.log('Dat fail: '); status = 0; clone(socket, "ADD Fail"); break; } else if (checkstartDay.getTime() <= startSQL.getTime() && checkendDay.getTime() >= endSQL.getTime()) { console.log('Dat fail: '); status = 0; clone(socket, "ADD Fail"); break; } console.log(info); } if (status == 1){ console.log('Request add thanh cong'); 127 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC newQuery = "INSERT INTO customers VALUES('name' ,'birth' ,'phone' ,'mail' ,'room' ,'startT14:00:00Z' ,'endT12:00:00Z' ,pass);"; newQuery = newQuery.replace("name", stringInfo[1]); newQuery = newQuery.replace("birth", stringInfo[2]); newQuery = newQuery.replace("phone", stringInfo[3]); newQuery = newQuery.replace("mail", stringInfo[4]); newQuery = newQuery.replace("room", stringInfo[5]); newQuery = newQuery.replace("start", stringInfo[6]); newQuery = newQuery.replace("end", stringInfo[7]); newQuery = newQuery.replace("pass", stringInfo[8]); client.query(newQuery , (err, res) => { if (err) throw err; }); send_Email(stringInfo[1], stringInfo[4], stringInfo[5], stringInfo[6], stringInfo[7], stringInfo[8]); send_SMS(stringInfo[1], stringInfo[3], stringInfo[5], stringInfo[6], stringInfo[7], stringInfo[8]); clone(socket, "ADD Done"); } }); } else{ clone(socket, "ADD Fail"); } } /* Request History */ 128 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC if (stringInfo[0] == 'GET') { console.log('Request History'); client.query("SELECT * FROM customers;" , (err, res) => { if (err) throw err; for (let row of res.rows) { infoHistory = JSON.stringify(row); infoHistory = infoHistory.replace(/T00:00:00.000Z|name|birthday|phonenumber|{|}|email|room| password|startdate|enddate|:|"|/g,''); console.log(infoHistory); clone(socket,"RES," + infoHistory); } }); } /* Request History Room */ if (stringInfo[0] == 'HIS') { console.log('Request History Room'); client.query("SELECT * FROM history_room"+ stringInfo[1] +";" , (err, res) => { if (err) throw err; for (let row of res.rows) { infoHistory = JSON.stringify(row); infoHistory = infoHistory.replace(/name|action|time|{|}|:|"|/g,''); console.log(infoHistory); clone(socket,"PUSH,"+ stringInfo[1] + "," + infoHistory); } }); } /* Get Clear Database request from Client */ if (stringInfo[0] == 'CLEAR') { client.query("DELETE FROM customers;" , (err, res) => { if (err) throw err; }); } /* Get Access password from ESP8266 */ if (stringInfo[0] == 'Access') { 129 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC console.log('Access ESP8266'); var newQuery = "SELECT name, startdate, enddate FROM customers Where room = 'data1' and password = 'data2';"; newQuery = newQuery.replace('data1', stringInfo[1] ); newQuery = newQuery.replace('data2', stringInfo[2] ); status = 0; console.log(newQuery); client.query(newQuery , (err, res) => { for (let row of res.rows) { infoHistory = JSON.stringify(row); infoHistory = infoHistory.replace(/name|{|}|enddate|startdate|:|"|T140000.000Z|T120000.000Z/g ,''); infoHistory = infoHistory.replace('T140000.000Z',''); infoHistory = infoHistory.replace('T120000.000Z',''); console.log(infoHistory); var text = infoHistory.split(','); var day = new Date(); var trueday = new Date(day + ' GMT-07:00'); var text = infoHistory.split(','); var checkstartDay = new Date(text[1] + ' 14:00:00 GMT+07:00'); var checkendDay = new Date(text[2] + ' 12:00:00 GMT+07:00'); console.log(day); console.log(checkstartDay.getTime()); console.log(checkendDay.getTime()); if ( (day.getTime() + 7*3600*1000 ) > checkstartDay.getTime() && (day.getTime() + 7*3600*1000 ) < checkendDay.getTime() ) { clone(socket,"Room Accept"); /*Start to write logs */ newQuery = "INSERT INTO customers VALUES('name' ,'Open','year-month-dayThour00minute.0secondZ');" newQuery = newQuery.replace('customers', 'history_' + stringInfo[1] ); newQuery = newQuery.replace("name", text[0]); 130 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC newQuery = newQuery.replace("year", trueday.getFullYear()); newQuery = newQuery.replace("month", trueday.getMonth() + 1); newQuery = newQuery.replace("day", trueday.getDate()); newQuery = newQuery.replace("hour",('0' + trueday.getHours()).slice(-2)) ; newQuery = newQuery.replace("minute",('0' + trueday.getMinutes()).slice(-2) ); newQuery = newQuery.replace("second",('0' + trueday.getSeconds()).slice(-2) ); client.query(newQuery , (err, res) => { }); console.log('Room Accept'); status = 1; break; } } if (status == 0) { clone(socket,"Room Denied"); } }); } /* Get Notify from ESP8266 */ if (stringInfo[0] == 'Door' || stringInfo[0] == 'Finger'){ console.log('Notify ESP8266'); stringInfo = (stringInfo.toString()).replace(/;/g,','); console.log(stringInfo + ','); broadcast(socket,stringInfo + ','); } if (stringInfo[0] == 'Savefinger'){ console.log('Finger ESP8266'); var day = new Date(); var trueday = new Date(day + ' GMT-07:00'); var newQuery = "INSERT INTO customers VALUES('name' ,'Open by Finger','year-month-dayThour00minute.0secondZ');" 131 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC newQuery = newQuery.replace('customers', 'history_' + stringInfo[1] ); newQuery = newQuery.replace("name", 'Owner'); newQuery = newQuery.replace("year", trueday.getFullYear()); newQuery = newQuery.replace("month", trueday.getMonth() + 1); newQuery = newQuery.replace("day", trueday.getDate()); newQuery = newQuery.replace("hour",('0' + trueday.getHours()).slice(-2)) ; newQuery = newQuery.replace("minute",('0' + trueday.getMinutes()).slice(-2) ); newQuery = newQuery.replace("second",('0' + trueday.getSeconds()).slice(-2) ); console.log(newQuery); client.query(newQuery , (err, res) => { }); console.log('Room Open Finger Log'); } if (stringInfo[0] == 'Saveclose') { var day = new Date(); var trueday = new Date(day + ' GMT-07:00'); var newQuery = "INSERT INTO customers VALUES('name' ,'Close','year-month-dayThour00minute.0secondZ');" newQuery = newQuery.replace('customers', 'history_' + stringInfo[1] ); newQuery = newQuery.replace("name", ''); newQuery = newQuery.replace("year", trueday.getFullYear()); newQuery = newQuery.replace("month", trueday.getMonth() + 1); newQuery = newQuery.replace("day", trueday.getDate()); newQuery = newQuery.replace("hour",('0' + trueday.getHours()).slice(-2)) ; newQuery = newQuery.replace("minute",('0' + trueday.getMinutes()).slice(-2) ); newQuery = newQuery.replace("second",('0' + trueday.getSeconds()).slice(-2) ); client.query(newQuery , (err, res) => { }); 132 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC console.log('Room Close Log'); } /* Moniter response */ if (stringInfo[0] == 'MONITOR') { newQuery = "Select room ,name, startdate, enddate from customers;"; client.query(newQuery , (err, res) => { for (let row of res.rows) { infoHistory = JSON.stringify(row); infoHistory = infoHistory.replace(/T140000.000Z|T120000.000Z|name|{|}|room|enddate|startdat e|:|"|/g,''); infoHistory = infoHistory.replace('T140000.000Z',''); infoHistory = infoHistory.replace('T120000.000Z',''); console.log(infoHistory); var text = infoHistory.split(','); var checkstartDay = new Date(text[2] + ' 14:00:00 GMT+07:00'); var checkendDay = new Date(text[3] + ' 12:00:00 GMT+07:00'); console.log(checkstartDay.getTime()); console.log(checkendDay.getTime()); if (stringInfo[1] > checkstartDay.getTime() && stringInfo[1] < checkendDay.getTime() ) { clone(socket,"RES_MONITOR," + infoHistory); console.log('Phong'); } } }); } 133 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC }); socket.on('close', function() { var index = clients.indexOf(socket); clients.splice(index, 1); console.log('disconnected'); }); }); server.listen(process.env.PORT || 5000); console.log('Server listening on port %d',process.env.PORT || 5000); ❖ Chương trình cho giao diện HTML <meta charset="UTF-8" name="viewport" content="width=device-width, initial- scale=1"> <h1 align = center style="font: 20 35px/1.3 'Berkshire Swash', Helvetica, sans-serif; color: #2b2b2b; text-shadow: 0.5px 0.5px 0px #ededed, 0px 3px 0px rgba(0,0,0,0.15);">SMARTHOTEL CONTROL <div align="center" id = "warning" style="font-size: 25px; background-color: #FFFFFFFF;color: red;"> <a href="#" onclick='show(1);' class="room" style="position: absolute;left: 10px;top: 120px;">To Book <a href="#" onclick='show(2);' class="room" style="position: absolute;left: 10px;top: 180px;">Monitor Hotel <a href="#" onclick='show(3);' class="room" style="position: absolute;left: 10px;top: 240px;">History   134 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC <table style="background-color: #DDDDDDA0;position: absolute;left: 190px;top: 100px; padding: 30px; width:80%; margin: 0px 30px; border-radius: 15px;" > <th style="background-color: #DDDDDDEE;padding: 30px; font-size: 150%;">RESERVATION PAGE <td style="background-color: #DDDDDDEE;padding: 30px; font-size: 120%;">Full Name <input style="position: absolute;left: 220px;line-height:15px; ;top: 135px;width:50%" type="text" placeholder="Type something..." id="fullName"> Birthday <input style="position: absolute;left: 220px;line-height: 30px;top: 190px;width:15%" type="date" id="Birthday" name="trip-start" value="1996-07-13" min="1900-01-01" max="2019-12-31"> Phone Number <input style="position: absolute;left: 220px;line-height: 15px;top: 225px;width:15%" type="text" placeholder="Type something..." id="phoneNumber"> Your Email <input style="position: absolute;left: 220px;line-height: 15px;top: 275px;width:20%" type="text" placeholder="Type something..." id="Email"> Choose Your Room<select style="position: absolute;left: 230px;line-height: 30px;top: 330px" name="fruit" id="roomNumber"> ROOM 1 ROOM 2 ROOM 3 Start day <input style="position: absolute;left: 220px;line-height: 30px;top: 365px;width:15%" type="date" id="startDay" name="start" value="2019-11-22" 135 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC min="1900-01-01" max="2020-12-31"> End day <input style="position: absolute;left: 220px;line-height: 30px;top: 415px;width:15%" type="date" id="endDay" name="end" value="2019-11-23" min="1900-01-01" max="2020-12-31"> <td align="center" style="background-color: #DDDDDDEE;padding: 30px; font-size: 100%;"><button onclick="addData()" id="bookButton" class="button">BOOK NOW <table style="background-color: #DDDDDDA0;position: absolute;left: 190px;top: 100px; padding: 30px; width:80%; margin: 0px 30px; border-radius: 15px;" > <th id="room1color" style="background-color:#00ff00;width: 10%; padding: 20px;font-size: 150%;">ROOM 1 <th id="room2color" style="background-color:#ff0040;width: 10%; padding: 20px;font-size: 150%;">ROOM 2 <th id="room3color" style="background-color:#ff0040;width: 10%; padding: 20px;font-size: 150%;">ROOM 3 <p style = 'line-height: 60px;font-family: Helvetica;color: #fff;font-size: 40px;' id="room1Sta">AVAILABLE <p style = 'line-height: 60px;font-family: Helvetica;color: #fff;font-size: 40px;' id="room2Sta">IN USED <p style = 'line-height: 60px;font-family: Helvetica;color: #fff;font-size: 40px;' id="room3Sta">IN USED <p style = 'line-height: 60px;font-family: Helvetica;color: #fff;font-size: 40px;' id="door1Sta">DOOR: LOCKED 136 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC <p style = 'line-height: 60px;font-family: Helvetica;color: #fff;font-size: 40px;' id="door2Sta">DOOR: LOCKED <p style = 'line-height: 60px;font-family: Helvetica;color: #fff;font-size: 40px;' id="door3Sta">DOOR: LOCKED <p style = 'line-height: 45px;font-family: Helvetica;color: #fff;font-size: 20px;' id="room1guest"> <p style = 'line-height: 45px;font-family: Helvetica;color: #fff;font-size: 20px;' id="room2guest"> Nguyen Chi Thuong <p style = 'line-height: 45px;font-family: Helvetica;color: #fff;font-size: 20px;' id="room3guest"> Kha Banh <p style = 'line-height: 45px;font-family: Helvetica;color: #fff;font-size: 20px;' id="room1Info"> Until: 10/10/2019 <p style = 'line-height: 45px;font-family: Helvetica;color: #fff;font-size: 20px;' id="room2Info"> Expiration date: 11/10/2019 <p style = 'line-height: 45px;font-family: Helvetica;color: #fff;font-size: 20px;' id="room3Info"> Expiration date: 13/10/2019 <button class="history" onclick="room_history(1)">Show history <button class="history" onclick="room_history(2)">Show history <button class="history" onclick="room_history(3)">Show history <table id="history_room1" style="background-color: #ffffcc;position: absolute;left: 190px;top: 500px; padding: 30px; width:25%; margin: 0px 30px; border-radius: 15px;" > <th align="center" style="background-color: powderblue; padding: 10px;font-size: 100%;">Person <th align="center" style="background-color: powderblue; padding: 10px;font-size: 100%;">Action <th align="center" style="background-color: powderblue; padding: 10px;font-size: 100%;width:50%">Time 137 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC <table id="history_room2" style="background-color: #ffffcc;position: absolute;left: 720px;top: 500px; padding: 30px; width:25%; margin: 0px 30px; border-radius: 15px;" > <th align="center" style="background-color: powderblue; padding: 10px;font-size: 100%;">Person <th align="center" style="background-color: powderblue; padding: 10px;font-size: 100%;">Action <th align="center" style="background-color: powderblue; padding: 10px;font-size: 100%;width:50%">Time <table id="history_room3" style="background-color: #ffffcc;position: absolute;left: 1240px;top: 500px; padding: 30px; width:25%; margin: 0px 30px; border-radius: 15px;" > <th align="center" style="background-color: powderblue; padding: 10px;font-size: 100%;">Person <th align="center" style="background-color: powderblue; padding: 10px;font-size: 100%;">Action <th align="center" style="background-color: powderblue; padding: 10px;font-size: 100%;width:50%">Time <table id="historyTable" style="background-color: #DDDDDDA0;position: absolute;left: 190px;top: 100px; padding: 30px; width:80%; margin: 0px 30px; border-radius: 15px;" > <th align="center" style="background-color: powderblue; padding: 10px;font-size: 120%;width: 15%">Full Name <th align="center" style="background-color: powderblue; padding: 10px;font-size: 120%;width: 7%">Birthday <th align="center" style="background-color: powderblue; padding: 10px;font-size: 120%;width: 10%">Phone number 138 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC <th align="center" style="background-color: powderblue; padding: 10px;font-size: 120%;width: 10%">Email <th align="center" style="background-color: powderblue; padding: 10px;font-size: 120%;width: 10%">Room <th align="center" style="background-color: powderblue; padding: 10px;font-size: 120%;width: 10%">Start Day <th align="center" style="background-color: powderblue; padding: 10px;font-size: 120%;width: 10%">End Day <th align="center" style="background-color: powderblue; padding: 10px;font-size: 120%;width: 10%">Password <button id="btnExport" class="history" style="position: absolute;left: 91%;top: 100px;" onclick="fnExcelReport();"> Export to Excel <button id="btnclear" class="history" style="position: absolute;left: 91%;top: 140px;" onclick="cleardata()"> Clear Database <div id="loginTable" style="position: absolute;left: 40%;top: 40%;display: none;" class="container"> Username <input id="username" type="text" placeholder="Enter Username" name="uname" required> Password <input id="password" type="password" placeholder="Enter Password" name="psw" required> <button onclick="login_func()" class="buttonlogin" type="submit">Login <!-- ========================================================== ========================================================== ========================================================== ===== --> 139 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC function login_func(){ var username = document.getElementById("username").value; var password = document.getElementById("password").value; ws.send('login;' + username + ';' + password); } function room_history(n){ delete_table('history_room' + n); ws.send('HIS;' + n +';'); } function delete_table(table_name) { //Delete history table var table = document.getElementById(table_name); var tableLengh = CountRows(); /* Clear Table before get info */ for (var i = 0; i < tableLengh; i++){ table.deleteRow(1); } } function CountRows() { var rowCount = 0; var table = document.getElementById("historyTable"); var rows = table.getElementsByTagName("tr") for (var i = 0; i < rows.length; i++) { if (rows[i].getElementsByTagName("td").length > 0) { rowCount++; } } return rowCount; } function show(nr) { document.getElementById("table1").style.display="none"; document.getElementById("table2").style.display="none"; document.getElementById("table3").style.display="none"; document.getElementById("table"+nr).style.display="block"; 140 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC document.getElementById('room1color').style.backgroundColor= "#00ff00"; document.getElementById('room1Sta').innerHTML = 'AVAILABLE'; document.getElementById('room1guest').innerHTML = ''; document.getElementById('room1Info').innerHTML =''; document.getElementById('room2color').style.backgroundColor= "#00ff00"; document.getElementById('room2Sta').innerHTML = 'AVAILABLE'; document.getElementById('room2guest').innerHTML = ''; document.getElementById('room2Info').innerHTML =''; document.getElementById('room3color').style.backgroundColor= "#00ff00"; document.getElementById('room3Sta').innerHTML = 'AVAILABLE'; document.getElementById('room3guest').innerHTML = ''; document.getElementById('room3Info').innerHTML =''; delete_table('historyTable'); if (nr == 3 ) { ws.send('GET;'); } if (nr == 2) { var now = new Date(); var querry = 'MONITOR;' + now.getTime(); ws.send(querry); } } function parse_timestamp(str2) { str2 = str2.replace("T", " "); var date = str2.substring(0, 10); var hour = str2.substring(11, 13); var minute = str2.substring(15, 17); var second = str2.substring(19, 21); return date + ' ' + hour + ':' + minute + ':' + second; } 141 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC function correct_date(date) { var true_day = new Date(date); return true_day.getDate() + '-' + (true_day.getMonth() + 1) + '-' + true_day.getFullYear(); } var url = window.location.host; // hàm trả về url của trang hiện tại kèm theo port var ws = new WebSocket('ws://' +url + '/ws'); // mở 1 websocket với port 8000 var bookButton = document.getElementById('bookButton'); ws.onopen = function() //khi websocket được mở thì hàm này sẽ được thưc hiện { document.getElementById('warning').innerHTML = 'Connected'; console.log('connected...'); }; ws.onmessage = function(evt) // sự kiện xảy ra khi server nhận dữ liệu từ client { var dataArray = evt.data.split(",");//split message by delimiter into a string array if (dataArray == 'LOGIN SUCCESSFULLY') { alert('LOGIN SUCCESSFULLY'); document.getElementById("loginTable").style.display = "none"; document.getElementById("mainTable").style.display = "block"; } else if (dataArray == 'LOGIN FAILED') { alert('LOGIN FAILED. Please check username or password.'); } /*document.getElementById('warning').innerHTML = dataArray;*/ if (dataArray[0] == "RES") { /* document.getElementById('warning').innerHTML = 'Show History';*/ var table = document.getElementById("historyTable"); 142 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC var row = table.insertRow(1); var cell1 = row.insertCell(0); var cell2 = row.insertCell(1); var cell3 = row.insertCell(2); var cell4 = row.insertCell(3); var cell5 = row.insertCell(4); var cell6 = row.insertCell(5); var cell7 = row.insertCell(6); var cell8 = row.insertCell(7); cell1.innerHTML = "" + dataArray[1] + ""; cell2.innerHTML = "" + correct_date(dataArray[2]) + ""; cell3.innerHTML = "" + dataArray[3] + ""; cell4.innerHTML = "" + dataArray[4] + ""; cell5.innerHTML = "" + dataArray[5] + ""; cell6.innerHTML = "" + correct_date(dataArray[6].substring(0, 10)) + ""; cell7.innerHTML = "" + correct_date(dataArray[7].substring(0, 10)) + ""; cell8.innerHTML = "" + dataArray[8] + ""; } if (dataArray[0] == "PUSH") { /* document.getElementById('warning').innerHTML = 'Show History';*/ var table = document.getElementById("history_room" + dataArray[1] ); var row = table.insertRow(1); var cell1 = row.insertCell(0); var cell2 = row.insertCell(1); var cell3 = row.insertCell(2); cell1.innerHTML = "" + dataArray[2] + ""; cell2.innerHTML = "" + dataArray[3] + ""; cell3.innerHTML = "" + parse_timestamp(dataArray[4]) + ""; 143 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC } if (dataArray[0] == "ADD Done") { alert('Book sucessfully. Please Check your Email and phone to get the access code.'); } if (dataArray[0] == "ADD Fail") { alert('Book Failed. Please Change your check-in time and check-out time.'); } if (dataArray[0] == 'RES_MONITOR') { if (dataArray[1] == '1') { document.getElementById('room1color').style.backgroundColor= "#ff0040"; document.getElementById('room1Sta').innerHTML = 'INUSED'; document.getElementById('room1guest').innerHTML = dataArray[2]; document.getElementById('room1Info').innerHTML ='Expiration date: ' + correct_date(dataArray[4].substring(0, 10)); } else if (dataArray[1] == '2') { document.getElementById('room2color').style.backgroundColor= "#ff0040"; document.getElementById('room2Sta').innerHTML = 'INUSED'; document.getElementById('room2guest').innerHTML = dataArray[2]; document.getElementById('room2Info').innerHTML ='Expiration date: ' + correct_date(dataArray[4].substring(0, 10)); } else if (dataArray[1] == '3') { document.getElementById('room3color').style.backgroundColor= "#ff0040"; document.getElementById('room3Sta').innerHTML = 'INUSED'; document.getElementById('room3guest').innerHTML = dataArray[2]; document.getElementById('room3Info').innerHTML ='Expiration date: ' + correct_date(dataArray[4].substring(0, 10)); } } /* Get Door Status */ 144 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC if (dataArray[0] == 'Door') { if (dataArray[1] == 'Room1') { if (dataArray[2] == '1') { document.getElementById('door1Sta').innerHTML = 'DOOR: OPEN'; } else{ document.getElementById('door1Sta').innerHTML = 'DOOR: LOCKED'; } } if (dataArray[1] == 'Room2') { if (dataArray[2] == '1') { document.getElementById('door2Sta').innerHTML = 'DOOR: OPEN'; } else{ document.getElementById('door2Sta').innerHTML = 'DOOR: LOCKED'; } } if (dataArray[1] == 'Room3') { if (dataArray[2] == '1') { document.getElementById('door3Sta').innerHTML = 'DOOR: OPEN'; } else{ document.getElementById('door3Sta').innerHTML = 'DOOR: LOCKED'; } } } if (dataArray[0] == 'Finger') { if (dataArray[1] == 'room1') { document.getElementById('door1Sta').innerHTML = 'DOOR: Open By Owner'; } if (dataArray[1] == 'room2') { document.getElementById('door2Sta').innerHTML = 'DOOR: Open By Owner'; 145 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC } if (dataArray[1] == 'room3') { document.getElementById('door3Sta').innerHTML = 'DOOR: Open By Owner'; } } }; ws.onclose = function() { // hàm này sẽ được thực hiện khi đóng websocket document.getElementById('warning').innerHTML = 'Disconnected'; }; function addData() { var fullName = document.getElementById('fullName').value; var Birthday = document.getElementById('Birthday').value; var phoneNumber = document.getElementById('phoneNumber').value; var Email = document.getElementById('Email').value; var roomNumber = document.getElementById('roomNumber').value; var startDay = document.getElementById('startDay').value; var endDay = document.getElementById('endDay').value; var password = 0; /* Create random password */ var i; for (i = 0; i < 6; i++) { password = 10*password + Math.floor(Math.random() * 10); if (i == 0 && password == 0 ){ password = 1; } } ws.send('ADD' + ";" + fullName + ";" + Birthday + ";" + phoneNumber + ";" + Email + ";" + roomNumber + ";" + startDay + ";" + endDay + ";" + password); } function fnExcelReport() { var tab_text=""; 146 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC var textRange; var j=0; tab = document.getElementById('historyTable'); // id of table for(j = 0 ; j < tab.rows.length ; j++) { tab_text=tab_text+tab.rows[j].innerHTML+""; //tab_text=tab_text+""; } tab_text=tab_text+""; tab_text= tab_text.replace(/]*>|/g, "");//remove if u want links in your table tab_text= tab_text.replace(/]*>/gi,""); // remove if u want images in your table tab_text= tab_text.replace(/]*>|/gi, ""); // reomves input params var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer { txtArea1.document.open("txt/html","replace"); txtArea1.document.write(tab_text); txtArea1.document.close(); txtArea1.focus(); sa=txtArea1.document.execCommand("SaveAs",true,"Say Thanks to Sumit.xlsx"); } else //other browser not tested on IE 11 sa = window.open('data:application/vnd.ms-excel,' + encodeURIComponent(tab_text)); return (sa); } function cleardata() { ws.send('CLEAR'); alert('Clear Database sucessfully.'); } 147 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC <!-- ========================================================== ========================================================== ========================================================== ===== --> input[type=text], input[type=password] { width: 100%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; box-sizing: border-box; } .container { padding: 16px; } td { vertical-align: top; } #table1, #table2, #table3, #table4, #table5, #table6 { display: none; } body { margin: 0; font-family: Arial, Helvetica, sans-serif; } .mode { width: 220px; text-align: center; padding: 10px; line-height: 4px; font-family: Helvetica; color: black; font-size: 15px; border-radius: 15px; margin: 10px; } .button { 148 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC width: 220px; height: 70px; text-align: center; padding: 10px; line-height: 4px; font-family: Helvetica; color: black; font-size: 15px; border-radius: 15px; margin: 10px; } .button:hover { background-color: green; } .history { width: 140px; height: 40px; text-align: center; padding: 10px; line-height: 4px; font-family: Helvetica; color: black; font-size: 15px; border-radius: 15px; margin: 10px; } .history:hover { background-color: yellow; } .img { width:40px; height:40px; vertical-align: middle } .hero-image { background-image: url(https://res.cloudinary.com/hnalbvaa3/image/upload/v1545106433/wall2.jpg); background-color: #cccccc; height: 100%; 149 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC width: 100%; background-position: center; background-repeat: no-repeat; background-size: cover; position: center; } .hero-text { text-align: center; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: white; } .room { font-size:20px; color: white; background-color: #61BAFFB3; padding: 18px; margin: 30px 200px 20px 10px; border-radius: 15px; width: 7%; text-align: center; } .buttonlogin { background-color: #4CAF50; color: white; padding: 14px 20px; margin: 8px 0; border: none; cursor: pointer; width: 100%; } .buttonlogin:hover { opacity: 0.8; } 150 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH PHỤ LỤC 151 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH

Các file đính kèm theo tài liệu này:

  • pdfdo_an_thiet_ke_va_thi_cong_he_thong_quan_ly_mo_hinh_airbnb_h.pdf
Tài liệu liên quan