Bối cảnh và vấn đề nghiên cứu

Trong bối cảnh công nghệ thông tin và truyền thông phát triển mạnh mẽ, Internet of Things (IoT) đã trở thành xu hướng công nghệ kết nối các thiết bị điện toán nhúng vào đời sống hàng ngày. Việc áp dụng các thiết bị điều khiển từ xa thông qua mạng không dây giúp nâng cao tính tiện nghi, tự động hóa và an toàn trong môi trường gia đình (Smart Home). Trong các ứng dụng nhà thông minh, hệ thống kiểm soát đóng mở cửa tự động và điều khiển thiết bị chiếu sáng là một trong những nhu cầu thực tế được quan tâm hàng đầu.

Đề tài "Điều khiển khóa và thiết bị điện thông qua ESP8266 bằng Webserver" được thực hiện dưới dạng báo cáo dự án tốt nghiệp / đồ án môn học "Internet of Things (IoT) và ứng dụng" tại Khoa Công nghệ Thông tin, hoàn thành ngày 18 tháng 11 năm 2022 tại Khánh Hòa (năm học 2022–2023).

Mục tiêu và nhiệm vụ nghiên cứu

Văn bản xác định rõ ràng mục tiêu và các nhiệm vụ cụ thể:

  1. Mục tiêu nghiên cứu: Thiết kế mạch phần cứng và phần mềm điều khiển thiết bị từ xa phục vụ việc đóng/mở khóa tự động và kiểm soát thiết bị điện.
  2. Nhiệm vụ nghiên cứu:
    • Nghiên cứu môi trường lập trình Arduino IDE, thông số kỹ thuật và phương thức giao tiếp của vi điều khiển tích hợp Wi-Fi NodeMCU ESP8266 cùng các linh kiện ngoại vi liên quan.
    • Thiết kế giao diện và cơ chế hoạt động của máy chủ Web (Webserver) tích hợp giao tiếp thời gian thực, có khả năng điều khiển thông qua trình duyệt trên điện thoại thông minh.

Đối tượng và phạm vi nghiên cứu

  • Đối tượng nghiên cứu: Module vi điều khiển ESP8266 (NodeMCU 1.0), động cơ điều khiển góc Micro Servo SG90 9g, màn hình hiển thị LCD 1602 kèm module giao tiếp I2C, bảng đèn LED 12 bóng và module rơ-le (Relay).
  • Phạm vi nghiên cứu: Thiết kế mạch phần cứng điều khiển thiết bị điện và xây dựng Webserver cục bộ kết nối qua Wi-Fi Access Point/Station trên điện thoại để điều khiển thiết bị khóa và thiết bị chiếu sáng.

Cơ sở lý thuyết và phương pháp

Khung lý thuyết và khái niệm nền tảng

  • Internet of Things (IoT): Hệ thống các thiết bị điện toán, máy móc cơ khí và kỹ thuật số được gắn mã định danh duy nhất (UID) và có khả năng truyền dữ liệu qua mạng mà không yêu cầu tương tác trực tiếp giữa người với người hoặc người với máy tính. Báo cáo điểm lại các mốc lịch sử chính:
    • Năm 1968: Kỹ sư Dick Morley chế tạo Bộ điều khiển lập trình logic (PLC), đặt nền tảng cho tự động hóa sản xuất.
    • Năm 1999: Kevin Ashton (Giám đốc Phòng thí nghiệm tự động nhận diện tại MIT) lần đầu đưa ra khái niệm "Internet of Things" trong bài thuyết trình về công nghệ RFID.
    • Năm 2016: Xuất hiện thuật ngữ IIoT (Industrial Internet of Things) ứng dụng chuyên sâu cho môi trường sản xuất công nghiệp.
  • Các lĩnh vực ứng dụng của IoT:
    • Nhà thông minh (Smart Home): Điều khiển bật/tắt thiết bị chiếu sáng (LED), hẹn giờ và tự động hóa các thiết bị gia dụng (máy điều hòa, bình nóng lạnh).
    • Thiết bị đeo (Wearables): Các sản phẩm theo dõi sức khỏe và hỗ trợ đa phương tiện như Apple Watch, Sony Smart B-Trainer.
    • Thành phố thông minh (Smart City): Hệ thống đo lường và tiết kiệm nước bằng đồng hồ thông minh, hệ thống camera và đèn tín hiệu điều tiết giao thông.
    • Lưới điện thông minh (Smart Grid): Nâng cao hiệu quả giám sát và tối ưu hóa an toàn điện.

Phương pháp nghiên cứu

Đề tài kết hợp hai phương pháp nghiên cứu chính:

  1. Phương pháp nghiên cứu lý thuyết: Phân tích tài liệu kỹ thuật, sơ đồ chân GPIO, thông số điện áp và các giao thức truyền thông của ESP8266 (UART, I2C, SPI, PWM); tìm hiểu cách thức tổ chức trang Web nhúng, giao thức HTTP và giao thức WebSocket.
  2. Phương pháp nghiên cứu thực nghiệm (Thiết kế hệ thống): Lắp ráp mạch phần cứng hoàn chỉnh, viết chương trình điều khiển trên Arduino IDE, nạp mã nguồn vào bộ nhớ Flash của vi điều khiển và tiến hành kiểm thử các chức năng điều khiển đóng/mở khóa, hiển thị LCD và lưu trữ cấu hình Wi-Fi vào bộ nhớ EEPROM.

Thiết kế và triển khai hệ thống

1. Kiến trúc phần cứng và danh mục linh kiện

Hệ thống sử dụng module trung tâm NodeMCU ESP8266 kết nối với các thiết bị ngoại vi qua các chân GPIO chuyên dụng:

  • NodeMCU ESP8266 (ESP-12E Module): Sử dụng vi xử lý Tensilica L106 32-bit xung nhịp 80 MHz, bộ nhớ Flash 1 MB, 17 chân GPIO (trong đó các chân 6–11 nối Flash nội bộ, cung cấp 11 chân khả dụng), 1 kênh ADC 10-bit, tích hợp chuẩn truyền thông Wi-Fi 802.11 b/g/n.
  • Động cơ Micro Servo SG90 (180 độ): Điện áp hoạt động 4.8V – 6.0V DC, tốc độ 0.1 giây/60° (ở 6V), mô-men xoắn 1.5 kg/cm, khối lượng 9g. Sử dụng 3 dây dẫn: Dây cam (tín hiệu xung PWM), Dây đỏ (nguồn VCC), Dây đen (nối đất GND). Được kết nối vào chân D4 của ESP8266 để điều khiển chốt khóa.
  • Màn hình LCD 1602 tích hợp Module I2C: Màn hình 16 ký tự x 2 dòng. Module I2C sử dụng chip chuyển đổi giúp tối ưu hóa số chân giao tiếp từ 6 chân dữ liệu/điều khiển thông thường xuống còn 2 chân tín hiệu (SCL, SDA) với địa chỉ mặc định 0x27, tích hợp biến trở xoay chỉnh độ tương phản.
  • Thiết bị chiếu sáng: 02 bảng đèn LED 12 bóng kết nối với các chân điều khiển D5 và D8.
STT Tên thiết bị / linh kiện Số lượng Đơn giá (VND) Thành tiền (VND)
1 NodeMCU ESP8266 1 85.000 85.000
2 Micro Servo 9g SG90 1 45.000 45.000
3 Dây nối hai đầu đực - đực (ngắn) 1 bộ 30.000 30.000
4 Dây nối hai đầu đực - cái (dài) 2 bộ 35.000 70.000
5 Dây cáp mini USB 1 sợi 20.000 20.000
6 Module Relay 2 kênh 1 45.000 45.000
7 Màn hình hiển thị LCD 1602 + Module I2C 1 bộ 70.000 70.000
8 Bảng đèn LED 12 bóng 2 20.000 40.000

2. Thiết kế phần mềm và cấu trúc điều khiển

Hệ thống phần mềm được xây dựng hoàn toàn bằng ngôn ngữ C/C++ trên môi trường Arduino IDE và nhúng mã HTML/CSS/JavaScript trong bộ nhớ chương trình (PROGMEM) của ESP8266:

  • Giao thức Webserver & WebSocket:
    • Khởi tạo máy chủ HTTP tại cổng 80 (ESP8266WebServer webServer(80)) để phục vụ mã giao diện Web.
    • Khởi tạo máy chủ truyền nhận dữ liệu thời gian thực hai chiều qua WebSocket tại cổng 81 (WebSocketsServer webSocket(81)).
  • Cấu hình mạng Wi-Fi và Bộ nhớ EEPROM:
    • ESP8266 thiết lập địa chỉ IP tĩnh cho chế độ Access Point (ip_ap: 192.168.1.4, gateway: 192.168.1.1, subnet: 255.255.255.0) và hỗ trợ kết nối mạng nội bộ sẵn có.
    • Cấu hình Wi-Fi (Tên mạng SSID, Mật khẩu Password, Chế độ Ẩn/Hiện) được ghi trực tiếp vào bộ nhớ EEPROM (SSID lưu từ byte 0 đến 31, Password lưu từ byte 32 đến 95). Dữ liệu cấu hình được giữ nguyên khi mất nguồn hoặc khởi động lại.
  • Quy trình đóng/mở và đồng bộ trạng thái:
    1. Khi người dùng nhấn nút LOCK trên giao diện Web, một bản tin WebSocket chứa lệnh "unlock" được gửi về vi điều khiển.
    2. Vi điều khiển chuyển góc quay Servo SG90 về vị trí mở khóa (myservo.write(0)), đồng thời kích hoạt chân D5 và D8 lên mức logic cao (HIGH) để bật sáng hệ thống đèn LED.
    3. Màn hình LCD in thông điệp hướng dẫn. Sau khoảng thời gian 5 giây được định thời qua bộ đếm timer_unlock, vi điều khiển tự động quay Servo về vị trí đóng khóa (myservo.write(180)), LCD hiển thị thông báo "close the door!", trong khi đèn LED vẫn tiếp tục duy trì trạng thái sáng.
    4. Trạng thái kết nối (Connection status) được kiểm tra định kỳ mỗi 500ms thông qua hàm updateStateD() và bộ hẹn giờ timer_update, gửi gói tin định dạng JSON về trình duyệt để cập nhật biểu tượng trạng thái LED nhấp nháy trên giao diện.

Nội dung chính theo từng chương

Sơ lược về đề tài

Trình bày bối cảnh ra đời của đề tài xuất phát từ sự phát triển của công nghệ 4.0 và nhu cầu điều khiển khóa cửa tự động qua Internet/smartphone. Phần này xác định mục tiêu, nhiệm vụ, đối tượng, phạm vi nghiên cứu và phương pháp tiếp cận của dự án.

Chương I: Tổng quan về Internet of Things (IoT)

  • Định nghĩa khái niệm IoT là mạng lưới kết nối các thực thể vật lý thông qua hạ tầng mạng máy tính và gán định danh duy nhất (UID).
  • Tóm lược lịch sử phát triển qua 3 mốc quan trọng (1968 - PLC, 1999 - Khái niệm IoT/RFID, 2016 - IIoT).
  • Khảo sát các mô hình ứng dụng tiêu biểu: Nhà thông minh (Smart Home), Thiết bị đeo tay (Apple Watch, Sony Smart B-Trainer), Thành phố thông minh (Smart City với giải pháp tiết kiệm nước, phân luồng giao thông) và Lưới điện thông minh (Smart Grid).

Chương II: Tổng quan và cách cài đặt Arduino IDE

  • Trình bày kiến trúc phần mềm Arduino IDE: mã nguồn mở, hoạt động trên nền Java, hỗ trợ biên dịch mã nguồn C/C++ thành tập tin định dạng thập lục phân (Hex file) để nạp vào bộ vi điều khiển thông qua cổng giao tiếp nối tiếp/USB.
  • Cấu trúc tiêu chuẩn của một chương trình Arduino gồm hai khối hàm cơ bản: setup() (khởi tạo cấu hình ban đầu, chạy một lần duy nhất) và loop() (chương trình chính lặp lại vô hạn).
  • Hướng dẫn chi tiết quy trình cài đặt board ESP8266 trên Arduino IDE thông qua việc khai báo URL bổ sung trong phần Preferences và cài đặt gói board ESP8266 by ESP8266 Community từ Boards Manager.

Chương III: Dự án IoT điều khiển khóa và thiết bị điện thông qua Node MCU ESP8266 bằng Webserver

  • Mô tả chi tiết cấu tạo, sơ đồ chân và thông số kỹ thuật của NodeMCU ESP8266, động cơ Servo SG90, màn hình LCD 1602 cùng module I2C.
  • Lập bảng dự toán chi phí chi tiết cho các linh kiện phần cứng của mô hình.
  • Trình bày các bước vận hành hệ thống:
    • Nạp chương trình (Upload) vào vi điều khiển và theo dõi địa chỉ IP phản hồi qua Serial Monitor.
    • Giao diện điều khiển Webserver: Thao tác mở khóa (LOCK $\rightarrow$ UNLOCK), cấu hình thông số mạng Access Point (SSID, Password, chế độ ẩn/hiện), lưu thông số vào EEPROM (nút SAVE), khởi động lại vi điều khiển (nút RESTART) và thiết lập lại mặc định (nút RESET).
  • Cung cấp toàn bộ mã nguồn chương trình điều khiển Arduino C++ kết hợp mã giao diện Web HTML/CSS/JavaScript và cơ chế giao tiếp WebSocket.

Kết quả và đóng góp

Kết quả chính đạt được

  1. Chế tạo thành công mô hình vật lý: Hệ thống phần cứng hoạt động ổn định, kết nối chính xác giữa vi điều khiển NodeMCU ESP8266, màn hình LCD 1602 qua giao tiếp I2C 2 dây, động cơ Servo SG90 và bảng đèn LED chiếu sáng.
  2. Xây dựng hoàn chỉnh Webserver nhúng:
    • Trang Web điều khiển có giao diện đồ họa trực quan (CSS tùy biến, hỗ trợ hiển thị tốt trên trình duyệt di động).
    • Tích hợp giao thức WebSocket cho phép truyền nhận dữ liệu phản hồi tức thì với độ trễ thấp, không cần tải lại toàn bộ trang Web.
    • Cơ chế tự động khóa an toàn: Sau khi nhận lệnh mở khóa 5 giây, động cơ Servo tự động đóng lại chốt cửa và LCD cập nhật chuỗi thông báo.
  3. Quản lý cấu hình mạng linh hoạt: Cho phép người dùng thay đổi SSID, mật khẩu và chế độ hiển thị của mạng Wi-Fi trực tiếp trên giao diện trình duyệt mà không cần can thiệp nạp lại mã nguồn nhờ khả năng lưu trữ trên bộ nhớ EEPROM.

Đóng góp của đề tài

  • Cung cấp giải pháp mẫu hoàn chỉnh (bao gồm sơ đồ linh kiện, bảng giá chi tiết, mã nguồn Arduino và giao diện Web nhúng) cho bài toán điều khiển thiết bị thông minh chi phí thấp.
  • Minh họa rõ ràng quy trình kết hợp giữa phần cứng nhúng (Embedded Hardware), mạng truyền thông Wi-Fi và lập trình giao diện Web thời gian thực phục vụ đào tạo thực hành môn học IoT.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế

  • Hệ thống hoạt động chủ yếu trong phạm vi mạng cục bộ (Local Network) hoặc thông qua điểm truy cập do ESP8266 tự phát (Access Point), chưa hỗ trợ điều khiển qua mạng Internet diện rộng từ xa khi người dùng ở ngoài vùng phủ sóng Wi-Fi.
  • Cơ chế bảo mật và xác thực người dùng trên giao diện Web chưa được tích hợp các chuẩn mã hóa nâng cao hoặc phân quyền tài khoản chi tiết.

Hướng nghiên cứu tiếp

  • Mở rộng tích hợp các dịch vụ đám mây (Cloud IoT) hoặc giao thức MQTT để cho phép giám sát và điều khiển thiết bị từ bất kỳ đâu qua Internet.
  • Tích hợp thêm các loại cảm biến phụ trợ (cảm biến chuyển động PIR, cảm biến nhiệt độ, cảm biến phát hiện khí gas) và module rơ-le công suất lớn để điều khiển các thiết bị điện 220V trong gia đình.
  • Bổ sung các giải pháp xác thực bảo mật đa yếu tố hoặc ứng dụng di động độc lập.

Giá trị tham khảo

Báo cáo đề tài có giá trị tham khảo thiết thực cho:

  • Sinh viên ngành Công nghệ Thông tin, Kỹ thuật Điều khiển - Tự động hóa và Điện tử Viễn thông: Làm tài liệu tham khảo cho các môn học như Internet of Things, Hệ thống nhúng, Lập trình vi điều khiển.
  • Người nghiên cứu và phát triển mô hình DIY Smart Home: Tham khảo cách kết nối màn hình I2C LCD, điều khiển góc quay Servo chính xác qua PWM, và đặc biệt là kỹ thuật nhúng giao diện Web vào bộ nhớ Flash kết hợp điều khiển qua WebSocket trên dòng chip ESP8266.

Câu hỏi thường gặp

1. Vi điều khiển ESP8266 đảm nhận những vai trò gì trong hệ thống này?

ESP8266 đóng vai trò là bộ điều khiển trung tâm (MCU 32-bit): vừa phát sóng Wi-Fi (Access Point) và nhận kết nối mạng, vừa làm máy chủ HTTP phục vụ giao diện trang Web (cổng 80), quản lý kênh giao tiếp hai chiều WebSocket (cổng 81), đồng thời xuất tín hiệu điều khiển trực tiếp tới động cơ Servo SG90 (chân D4), bật tắt đèn LED (chân D5, D8) và truyền dữ liệu hiển thị lên màn hình LCD 1602 qua giao thức I2C.

2. Giao thức WebSocket mang lại ưu điểm gì so với HTTP thông thường trong đề tài?

Giao thức WebSocket (cổng 81) duy trì một kết nối liên tục hai chiều giữa trình duyệt điện thoại và ESP8266. Nhờ đó, các lệnh điều khiển như đóng/mở khóa (unlock) hoặc trạng thái nhấp nháy đèn báo kết nối (Connection status) được truyền nhận theo thời gian thực mà không cần trình duyệt phải gửi yêu cầu HTTP liên tục hoặc tải lại trang.

3. Quy trình tự động khóa cửa hoạt động như thế nào sau khi mở?

Khi người dùng bấm mở khóa trên Web, vi điều khiển quay Servo SG90 về góc mở (0°), bật hệ thống đèn LED trên chân D5 và D8, LCD hiển thị thông báo. Thông qua bộ đếm thời gian timer_unlock, sau một khoảng trễ 5 giây, vi điều khiển tự động điều khiển Servo quay về góc đóng (180°) và cập nhật dòng chữ "close the door!" lên màn hình LCD, đảm bảo cửa luôn được chốt an toàn.

4. Thông tin mạng Wi-Fi (SSID và Mật khẩu) được lưu trữ và khôi phục ra sao?

Các thông tin SSID, mật khẩu và chế độ ẩn/hiện mạng do người dùng cấu hình trên trang Web được gửi về server qua endpoint /writeEEPROMap và ghi thẳng vào bộ nhớ EEPROM của ESP8266. Mỗi khi thiết bị khởi động lại, hàm setup() sẽ đọc dữ liệu từ các ô nhớ EEPROM tương ứng để khôi phục cấu hình mạng mà không bị mất dữ liệu.

5. Tại sao cần kết hợp Module I2C với màn hình LCD 1602?

Màn hình LCD 1602 tiêu chuẩn cần tối thiểu 6 chân vi điều khiển để điều khiển và truyền dữ liệu (RS, EN, D4–D7). Module I2C LCD sử dụng mạch chuyển đổi giúp rút gọn giao tiếp chỉ còn 2 chân tín hiệu nối tiếp (SCL, SDA), giúp tiết kiệm tài nguyên chân GPIO hạn chế trên ESP8266 cho các thiết bị ngoại vi khác.


Kết luận

Đề tài "Điều khiển khóa và thiết bị điện thông qua ESP8266 bằng Webserver" đã hoàn thành việc nghiên cứu lý thuyết tổng quan về IoT, môi trường lập trình Arduino IDE và ứng dụng thực tế trên phần cứng vi điều khiển ESP8266. Nhóm tác giả đã thiết kế và thử nghiệm thành công mô hình điều khiển khóa cửa tự động kết hợp hệ thống chiếu sáng thông qua giao diện Web nhúng thời gian thực trên điện thoại. Báo cáo cung cấp đầy đủ thông số kỹ thuật, bảng dự toán linh kiện và mã nguồn chi tiết, tạo cơ sở tốt cho việc mở rộng các tính năng nhà thông minh trong các giai đoạn tiếp theo.