ESP32 NTP Client-Server: קבל תאריך ושעה - Arduino IDE

Esp32 Ntp Client Server Qbl T Ryk Ws H Arduino Ide



ESP32 הוא לוח אינטרנט של דברים (IoT) מבוסס מיקרו-בקר שניתן לממשק עם מגוון רחב של מכשירים. ESP32 נמצא בשימוש נרחב בפרויקטים מבוססי IoT.

עבודה עם ESP32 או כל זמן מיקרו-בקר אחר חשובה מאוד מכיוון שהטיימר המובנה אינו מדויק כל כך כך שנוכל להשתמש ב- NTP שרת כדי להביא זמן אמת ויכול לאחסן אותו בתוך משתנה שניתן להשתמש בו מאוחר יותר בתוך קוד ESP32.

פרוטוקול זמן רשת (NTP) משתמש בזמן אוניברסלי מתואם (UTC) המסנכרן את שעון המערכת בדיוק ובדיוק רב. ברשתות קטנות יותר NTP יכול לספק לנו שעונים מדויקים עד 1 ms בעוד רשתות גדולות יותר כגון LAN (Local Area Network) NTP יכול לתת דיוק עם עשרות אלפיות שניות דרך האינטרנט. שימוש בשעון מדויק זה ESP32 יכול לבצע הוראות בזמן מסוים.







מדריך זה מכיל את התכנים הבאים:



  1. מבוא ל-NTP (פרוטוקול זמן רשת)
  2. שרת NTP והגדרות זמן



  3. הדפסה בזמן אמת באמצעות הפונקציה printLocalTime()





1: מבוא ל-NTP (פרוטוקול זמן רשת)

NTP הוא ראשי תיבות של נ רשת ט לעשות פ rotocol הוא תקן המשמש לסנכרון זמן התקנים עם אזור הזמן שלהם. פרוטוקול זמן הרשת מסנכרן את הזמן של כל התקני הרשת עם ה-UTC הידוע גם בשם זמן אוניברסלי מתואם.

UTC זה כמו GMT (זמן גריניץ') אבל זה לא משתנה ונשאר אותו הדבר בכל העולם. הרעיון המרכזי מאחורי השימוש ב-UTC הוא לקרוא את הזמן מה- NTP שרת ועל ידי החלת קיזוז UTC נוכל לקבל זמן מקומי בהתאם לאזור הזמן שלנו.



2: שרת NTP והגדרות זמן

כדי לקרוא זמן משרת NTP אנחנו צריכים להכריז על המשתנים הבאים בתוך קוד באמצעות משתנים אלה, נוכל לקבל את הזמן משרת NTP.

  • שרת NTP
  • קיזוז GMT
  • היסט אור יום

2.1: שרת NTP

נבקש זמן מ pool.ntp.org שמכיל נתוני זמן עולמיים בשרת וכל אחד יכול לבקש את הזמן המקומי שלו באמצעות מאגר זה. להלן מספר שרתים נוספים שאנו יכולים לגשת אליהם:

אֵזוֹר שם מארח
עוֹלָמִי pool.ntp.org
אַסְיָה asia.pool.ntp.org
אֵירוֹפָּה europe.pool.ntp.org
צפון אמריקה north-america.pool.ntp.org
אוקיאניה oceania.pool.ntp.org
דרום אמריקה south-america.pool.ntp.org

2.2: קיזוז GMT

קיזוז ה-GMT מתאר את הפרש השעות בשעות בין אזור הזמן שבו אתה חי ל-GMT. לדוגמה, אם אנו משתמשים באזור הזמן של ארה'ב, נוכל להגדיר אותו ל UTC = -11:00 .

2.3: היסט אור יום

כאן היסט לאור הקיץ הוא שעון הקיץ שנלקח בדרך כלל כשעה. שעון קיץ פירושו הזזת השעון שעה אחת קדימה במהלך הקיץ והחלפתם חזרה בחורף. פקודה זו משמשת בדרך כלל כאשר נעשה שימוש באזור זמן מותאם אישית ומוחל כלל שעון קיץ.

מכיוון שכיסינו את היסודות של שרת NTP כעת, נבדוק כיצד נוכל לשלוח בקשה לשרת NTP ולקרוא את השעה המקומית באמצעות ESP32 עם קוד Arduino IDE.

3: הדפסת זמן אמת באמצעות הפונקציה printLocalTime()

ה printLocalTime() הפונקציה תקרא ל- getLocalTime() פונקציה ששולחת את הבקשה לשרת NTP ומאחסנת את התאריך והשעה שהתקבלו בתוך מידע על זמן מִשְׁתַנֶה.

3.1: קוד להדפסה בזמן אמת

הדבק קוד נתון עבור שרת לקוח NTP בעורך Arduino IDE. חבר את ESP32 למחשב, בחר את יציאת ה-COM והעלה את הקוד.

#include
#include 'time.h'
const char * ssid     = 'REPLACE_WITH_YOUR_SSID';
const char * סיסמה = 'REPLACE_WITH_YOUR_PASSWORD';
const char * ntpServer = 'pool.ntp.org' ;
const long  gmtOffset_sec = 18000 ; /* GMT OFFSET + 5 שעה (ות ( 18000 SEC ) */
const int   daylightOffset_sec = 3600 ; /* 1 הסטת אור יום בשעה */
void printLocalTime ( )
{
struct tm timeinfo;
אם ( ! getLocalTime ( & מידע על זמן ) ) {
Serial.println ( 'לא הצליח להשיג זמן' ) ;
לַחֲזוֹר ;
}
Serial.println ( & מידע על זמן, '%A, %B %d %Y %H:%M:%S' ) ;
}
הגדרה בטלה ( )
{
Serial.begin ( 115200 ) ;
// להתחבר ל-WiFi
Serial.printf ( 'מתחבר ל-%s' , ssid ) ;
WiFi.begin ( ssid, סיסמה ) ;
בזמן ( WiFi.status ( ) ! = WL_CONNECTED ) {
לְעַכֵּב ( 500 ) ;
Serial.print ( '.' ) ;
}
Serial.println ( 'מחוברים' ) ;
// init וקבל את זְמַן
configTime ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// לנתק WiFi כפי ש זה כבר אין צורך
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void loop()
{
delay(1000);
printLocalTime();
}

הקוד התחיל על ידי הכללת WiFi וספריית הזמן. וויי - פיי הספרייה תעזור לחבר את ESP32 עם רשת בזמן זְמַן הספרייה תטפל בסנכרון שרת NTP.

לאחר מכן מוגדר SSID וסיסמה של הרשת שאליה יתחבר ESP32. החלף את פרטי הרשת שלך כאן. אחרי זה הגדרנו קיזוז GMT כ-18000 שניות כלומר (UTC+5 שעות). אתה יכול להחליף את אזור הזמן שלך UTC כאן. עקוב אחרי קישור כדי לקבל את קיזוז GMT לאזור הזמן שלך.

בנוסף, כתובת שרת NTP מצוינת באמצעות הפקודה:

const char * ntpServer = 'pool.ntp.org' ;

פקודה זו בוחרת אוטומטית את שרת הזמן שיחפש אותך. עם זאת, אנו יכולים גם להגדיר אזור זמן באמצעות שרתי NTP המפורטים ב שרת NTP סָעִיף.

בסוף אנו מגדירים את ה-ESP32 כלקוח NTP וכדי לקבל תאריך ושעה. לשם כך השתמשנו ב- configTime() פוּנקצִיָה.

לבסוף, באמצעות printLocalTime() פונקציה, התאריך והשעה הנוכחיים מודפסים על הצג הטורי. פונקציה זו מכילה מבנה זמן tm אשר מאחסן את כל המידע ב- מידע על זמן מִשְׁתַנֶה.

הפקודות הבאות מייצגות את מידע על זמן מִבְנֶה.

Serial.println ( & מידע על זמן, '%A, %B %d %Y %H:%M:%S' ) ;

כל אות מבנה זמן מתייחסת למידע ספציפי:

מפרטים מֵידָע
יום חזרה בשבוע
%B חודש החזרה
%d יום החזרה בחודש
%Y חזרה לשנה הנוכחית
%H החזר את השעה הנוכחית
%M החזר דקות נוכחיות
%S החזר שניות נוכחיות

3.2: פלט

לאחר העלאת הקוד ESP32 יתחבר לרשת WiFi וישלח בקשה לשרת NTP לקבל את התאריך והשעה הנוכחיים. ניתן לראות את הפלט הבא בצג הסדרתי של Arduino.

הזמן הנוכחי במחשב שלי וב-ESP32 תואם.

קראנו בהצלחה זמן משרת NTP באמצעות ESP32 כלקוח.

סיכום

זמן חשוב מאוד ליישומים כמו החתמת זמן וביצוע הוראות בזמנים ספציפיים כדי ליצור פלט. טיימרים מובנים אינם כל כך מדויקים, כך שאנו יכולים להשתמש בשרת NTP כדי לקרוא את השעה והתאריך הנוכחיים. זמן זה יכול להיות מאוחסן בתוך משתנה לשימוש בתוך הקוד שלנו. שיעור זה עוזר לקבל זמן מדויק של כל אזור זמן ברחבי העולם באמצעות ESP32.