Mục lục:

Đồ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
Đồ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

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

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
Video: Bài 7: Đồng hồ dự báo thời tiết sử dụng kít wifi ESP8266 và LCD TFT 1.8 inch - Project ứng dụng IOT 2024, Tháng mười hai
Anonim
Đồng hồ Internet: Hiển thị Ngày và Giờ bằng OLED Sử dụng ESP8266 NodeMCU Với Giao thức NTP
Đồng hồ Internet: Hiển thị Ngày và Giờ bằng OLED Sử dụng ESP8266 NodeMCU Với Giao thức NTP

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

Những thứ bạn cần
Những thứ bạn cần
Những thứ bạn cần
Những thứ bạn cần
Những thứ bạn cần
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

Kết nối
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

Tải xuống thư viện
Tải xuống thư viện
Tải xuống thư viện
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à gì
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

Phần mã hóa
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ờ

Nhận ngày và giờ
Nhận 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: