Trong hướng dẫn trước, chúng ta đã tạo đồng hồ RTC bằng DS3231 và ESP32. Để giảm thiểu yêu cầu phần cứng, chúng tôi sẽ tạo đồng hồ Internet mà không sử dụng mô-đun RTC. Điều này chính xác hơn so với đồng hồ RTC. ESP32 là một mô-đun Wi-Fi và có thể dễ dàng kết nối với internet vì vậy chúng tôi sẽ sử dụng NTP (Giao thức thời gian mạng) và UDP (Giao thức dữ liệu người dùng) để tìm nạp Thời gian từ internet bằng Wi-Fi. Đồng hồ Internet này có thể rất hữu ích trong khi xây dựng các Dự án IoT.
NTP là gì ??
Network Time Protocol (NTP) là một giao thức mạng được sử dụng để đồng bộ hóa thời gian giữa các hệ thống a0 và Mạng dữ liệu. Khung NTP phụ thuộc vào máy chủ Thời gian Internet. NTP có các thuật toán để điều chỉnh chính xác thời gian trong ngày. Máy chủ NTP có phần mềm gửi thời gian trong ngày của đồng hồ đến máy tính khách sử dụng UDPport 123. Vì vậy, ở đây trong dự án này, chúng tôi lấy thời gian từ máy chủ NTP bằng cách sử dụng ESP32 và hiển thị trên màn hình OLED.
Vật liệu thiết yếu:
- ESP32
- Màn hình OLED 128 * 64
- Breadboard
- Dây nam - nữ
Sơ đồ mạch:
Ở đây, chúng tôi đang sử dụng chế độ SPI để kết nối Mô-đun màn hình OLED 128 × 64 (SSD1306) với ESP32. Vì vậy, nó sẽ sử dụng 7 chân. Các kết nối với ESP32 được cung cấp như:
- Chân CS (Chọn chip) của OLED -> PIN D5 của ESP32
- Chân DC của OLED -> PIN D4 của ESP32
- Chân RES của OLED -> PIN D2 của ESP32
- Chân SDA của OLED -> PIN D23 tức là MOSI của ESP32
- Chân SCK của OLED -> PIN D18 tức là SCK của ESP32
- Vdd của OLED -> Vcc của ESP32
- GND của OLED -> GND của ESP32
Bạn cần các tệp bảng cho ESP32 của mình. Trình đơn thả xuống của trình quản lý bảng đăng ký của Arduino IDE dành cho bộ phát triển ESP32. Nếu nó không có ở đó, hãy làm theo các bước được cung cấp trong liên kết bên dưới:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Bạn cũng có thể sử dụng ESP12 cho dự án này, tìm hiểu tại đây để sử dụng ESP12.
Chúng tôi sẽ sử dụng Arduino IDE để viết chương trình của chúng tôi như đã giải thích trong bài viết trên.
Giải thích mã:
Mã hoàn chỉnh cho Đồng hồ Internet ESP32 được đưa ra ở cuối bài viết. Ở đây chúng tôi đang giải thích một số phần quan trọng của mã.
Chúng tôi cần một số thư viện để sử dụng trong mã của mình, có thể tải xuống từ các liên kết dưới đây:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5.WiFiUdp:
Vì vậy, chúng tôi đã bao gồm tất cả các thư viện và biến được xác định để nhập tên và mật khẩu Wi-Fi.
#include
Ở đây thư viện NTPClient.h được sử dụng để kết nối với máy chủ thời gian. Cần có thời gian từ máy chủ NTP và giữ nó đồng bộ. Và thư viện Hhre WiFiUdp.h được sử dụng để gửi và nhận tin nhắn UDP. UDP là một giao thức gửi và nhận các tin nhắn ngắn từ hệ thống của chúng tôi đến máy chủ NTP.
Vì vậy, để có được thời gian từ Internet, chúng tôi phải xác định ba biến trong chương trình của chúng tôi cho NTP.
NTP_OFFSET là múi giờ của quốc gia bạn, tức là đối với Ấn Độ là +5: 30 giờ. Vì vậy, nó là 19800 trong giây.
NTP_INTERVAL là khoảng thời gian được NTP thực hiện để cập nhật thời gian. Nó là 60-64 giây.
NTP_ADDRESS là máy chủ NTP của quốc gia bạn. Đối với Ấn Độ, bạn có thể sử dụng “ in.pool.ntp.org ”.
#define NTP_OFFSET 19800 // Trong vài giây #define NTP_INTERVAL 60 * 1000 // Trong mili giây #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
Trong Chức năng cài đặt , khởi chạy cài đặt Wi-Fi để kết nối với internet.
void setup () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("Đang kết nối với"); Serial.println (ssid); WiFi.begin (ssid, mật khẩu); while (WiFi.status ()! = WL_CONNECTED) { delay (500); Serial.print ("."); } Serial.println (""); Serial.println ("Đã kết nối WiFi."); Serial.println ("Địa chỉ IP:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Sau đó khởi tạo các chức năng hiển thị để hiển thị thời gian trên OLED.
display.begin (SSD1306_SWITCHCAPVCC);
Trong hàm loop, chúng ta đã sử dụng timeClient.update (), hàm này lấy thời gian cập nhật từ NTP dưới dạng chuỗi và lưu trữ nó trong biến formattedTime . Sau đó, hiển thị nó trên OLED bằng hàm display.println () .
void loop () { timeClient.update (); String formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // thiết lập các tham số này theo nhu cầu của bạn.. display.setCursor (0, 0); display.println (formattedTime);
Chương trình đầy đủ được đưa ra dưới đây. Bây giờ cuối cùng lập trình ESP32 với Arduino IDE và Đồng hồ Internet của bạn đã sẵn sàng hiển thị thời gian.