Ví dụ ESP32 WebRTC Hướng dẫn giao diện đồng hồ thời gian thực
Tổng quan
Ví dụ WebRTC cung cấp một giao diện đồng hồ thời gian thực toàn diện cho các dự án ESP32 của bạn. Được thiết kế cho nền tảng giáo dục ESP32 với khả năng RTC tích hợp, các tính năng quản lý thời gian được nâng cao và tích hợp liền mạch với hệ sinh thái giáo dục. Bạn có thể hiển thị thông tin đồng hồ thời gian thực, đồng bộ thời gian từ trình duyệt web sang Arduino, và theo dõi sự chênh lệch thời gian thông qua giao diện web trực quan.

Các tính năng
- Hiển thị đồng hồ thời gian thực: Hiển thị thời gian RTC của ESP32 hiện tại với cập nhật tự động
- So sánh thời gian thiết bị: Hiển thị thời gian của trình duyệt web và thiết bị cùng với thời gian ESP32
- Đồng bộ thời gian bằng một cú nhấp chuột: Đồng bộ RTC ESP32 với thời gian của trình duyệt web ngay lập tức
- Chỉ báo trực quan sự chênh lệch thời gian: Hiển thị sự lệch thời gian giữa các thiết bị bằng phút
- Định dạng thời gian hai dòng: Định dạng 12 giờ theo AM/PM với hiển thị đầy đủ ngày tháng
- Giao diện gradient hiện đại: Bố cục dạng thẻ với thiết kế đáp ứng
- Giao tiếp WebSocket: Cập nhật thời gian thực hai chiều mà không cần làm mới trang
- Đồng bộ theo múi giờ: Sử dụng thời gian của thiết bị địa phương để đồng bộ chính xác
- Giám sát trạng thái kết nối: Dấu hiệu trực quan cho trạng thái kết nối WebSocket
- Yêu cầu thời gian tự động: Yêu cầu thời gian ESP32 hiện tại khi tải trang
Phần cứng cần chuẩn bị
| 1 | × | mô-đun phát triển ESP-WROOM-32 | ||
| 1 | × | Alternatively, ESP32 Uno-form board | ||
| 1 | × | Alternatively, ESP32 S3 Uno-form board | ||
| 1 | × | USB Cable Type-A to Type-C (for USB-A PC) | ||
| 1 | × | USB Cable Type-C to Type-C (for USB-C PC) | ||
| 1 | × | Real-Time Clock DS3231 Module | ||
| 1 | × | CR2032 battery | ||
| 1 | × | dây jumper | ||
| 1 | × | breadboard | ||
| 1 | × | (Khuyến nghị) Screw Terminal Expansion Board for ESP32 | ||
| 1 | × | (Khuyến nghị) Breakout Expansion Board for ESP32 | ||
| 1 | × | (Khuyến nghị) Power Splitter for ESP32 |
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | ||
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image
Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.
ESP32 - Mô-đun RTC DS3231
| DS1307 RTC Module | ESP32 |
|---|---|
| Vin | 3.3V |
| GND | GND |
| SDA | GPIO21 |
| SCL | GPIO22 |
Các bước nhanh
Hãy làm theo các hướng dẫn này từng bước một:
- Nếu đây là lần đầu tiên bạn sử dụng ESP32, hãy tham khảo bài hướng dẫn về thiết lập môi trường cho ESP32 trong Arduino IDE (ESP32 - Cài Đặt Phần Mềm).
- Kết nối board ESP32 với máy tính bằng cáp USB.
- Mở Arduino IDE trên máy tính của bạn.
- Chọn board ESP32 phù hợp (ví dụ ESP32 Dev Module) và cổng COM.
- Đi tới biểu tượng Thư viện ở thanh bên trái của Arduino IDE.
- Tìm kiếm "DIYables ESP32 WebApps", sau đó tìm thư viện DIYables ESP32 WebApps do DIYables
- Nhấn nút Cài đặt để cài đặt thư viện.

- Bạn sẽ được yêu cầu cài đặt một số phụ thuộc thư viện khác.
- Nhấp vào nút Cài đặt Tất cả để cài đặt tất cả các phụ thuộc thư viện.

- Tìm kiếm “RTClib”, sau đó tìm thư viện RTC của Adafruit.
- Nhấn vào nút Cài đặt để cài đặt thư viện RTC.

- Bạn có thể được yêu cầu cài đặt các phụ thuộc cho thư viện.
- Cài đặt toàn bộ các phụ thuộc cho thư viện bằng cách nhấp vào nút Cài đặt Tất cả.

- Trên Arduino IDE, Chuyển tới Tệp Ví dụ DIYables ESP32 WebApps WebRTC ví dụ, hoặc sao chép mã ở trên và dán nó vào trình soạn thảo của Arduino IDE
- Cấu hình thông tin xác thực WiFi trong mã bằng cách cập nhật các dòng này:
- Nhấp nút Tải lên trên Arduino IDE để tải mã lên Arduino.
- Mở Trình theo dõi Serial trên Arduino IDE
- Chờ kết nối với WiFi và các thông tin WiFi được in ra trên Serial Monitor.
- Xem kết quả trên Serial Monitor. Nó trông như dưới đây
- Nếu bạn không thấy gì, hãy khởi động lại bo mạch ESP32.
Sử dụng Giao diện Web
- Mở trình duyệt web trên máy tính hoặc thiết bị di động của bạn đang kết nối với cùng một mạng WiFi
- Nhập địa chỉ IP được hiển thị trong Serial Monitor vào trình duyệt web
- Ví dụ: http://192.168.1.100
- Bạn sẽ thấy trang chủ như hình dưới đây:

- Nhấp vào liên kết Web RTC, bạn sẽ thấy giao diện người dùng của ứng dụng Web RTC như dưới đây:

- Hoặc bạn cũng có thể truy cập trang này trực tiếp bằng địa chỉ IP kèm theo /web-rtc. Ví dụ: http://192.168.1.100/web-rtc
- Bạn sẽ thấy giao diện Web RTC được hiển thị:
- Thời gian của Arduino: Thời gian hiện tại từ RTC của Arduino
- Thời gian thiết bị của bạn: Thời gian hiện tại từ trình duyệt web/thiết bị của bạn
- Hiệu thời gian: Sự khác biệt giữa hai thời điểm, tính bằng phút
- Nút đồng bộ thời gian ESP32: Nhấn để đồng bộ thời gian ESP32 với thiết bị của bạn
Đồng bộ hóa thời gian
- Nhấp vào nút "Đồng bộ thời gian ESP32" để đồng bộ thời gian RTC của Arduino với thời gian địa phương trên thiết bị của bạn

- Quá trình đồng bộ hóa:
- Lấy thời gian địa phương hiện tại của thiết bị bạn (không phải UTC)
- Điều chỉnh cho lệch múi giờ để đảm bảo đồng bộ thời gian địa phương chính xác
- Gửi dấu thời gian tới Arduino thông qua WebSocket
- Arduino cập nhật RTC của nó bằng thời gian nhận được
- Giao diện web cập nhật để hiển thị thời gian đã đồng bộ
Giải thích mã nguồn
Các Thành Phần Chính
Hàm Thiết Lập
Các hàm gọi lại
Hàm gọi lại đồng bộ thời gian:
Gọi lại cho yêu cầu thời gian:
Vòng lặp chính
Các phương thức API
Các phương thức của lớp DIYablesWebRTCPage
onTimeSyncFromWeb(callback)
- Thiết lập hàm gọi lại để xử lý đồng bộ thời gian từ trình duyệt web
- Tham số: void (*callback)(unsigned long unixTimestamp)
- Cách sử dụng: Được gọi khi người dùng nhấp vào nút "Đồng bộ thời gian ESP32"
yêu cầu đúng giờ tới Web (callback)
- Thiết lập hàm gọi lại để xử lý các yêu cầu thời gian từ trình duyệt web
- Tham số: void (*callback)()
- Cách sử dụng: Được gọi khi giao diện web yêu cầu thời gian hiện tại của ESP32
sendTimeToWeb(năm, tháng, ngày, giờ, phút, giây)
- Gửi thời gian hiện tại của ESP32 tới giao diện web
- Thông số:
- year: Năm hiện tại (ví dụ: 2025)
- month: Tháng hiện tại (1-12)
- day: Ngày hiện tại của tháng (1-31)
- hour: Giờ hiện tại (0-23)
- minute: Phút hiện tại (0-59)
- second: Giây hiện tại (0-59)
Giao tiếp WebSocket
Tin nhắn từ Web đến Arduino
- RTC:GET_TIME - Yêu cầu thời gian hiện tại của ESP32
- RTC:SYNC:[timestamp] - Đồng bộ thời gian ESP32 với Unix timestamp
Các tin nhắn từ ESP32 đến Web
- DATETIME:YYYY,MM,DD,HH,MM,SS - Gửi các thành phần thời gian hiện tại của ESP32
Khắc phục sự cố
Các vấn đề phổ biến
- Chênh lệch thời gian kéo dài vài giờ
- Vấn đề: ESP32 hiển thị thời gian lệch vài giờ so với thời gian của thiết bị
- Nguyên nhân: Thường là vấn đề về múi giờ hoặc RTC chưa được khởi tạo đúng
- Giải pháp:*
- Nhấp vào nút "Sync ESP32 Time" để đồng bộ lại thời gian.
- Kiểm tra xem RTC có được khởi tạo đúng trong setup() không?
- Kiểm tra xem kết nối WiFi có ổn định không
- Lỗi "Mô-đun RTC không được tìm thấy"
- Vấn đề: mô-đun RTC không được phát hiện trong quá trình khởi tạo
- Nguyên nhân: Mô-đun DS3231 được kết nối không đúng hoặc bị hỏng
- Giải pháp:
- Kiểm tra kết nối I2C (SDA tới GPIO 21, SCL tới GPIO 22)
- Kiểm tra kết nối nguồn (VCC đến 3.3V/5V, GND về GND)
- Kiểm tra bằng máy quét I2C để phát hiện địa chỉ của mô-đun
- Hãy thử các mô-đun DS3231 khác nếu có.
- Lỗi "Không kết nối với Arduino"
- Vấn đề: Lỗi khi nhấn nút đồng bộ
- Nguyên nhân: Kết nối WebSocket thất bại
- Giải pháp:
- Kiểm tra xem địa chỉ IP của ESP32 có đúng không
Làm mới trang web
- Xác nhận ESP32 đã được kết nối với cùng một mạng WiFi
- Kiểm tra cài đặt tường lửa
- Thời gian ngừng cập nhật
- Lỗi: Hiển thị thời gian bị treo hoặc không cập nhật
- Nguyên nhân: Kết nối WebSocket bị mất hoặc RTC ngừng hoạt động
- Giải pháp:
- Làm mới trang web
- Kiểm tra trạng thái kết nối WebSocket
- Khởi động lại ESP32 nếu RTC ngừng phản hồi
4. Sự chênh lệch thời gian lớn (ngày/tháng)
- Vấn đề: Chênh lệch thời gian hiển thị lên tới hàng nghìn phút
- Nguyên nhân: RTC chưa được thiết lập đúng hoặc đã lệch đáng kể
- Giải pháp: Nhấn nút đồng bộ nhiều lần và kiểm tra các hàm gọi lại
Mẹo gỡ lỗi
Bật gỡ lỗi nối tiếp:
Kiểm tra khởi tạo RTC:
Cách sử dụng nâng cao
Ghi nhận dữ liệu với dấu thời gian
Các hành động được lên lịch
Tích hợp nhiều ứng dụng web
Ứng dụng và các trường hợp sử dụng
Các dự án giáo dục
- Học quản lý thời gian: Dạy cho học sinh về RTC (đồng hồ thời gian thực), việc theo dõi thời gian và đồng bộ hóa
- Các khái niệm thời gian IoT: Trình diễn đồng bộ hóa thời gian mạng trong các hệ thống IoT
- Các dự án ghi nhật ký dữ liệu: Thêm dấu thời gian cho các phép đo của cảm biến và các thí nghiệm
- Các hệ thống lập lịch: Tạo các hệ thống tự động hóa và điều khiển dựa trên thời gian
Các ứng dụng thực tế
- Tự động hóa tại nhà: Lên lịch cho đèn, hệ thống tưới nước, hoặc các thiết bị khác
- Thu thập dữ liệu: Ghi nhận dấu thời gian của các phép đo cảm biến để phân tích
- Ghi nhận sự kiện: Ghi lại thời điểm xảy ra các sự kiện cụ thể một cách chính xác
- Giám sát từ xa: Kiểm tra trạng thái thiết bị và thời gian cập nhật lần cuối từ xa
Lợi ích của giáo dục STEM
- Khái niệm múi giờ: Hiểu thời gian địa phương so với UTC và cách xử lý múi giờ
- Giao tiếp mạng: Học cách giao tiếp qua WebSocket và cập nhật thời gian thực
- Tích hợp phần cứng: Kết hợp giao diện web với chức năng RTC của phần cứng
- Giải quyết vấn đề: Gỡ lỗi các vấn đề về thời gian và đồng bộ hóa
Thông số kỹ thuật
Sử dụng bộ nhớ
- Bộ nhớ Flash: ~8KB dành cho chức năng WebRTC
- SRAM: ~2KB trong quá trình vận hành
- Bộ đệm WebSocket: ~1KB cho xử lý tin nhắn
Đặc tính hiệu suất
- Tần suất cập nhật: Cập nhật thời gian thực qua WebSocket
- Độ chính xác đồng bộ: Thông thường trong khoảng 1-2 giây
- Chi phí mạng: ~50 byte cho mỗi tin nhắn cập nhật thời gian
- Thời gian phản hồi: <100 ms cho các thao tác đồng bộ thời gian
Tương thích
- Các bo mạch ESP32: ESP32, Ứng dụng Web ESP32
- Các trình duyệt: Tất cả các trình duyệt hiện đại có hỗ trợ WebSocket
- Các thiết bị: Máy tính để bàn, máy tính bảng và thiết bị di động
- Các mạng: Các mạng WiFi có kết nối Internet
Tóm tắt
Ví dụ WebRTC minh họa cách thực hiện:
- Tạo giao diện đồng hồ thời gian thực dựa trên web
- Đồng bộ hóa RTC của ESP32 với thời gian của trình duyệt web
- Hiển thị thông tin thời gian ở định dạng thân thiện với người dùng
- Giám sát sự chênh lệch thời gian và trạng thái kết nối
- Tích hợp chức năng thời gian với các ứng dụng web khác
- Xây dựng các dự án IoT giáo dục với các tính năng quản lý thời gian
Ví dụ này rất phù hợp với các dự án yêu cầu thời gian chính xác, ghi dữ liệu có dấu thời gian, tự động hóa theo lịch trình và các minh họa giáo dục về khái niệm đồng bộ hóa thời gian trong các hệ thống IoT.