Máy khách-máy khách NTP ESP32: Nhận ngày và giờ – Arduino IDE

May Khach May Khach Ntp Esp32 Nhan Ngay Va Gio Arduino Ide



ESP32 là bo mạch Internet of Things (IoT) dựa trên bộ vi điều khiển có thể giao tiếp với nhiều loại thiết bị. ESP32 được sử dụng rộng rãi trong các dự án dựa trên IoT.

Làm việc với ESP32 hoặc bất kỳ thời gian vi điều khiển nào khác là rất quan trọng vì bộ hẹn giờ sẵn có không chính xác nên chúng tôi có thể sử dụng NTP máy chủ để tìm nạp thời gian thực và có thể lưu trữ nó bên trong một biến có thể được sử dụng sau này bên trong mã ESP32.

Giao thức thời gian mạng (NTP) sử dụng Giờ phối hợp quốc tế (UTC) để đồng bộ hóa đồng hồ hệ thống với độ chính xác và độ chính xác cao. Trên các mạng nhỏ hơn, NTP có thể cung cấp cho chúng tôi đồng hồ chính xác tới 1 ms trong khi các mạng lớn hơn như LAN (Mạng cục bộ) NTP có thể cho độ chính xác hàng chục mili giây qua internet. Sử dụng đồng hồ chính xác này, ESP32 có thể thực hiện các lệnh tại một thời điểm cụ thể.







Hướng dẫn này bao gồm các nội dung sau:



  1. Giới thiệu về NTP (Giao thức thời gian mạng)
  2. Cài đặt thời gian và máy chủ NTP



  3. In thời gian thực bằng hàm printLocalTime()





1: Giới thiệu về NTP (Giao thức thời gian mạng)

NTP là từ viết tắt của N công việc t làm P rotocol là một tiêu chuẩn được sử dụng để đồng bộ hóa thời gian của thiết bị với múi giờ của chúng. Giao thức thời gian mạng đồng bộ hóa thời gian của tất cả các thiết bị mạng với UTC còn được gọi là Giờ phối hợp quốc tế.

UTC giống như GMT (Giờ chuẩn Greenwich) nhưng nó không thay đổi và giữ nguyên trên toàn thế giới. Ý tưởng chính đằng sau việc sử dụng UTC là đọc thời gian từ NTP máy chủ và bằng cách áp dụng phần bù UTC, chúng tôi có thể nhận được giờ địa phương theo múi giờ của chúng tôi.



2: Cài đặt thời gian và máy chủ NTP

Để đọc thời gian từ máy chủ NTP, chúng ta cần khai báo các biến sau bên trong mã bằng cách sử dụng các biến này, chúng ta có thể lấy thời gian từ máy chủ NTP.

  • Máy chủ NTP
  • Độ lệch GMT
  • Độ lệch ánh sáng ban ngày

2.1: Máy chủ NTP

Chúng tôi sẽ yêu cầu thời gian từ pool.ntp.org chứa dữ liệu thời gian trên toàn thế giới trên máy chủ và bất kỳ ai cũng có thể yêu cầu giờ địa phương của họ bằng cách sử dụng nhóm này. Sau đây là một số máy chủ khác mà chúng tôi có thể truy cập:

Diện tích tên máy chủ
Toàn cầu pool.ntp.org
Châu Á châu á.pool.ntp.org
Châu Âu Europe.pool.ntp.org
Bắc Mỹ bắc mỹ.pool.ntp.org
châu đại dương đại dương.pool.ntp.org
Nam Mỹ nam mỹ.pool.ntp.org

2.2: Độ lệch GMT

Phần bù giờ GMT mô tả sự khác biệt về thời gian tính bằng giờ giữa múi giờ bạn đang sống với múi giờ GMT. Ví dụ: nếu chúng tôi sử dụng múi giờ của Hoa Kỳ, chúng tôi có thể đặt múi giờ đó thành UTC = -11:00 .

2.3: Độ lệch ánh sáng ban ngày

Ở đây, phần bù ánh sáng ban ngày là thời gian tiết kiệm ánh sáng ban ngày thường được tính là 1 giờ. Giờ tiết kiệm ánh sáng ban ngày có nghĩa là di chuyển đồng hồ về phía trước 1 giờ trong mùa hè và thay đổi chúng trở lại vào mùa đông. Lệnh này thường được sử dụng khi sử dụng múi giờ tùy chỉnh và áp dụng quy tắc tiết kiệm ánh sáng ban ngày.

Vì chúng tôi đã trình bày những điều cơ bản về máy chủ NTP, bây giờ chúng tôi sẽ kiểm tra cách chúng tôi có thể gửi yêu cầu đến máy chủ NTP và đọc giờ địa phương bằng cách sử dụng ESP32 với mã Arduino IDE.

3: In thời gian thực bằng hàm printLocalTime()

Các inLocalTime() chức năng sẽ gọi getLocalTime() chức năng gửi yêu cầu đến máy chủ NTP và lưu trữ ngày giờ nhận được bên trong thông tin thời gian Biến đổi.

3.1: Mã để in thời gian thực

Dán mã đã cho cho máy chủ máy khách NTP trong trình soạn thảo Arduino IDE. Kết nối ESP32 với PC, chọn cổng COM và tải mã lên.

#include
#bao gồm 'thời gian.h'
const char * ssid     = “REPLACE_WITH_YOUR_SSID”;
const char * mật khẩu = “REPLACE_WITH_YOUR_PASSWORD”;
const char * máy chủ ntp = 'pool.ntp.org' ;
const long  gmtOffset_sec = 18000 ; /* ĐẶT LỆCH GMT + 5 GIỜ ( 18000 GIÂY ) */
const int   DaylightOffset_sec = 3600 ; /* 1 giờ bù ánh sáng ban ngày */
làm mất hiệu lực inLocalTime ( )
{
cấu trúc tm timeinfo;
nếu ( ! getLocalTime ( & thông tin thời gian ) ) {
Nối tiếp.println ( 'Không lấy được thời gian' ) ;
trở về ;
}
Nối tiếp.println ( & thông tin thời gian, '%A, %B %d %Y %H:%M:%S' ) ;
}
thiết lập vô hiệu ( )
{
Nối tiếp.bắt đầu ( 115200 ) ;
// kết nối với Wi-Fi
Nối tiếp.printf ( 'Đang kết nối với %s' , ssid ) ;
WiFi.bắt đầu ( ssid, mật khẩu ) ;
trong khi ( WiFi.status ( ) ! = WL_CONNECTED ) {
sự chậm trễ ( 500 ) ;
nối tiếp.print ( '.' ) ;
}
Nối tiếp.println ( ' ĐÃ KẾT NỐI ' ) ;
// khởi tạo và nhận thời gian
thời gian cấu hình ( gmtOffset_sec, ánh sáng ban ngàyOffset_sec, ntpServer ) ;
inLocalTime ( ) ;
// ngắt kết nối Wi-Fi như không còn cần thiết nữa
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
vòng lặp vô hiệu ()
{
độ trễ (1000);
printLocalTime();
}

Mã bắt đầu bằng cách bao gồm WiFi và thư viện thời gian. Wifi thư viện sẽ giúp kết nối ESP32 với mạng trong khi thời gian thư viện sẽ xử lý đồng bộ hóa máy chủ NTP.

Sau đó, SSID và mật khẩu của mạng mà ESP32 sẽ kết nối được xác định. Thay thế thông tin đăng nhập mạng của bạn tại đây. Sau đó chúng tôi đã xác định bù giờ GMT là 18000 giây, tức là (UTC+5 giờ). Bạn có thể thay thế múi giờ UTC của riêng mình tại đây. Theo liên kết để có được bù giờ GMT cho múi giờ của bạn.

Ngoài ra, địa chỉ máy chủ NTP được chỉ định bằng lệnh:

const char * máy chủ ntp = 'pool.ntp.org' ;

Lệnh này tự động chọn máy chủ thời gian sẽ tìm kiếm bạn. Tuy nhiên, chúng tôi cũng có thể đặt múi giờ bằng máy chủ NTP được giải thích trong Máy chủ NTP tiết diện.

Cuối cùng, chúng tôi định cấu hình ESP32 làm ứng dụng khách NTP và để lấy ngày giờ. Đối với điều đó, chúng tôi đã sử dụng configTime() hàm số.

Cuối cùng, sử dụng inLocalTime() chức năng, ngày và giờ hiện tại được in trên màn hình nối tiếp. Hàm này chứa cấu trúc thời gian tm nơi lưu trữ tất cả các thông tin trong thông tin thời gian Biến đổi.

Các lệnh sau đại diện cho thông tin thời gian kết cấu.

Nối tiếp.println ( & thông tin thời gian, '%A, %B %d %Y %H:%M:%S' ) ;

Mỗi chữ cái của cấu trúc thời gian liên quan đến một thông tin cụ thể:

chỉ định Thông tin
%MỘT Ngày trở lại của một tuần
%B Tháng về
%d Ngày trở lại của tháng
%Y Trả về năm hiện tại
%H Trả lại giờ hiện tại
%M Trả lại số phút hiện tại
%S Trả lại giây hiện tại

3.2: Đầu ra

Sau khi tải mã lên, ESP32 sẽ kết nối với mạng WiFi và gửi yêu cầu đến máy chủ NTP để nhận ngày giờ hiện tại. Đầu ra sau đây có thể được nhìn thấy trên màn hình nối tiếp Arduino.

Thời gian hiện tại trên PC của tôi và ESP32 khớp nhau.

Chúng tôi đã đọc thành công thời gian từ máy chủ NTP bằng cách sử dụng ESP32 làm máy khách.

Sự kết luận

Thời gian rất quan trọng đối với các ứng dụng như đánh dấu thời gian và thực hiện các hướng dẫn tại các thời điểm cụ thể để tạo đầu ra. Bộ hẹn giờ sẵn có không chính xác lắm, vì vậy chúng tôi có thể sử dụng máy chủ NTP để đọc ngày và giờ hiện tại. Thời gian này có thể được lưu trữ bên trong một biến để sử dụng bên trong mã của chúng tôi. Bài học này giúp nhận được thời gian chính xác của bất kỳ múi giờ nào trên thế giới bằng cách sử dụng ESP32.