Đồng bộ giờ và thời tiết theo vị trí cho đồng hồ
- Trung cấp
- Bài viết
- Từ 16 tuổi
- 7 phút đọc

Đồng hồ lấy giờ Internet bằng SNTP, rồi dùng tọa độ đã lưu để hỏi dịch vụ thời tiết. Thiết kế nên quản lý giờ, múi giờ, vị trí và độ mới dữ liệu riêng biệt. Nhờ vậy, mất mạng không làm mặt giờ biến mất và thời tiết cũ có dấu nhận biết.
Mục lục
- Vị trí đã xác nhận
- Dữ liệu thời tiết
- Đồng hồ
Bạn sẽ học được gì
- Tách đồng bộ thời gian khỏi cách hiển thị giờ địa phương.
- Chuyển địa danh thành tọa độ và lưu lựa chọn đã xác nhận.
- Thiết kế việc tải thời tiết có thời hạn chờ và trạng thái dữ liệu cũ.
Cần biết trước
Nên đọc về kiến trúc đồng hồ và vòng lặp Arduino; cần biết cách đọc dữ liệu JSON.
Giờ Internet khác múi giờ thế nào?
SNTP dùng phản hồi từ máy chủ thời gian để đặt giờ hệ thống; múi giờ quyết định cách biểu diễn giờ tại địa phương. Tài liệu Espressif hướng dẫn cấu hình biến môi trường TZ, gọi tzset() rồi dùng localtime() để lấy giờ địa phương.
Trong thiết kế này, dữ liệu giờ được lưu và trao đổi theo thời gian chuẩn; chỉ đổi sang giờ địa phương khi vẽ. Múi giờ của API thời tiết và cấu hình múi giờ firmware phải cùng chỉ một khu vực. Nếu dịch vụ trả tên múi giờ dạng IANA, hãy chuyển bằng bảng ánh xạ được kiểm tra hoặc chỉ hỗ trợ danh sách khu vực đã cấu hình. Không đưa thẳng tên đó vào hàm đòi chuỗi quy tắc POSIX.
Sau mỗi lần đồng bộ thành công, ghi nhận thời điểm đồng bộ. Mất mạng thì tiếp tục đọc đồng hồ cục bộ. Khi khởi động mà chưa có giờ hợp lệ, hiện dấu chưa đặt giờ và cho phép cài lại; đừng đưa một ngày mặc định lên như thời gian thật. Bộ định thời RTC của chip bị đặt lại khi cấp nguồn lại, nên yêu cầu giữ giờ sau ngắt hết nguồn cần phần cứng dự phòng riêng.
Với báo thức, thiết kế đề xuất lưu giờ hẹn theo giờ địa phương và các ngày lặp, rồi tính lần hẹn kế tiếp từ cấu hình múi giờ hiện tại. Mất mạng khi giờ vẫn hợp lệ thì tiếp tục kiểm lịch. Nếu chưa có giờ hợp lệ sau mất nguồn, hiện “Chờ đặt giờ”; cho nhập ngày, giờ và múi giờ bằng nút rồi mới kích hoạt lịch.
Sau đồng bộ hoặc đổi múi giờ, tính lại lần hẹn nhưng giữ khóa lần đã xử lý. Chính sách bản đầu bỏ qua giờ hẹn bị vượt khi chỉnh tiến; khi chỉnh lùi hoặc giờ địa phương lặp lại, một lần hẹn chỉ được reo một lần. Báo lại dùng bộ đếm thời gian trôi qua riêng, để chỉnh giờ lịch không tự kéo dài khoảng chờ. Bài firmware giải thích cách lưu lịch và các trạng thái chuông.
- Giờ đồng bộ
- Quy tắc múi giờ
- Giờ để hiển thị
Định vị khu vực cho đồng hồ bằng cách nào?
Với đồng hồ đặt cố định, bản đầu đề xuất chọn địa danh thay vì tự thêm GPS. API geocoding nhận từ khóa tìm kiếm và trả danh sách địa danh khớp. Kết quả có tên, tọa độ và thông tin múi giờ để ứng dụng lựa chọn.
Quy trình cài đặt đề xuất là nhập tên địa phương, xem các kết quả kèm khu vực hành chính, chọn đúng nơi rồi lưu. Cần có bước xác nhận để tránh chọn nhầm địa danh trùng tên. Lưu tên để hiển thị và tọa độ để gọi thời tiết; nếu tìm không thấy, cho sửa từ khóa hoặc nhập tọa độ trong trang cài đặt nâng cao.
Preferences của Arduino-ESP32 dùng bộ nhớ không mất dữ liệu khi khởi động lại hoặc mất nguồn. Thiết kế này dùng nó cho địa danh đã xác nhận. Khi đổi vị trí, tăng phiên bản lựa chọn và chỉ nhận kết quả thời tiết gắn với phiên bản hiện tại. Một yêu cầu cũ trả về chậm sẽ không ghi đè thời tiết của nơi mới.
Nếu sau này cần tự định vị, hãy thêm một nguồn tọa độ có sự cho phép của người dùng và vẫn giữ cách nhập tay. Ví dụ nhập địa danh không cần tự xác định vị trí khi di chuyển.
- Các địa danh khớp
- Người dùng xác nhận
- Cấu hình được lưu
Tải thời tiết thế nào để giao diện vẫn dùng được?
Chỉ yêu cầu dữ liệu sẽ hiển thị và chỉ thay bản dữ liệu đang dùng sau khi phản hồi được kiểm tra. Open-Meteo nhận tọa độ và các biến thời tiết, trả JSON. Điều kiện hiện tại của dịch vụ dựa trên dữ liệu mô hình; nó không phải cảm biến đo ngay trong phòng đặt đồng hồ.
Luồng minh họa gồm tạo yêu cầu HTTPS, đặt thời hạn chờ, kiểm tra phản hồi, đọc trường cần thiết và xác nhận đủ dữ liệu. Cần kiểm loại dữ liệu, đơn vị và giá trị thiếu. Nếu nhiệt độ không có, dùng dấu chưa có số liệu; giá trị không không thay thế dữ liệu thiếu.
| Kết quả tải | Cách xử lý đề xuất |
|---|---|
| Dữ liệu hợp lệ cho đúng vị trí | Thay bản dữ liệu và thời điểm nhận |
| Mất mạng hoặc hết thời hạn chờ | Giữ bản cũ, báo tuổi dữ liệu |
| JSON hỏng hoặc thiếu trường | Bỏ phản hồi lỗi, giữ trạng thái cũ |
| Máy chủ yêu cầu giảm tần suất | Giãn lần thử tiếp theo |
| Vị trí đã thay đổi | Bỏ kết quả thuộc lựa chọn trước |
Tách thời điểm dữ liệu có giá trị khỏi thời điểm đồng hồ tải về. Thiết kế có thể dùng lần tải thành công để tính độ cũ trong vận hành, nhưng nên giữ cả dấu thời gian của nguồn. Nếu cần nhiệt độ phòng, đó là một đầu vào cảm biến riêng và phải có nhãn khác.
Khi thử nghiệm, kiểm điều khoản của dịch vụ. Open-Meteo giới hạn API miễn phí cho mục đích phi thương mại; bản thương mại cần phương án phù hợp điều khoản. Thêm ghi nguồn theo yêu cầu dịch vụ ở phần hiển thị hoặc trang thông tin phù hợp trước khi phát hành.
- Phản hồi mạng
- Kiểm dữ liệu và vị trí
- Cập nhật bản mới
- Giữ bản cũ có dấu tuổi
Ví dụ trong đời sống
Người dùng chuyển đồng hồ sang nhà khác và đổi địa danh trong cài đặt. Một yêu cầu thời tiết của nơi cũ vẫn đang chạy. Firmware lưu lựa chọn mới, bỏ phản hồi cũ khi nó về, rồi nhận bản mới gắn với tọa độ đã xác nhận.
Nếu lần tải mới thất bại, mặt đồng hồ báo chưa có thời tiết cho nơi mới. Không giữ nhiệt độ của nơi cũ dưới tên địa danh mới. Giờ vẫn hiển thị theo cấu hình thời gian hiện tại.
Hiểu lầm thường gặp
Đã có giờ mạng là luôn đúng giờ địa phương. Cần cấu hình múi giờ đúng bên cạnh việc đồng bộ.
Nhiệt độ thời tiết là nhiệt độ phòng. Dữ liệu mô hình thời tiết và số đo cảm biến đặt trong phòng là các nguồn khác nhau.
Câu hỏi thường gặp
Có nên tìm địa danh ở mỗi lần lấy thời tiết không?
Thiết kế này chỉ tìm lại khi người dùng đổi vị trí. Những lần tải tiếp theo dùng tọa độ đã lưu.
Mất Internet có cần xóa dự báo không?
Có thể giữ dữ liệu của đúng vị trí và đánh dấu cũ. Dữ liệu của vị trí trước phải được tách khỏi nơi mới.
Có thể dùng miễn phí khi bán đồng hồ không?
Cần kiểm điều khoản và chọn gói phù hợp. Quyền dùng miễn phí phi thương mại không tự áp dụng cho sản phẩm bán ra.
Thuật ngữ trong bài
Tên tiếng Việt, tên tiếng Anh và nghĩa dùng trong bài. Di chuột, chạm hoặc dùng phím Tab tới từ có gạch chân chấm để xem giải thích ngay khi đọc.
- SNTPSimple Network Time Protocol
- Giao thức đồng bộ giờ với máy chủ thời gian.
- geocoding
- Tìm thông tin địa điểm và tọa độ từ từ khóa địa danh.
- Preferences
- Thư viện lưu dữ liệu nhỏ trong bộ nhớ không mất khi ngắt nguồn.
Bài này chưa được đánh dấu là đã xem
Thấy nội dung sai hoặc chưa an toàn?
Báo cho quản trị viên qua email. Thư có sẵn tên bài và đường dẫn.
Có thể bạn cũng quan tâm
Trung cấpViết firmware đồng hồ đơn giản với Arduino
Thiết kế firmware đồng hồ với menu nút bấm, báo thức lưu lịch và cập nhật OTA; xử lý mất mạng, xác minh bản mới và phục hồi khi lỗi.
Internet vạn vật (IoT)14 phút đọc
Trung cấpKiểm thử mẫu đồng hồ LCD trước khi làm vỏ
Lập ca thử giờ, báo thức, nút bấm, OTA và chuyển nguồn cho đồng hồ LCD; kiểm phục hồi cấu hình, đọc chữ và đo điện trước khi làm vỏ.
Internet vạn vật (IoT)9 phút đọc
Trung cấpĐồng hồ để bàn thông minh cần những khối nào?
Thiết kế đồng hồ LCD có Wi-Fi, thời tiết và pin sạc: vai trò từng khối, chọn phần cứng và giữ firmware dễ phát triển.
Internet vạn vật (IoT)7 phút đọc
Trung cấpMáy tính đồng hành nối với bộ điều khiển bay như thế nào?
Theo dõi kết nối nối tiếp hoặc Ethernet, giao thức hai chiều và tín hiệu cho biết lệnh hay kết nối đã mất.
Internet vạn vật (IoT)6 phút đọc
Nguồn
Các nguồn này viết cho người đọc lớn hơn. Nếu thấy khó, hãy đọc cùng người lớn.
- System Time(mở trong thẻ mới)
EspressifBậc C: nguồn khácĐọc ngày 1 tháng 11, 2026
- Weather Forecast API(mở trong thẻ mới)
Open-MeteoBậc C: nguồn khácĐọc ngày 1 tháng 11, 2026
- Geocoding API(mở trong thẻ mới)
Open-MeteoBậc C: nguồn khácĐọc ngày 1 tháng 11, 2026
- Terms of use(mở trong thẻ mới)
Open-MeteoBậc C: nguồn khácĐọc ngày 1 tháng 11, 2026
- Preferences API(mở trong thẻ mới)
EspressifBậc C: nguồn khácĐọc ngày 1 tháng 11, 2026
