Mục lục:
- Bước 1: Những thứ bạn cần
- Bước 2: Kết nối
- Bước 3: Tải xuống thư viện
- Bước 4: NTP là gì
- Bước 5: Phần mã hóa
- Bước 6: Lấy ngày và giờ
Video: Đồng hồ Internet: Hiển thị Ngày và Giờ bằng OLED Sử dụng ESP8266 NodeMCU Với Giao thức NTP: 6 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:32
Xin chào các bạn trong hướng dẫn này chúng ta sẽ xây dựng một đồng hồ internet lấy thời gian từ internet nên dự án này sẽ không cần bất kỳ RTC nào để chạy, nó sẽ chỉ cần kết nối internet hoạt động
Và đối với dự án này, bạn cần một esp8266 sẽ có wifi để truy cập internet và màn hình hiển thị thời gian trên đó và esp8266 sẽ lấy thời gian từ internet bằng giao thức NTP, ntp là viết tắt của giao thức thời gian mạng, vì vậy về cơ bản có các máy chủ ntp trên web được sử dụng để đồng bộ hóa đồng hồ máy tính và chúng tôi sẽ sử dụng máy chủ bthose để có thời gian trong dự án của mình.
Bước 1: Những thứ bạn cần
cho dự án này, bạn sẽ cần những thứ sau:
Esp8266 / gật gù
Oled ssd1306 0,96"
Dây nhảy
Breadboard
Cáp USB
Bước 2: Kết nối
Màn hình OLED 4 chân này giao tiếp với module ESP8266 bằng giao thức I2C, dưới đây là sơ đồ mạch và bảng kết nối để kết nối các chân I2C của OLED với NodeMCU để hiển thị thời gian Internet.
Bước 3: Tải xuống thư viện
Đảm bảo rằng bạn đã tải xuống các thư viện SD1306 trong Arduino Ide của bạn như được hiển thị trong hình ảnh và đảm bảo rằng bạn cũng có thư viện Adafruit GFX, nếu không, hãy cài đặt hai thư viện này.
Trong IDE Arduino của bạn, đi tới Trình quản lý thư viện và tìm kiếm NTP và chỉ cần tải xuống thư viện ứng dụng khách NTP như tôi đã tải xuống, hãy tham khảo hình ảnh để được trợ giúp thêm.
Bước 4: NTP là gì
NTP là một trong những Giao thức Internet (IP) mạng lâu đời nhất để đồng bộ hóa đồng hồ giữa các mạng máy tính. Nó được thiết kế bởi David L. Mills của Đại học Delaware vào năm 1981. Giao thức này có thể được sử dụng để đồng bộ hóa nhiều mạng với Giờ Phối hợp Quốc tế (UTC) trong vòng vài mili giây. UTC là tiêu chuẩn thời gian chính mà thế giới quy định đồng hồ và thời gian. UTC không thay đổi và thay đổi đối với các vị trí địa lý khác nhau. NTP sử dụng UTC làm tham chiếu thời gian và cung cấp thời gian chính xác và đồng bộ trên Internet.
NTP hoạt động trên mô hình máy khách-máy chủ phân cấp. Mô hình hàng đầu có các đồng hồ tham chiếu được gọi là "stratum0" như đồng hồ nguyên tử, sóng vô tuyến, GPS, GSM nhận thời gian từ vệ tinh. Các máy chủ nhận thời gian từ stratum0 được gọi là “stratum1” và các máy chủ nhận thời gian từ stratum1 được gọi là “stratum2”, v.v. Điều này tiếp diễn và độ chính xác của thời gian tiếp tục giảm sau mỗi giai đoạn. NTP tự động chọn tốt nhất một số nguồn thời gian có sẵn để đồng bộ hóa, điều này làm cho nó trở thành giao thức có khả năng chịu lỗi. Vì vậy, ở đây trong dự án này, chúng tôi lấy thời gian từ máy chủ NTP sử dụng ESP8266 NodeMCU và hiển thị nó trên màn hình OLED. Loại đồng hồ Internet tương tự này được xây dựng bằng cách sử dụng ESP32 trong hướng dẫn trước.
Bước 5: Phần mã hóa
Để yêu cầu ngày và giờ, hãy khởi tạo ứng dụng khách thời gian với địa chỉ của máy chủ NTP. Để chính xác hơn, hãy chọn địa chỉ của máy chủ NTP gần khu vực địa lý của bạn. Ở đây chúng tôi sử dụng “pool.ntp.org” để cung cấp các máy chủ từ khắp nơi trên thế giới. Nếu bạn muốn chọn máy chủ từ Châu Á, bạn có thể sử dụng “asia.pool.ntp.org”. timeClient cũng bù đắp thời gian UTC tính bằng mili giây trong múi giờ của bạn. Ví dụ: chênh lệch UTC cho Ấn Độ là +5: 30, vì vậy chúng tôi quy đổi chênh lệch này theo mili giây bằng 5 * 60 * 60 + 30 * 60 = 19800.
Khu vực. Thời gian bù giờ UTC (giờ và phút). Thời gian bù giờ UTC (giây)
ẤN ĐỘ +5: 30 19800
LONDON 0:00. 0
MỚI YORK -5: 00-18000
Vui lòng sao chép mã sau và nhập wifi & mật khẩu của bạn vào mã và Nhập thời gian bù vào mã sau đó tải nó lên bảng esp8266 của bạn.:
#include "NTPClient.h" #include "ESP8266WiFi.h" // cung cấp các quy trình Wi-Fi cụ thể của ESP8266 mà chúng tôi đang gọi để kết nối với mạng #include "WiFiUdp.h" // xử lý việc gửi và nhận gói UDP
#include "SPI.h" // SPI để kết nối OLED với NodeMCu
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
#define SCREEN_WIDTH 128 // Chiều rộng màn hình OLED, tính bằng pixel
#define SCREEN_HEIGHT 64 // Chiều cao màn hình OLED, tính bằng pixel
#define OLED_RESET -1
Màn hình Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET);
constchar * ssid = "yourwifissid";
const char * password = "yourwifipass";
WiFiUDP ntpUDP;
NTPClient timeClient (ntpUDP, "pool.ntp.org", 19800, 60000);
String arr_days = {"Chủ Nhật", "Thứ Hai", "Thứ Ba", "Thứ Tư", "Thứ Năm", "Thứ Sáu", "Thứ Bảy"};
Chuỗi ngày_ giờ; // Bạn có thể chỉ định nhóm máy chủ thời gian và phần bù (tính bằng giây, có thể được thay đổi sau này bằng setTimeOffset ()). Ngoài ra, bạn có thể chỉ định // khoảng thời gian cập nhật (tính bằng mili giây, có thể được thay đổi bằng cách sử dụng setUpdateInterval ()).
void setup ()
{
Serial.begin (115200);
WiFi.begin (ssid, mật khẩu);
trong khi (WiFi.status ()! = WL_CONNECTED)
{
chậm trễ (500);
Serial.print (".");
}
if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C))
{
Serial.println (F ("Không phân bổ được SSD1306"));
vì(;;); // Không tiếp tục, lặp lại mãi mãi
}
display.clearDisplay ();
display.setTextSize (2); // Vẽ văn bản tỷ lệ 2X
display.setTextColor (TRẮNG);
display.setCursor (5, 2);
display.println ("CHÀO MỪNG BẠN ĐẾN");
display.println ("có thể hướng dẫn");
display.println ("Dự án");
display.display ();
chậm trễ (3000);
timeClient.begin ();
}
void loop ()
{
timeClient.update ();
display.clearDisplay ();
Serial.println (timeClient.getFormattedTime ());
display.setTextSize (2); // Vẽ văn bản tỷ lệ 2X
display.setTextColor (BLUE);
display.setCursor (0, 2);
int hh = timeClient.getHours ();
int mm = timeClient.getMinutes ();
int ss = timeClient.getSeconds ();
nếu (hh> 12)
{
hh = hh-12;
display.print (hh);
display.print (":");
display.print (mm);
display.print (":");
display.print (ss);
display.println ("PM");
}
khác
{
display.print (hh);
display.print (":");
display.print (mm);
display.print (":");
display.print (ss);
display.println ("AM");
}
int day = timeClient.getDay ();
display.println ("'" + arr_days [ngày] + "'");
date_time = timeClient.getFormattedDate ();
int index_date = date_time.indexOf ("T");
Chuỗi ngày = date_time.substring (0, index_date);
Serial.println (ngày);
display.println (ngày tháng);
display.display ();
// Hiển thị văn bản đầu tiên}
Bước 6: Lấy ngày và giờ
nếu bạn đã kết nối mọi thứ đúng cách và cũng đã tải mã lên đúng cách thì bạn sẽ có thể thấy đồng hồ ntp của mình đang chạy trên màn hình oled như của tôi đang chạy trên màn hình oled. Vui lòng tham khảo hình ảnh để biết kết quả đầu ra.
Đề xuất:
Hiển thị ngày, giờ và nhiệt độ bằng XinaBox: 8 bước
Hiển thị ngày, giờ và nhiệt độ sử dụng XinaBox: Màn hình OLED mát mẻ hiển thị ngày, giờ và nhiệt độ theo độ C và độ F bằng Xinabox xChips dựa trên ESP8266
Giao diện người dùng dễ thực hiện -- Màn hình OLED với Joystick & Buttons: 6 bước
Giao diện người dùng dễ thực hiện || Màn hình OLED với Joystick & Buttons: Mô-đun này có màn hình OLED với hai nút, phím điều khiển 5 chiều và cảm biến gia tốc 3 trục. Điều này rất hữu ích trong việc thiết lập giao diện người dùng cho một dự án. Akarsh đây từ CETech. Hôm nay chúng ta sẽ xem xét một mô-đun tất cả trong một
Hiển thị nhiệt độ trên Mô-đun hiển thị LED P10 bằng Arduino: 3 bước (có hình ảnh)
Hiển thị nhiệt độ trên Mô-đun hiển thị LED P10 bằng Arduino: Trong hướng dẫn trước đã được hướng dẫn cách hiển thị văn bản trên Mô-đun hiển thị LED ma trận P10 bằng cách sử dụng Arduino và Đầu nối DMD, bạn có thể kiểm tra tại đây. Trong hướng dẫn này, chúng tôi sẽ đưa ra một hướng dẫn dự án đơn giản bằng cách sử dụng mô-đun P10 làm màn hình hiển thị
Sử dụng Mô-đun Bluetooth HC-05 để thực hiện giao tiếp Micro: bit với điện thoại di động: 9 bước (có hình ảnh)
Sử dụng Mô-đun Bluetooth HC-05 để thực hiện giao tiếp Micro: bit với điện thoại di động: Trong chương Sử dụng mô-đun Bluetooth HC-06 để thực hiện giao tiếp micro: bit với điện thoại di động, chúng ta đã nói về cách sử dụng HC-06 để thực hiện giao tiếp giữa các micro: bit và điện thoại di động. Ngoại trừ HC-06, có một mô-đun Bluetooth phổ biến khác
Sử dụng Mô-đun Bluetooth HC-06 để thực hiện giao tiếp Micro: bit với điện thoại di động: 8 bước (có hình ảnh)
Sử dụng Mô-đun Bluetooth HC-06 để nhận biết giao tiếp Micro: bit với điện thoại di động: Rất nhiều bạn bè xung quanh tôi chơi micro: bit cho tôi biết rằng kết nối Bluetooth của micro: bit không ổn định. Nó rất dễ dàng để ngắt kết nối. Nếu chúng tôi sử dụng micropython, Bluetooth thậm chí không thể sử dụng được. Trước khi vấn đề này được giải quyết bằng micro: bit offic