במדריך הקודם עשינו שעון RTC באמצעות DS3231 ו- ESP32. כדי למזער את דרישות החומרה נכין שעון אינטרנט ללא שימוש במודול RTC. זה מדויק יותר בהשוואה לשעון RTC. ESP32 הוא מודול Wi-Fi וניתן לחבר אותו בקלות לאינטרנט ולכן נשתמש ב- NTP (Network Time Protocol) וב- UDP (User Datagram Protocol) כדי להשיג זמן מהאינטרנט באמצעות Wi-Fi. שעון אינטרנט זה יכול להיות מאוד שימושי בעת בניית פרויקטים של IoT.
מה זה NTP ??
פרוטוקול זמן רשת (NTP) הוא פרוטוקול רשת המשמש לסינכרון זמן בין מערכות לרשתות נתונים. מסגרת ה- NTP תלויה בשרתי Internet Time. ל- NTP יש אלגוריתמים להתאמה מדויקת של שעות היום. לשרתי NTP יש תוכנה השולחת את השעה של השעון ביום למחשבי לקוח באמצעות UDPport 123. אז כאן בפרויקט זה אנו מקבלים זמן משרת NTP באמצעות ESP32 ומציגים אותו בתצוגת OLED.
חומרים נדרשים:
- ESP32
- תצוגת OLED 128 * 64
- קרש לחם
- חוטי זכר-נקבה
תרשים מעגל:
כאן אנו משתמשים במצב SPI כדי לחבר את מודול התצוגה OLED 128 × 64 (SSD1306) ל- ESP32. אז זה ישתמש בשבעה פינים. חיבורים עם ESP32 ניתנים כ:
- סיכת CS (שבב בחר) של OLED -> PIN D5 של ESP32
- סיכת DC של OLED -> PIN D4 של ESP32
- סיכת RES של OLED -> PIN D2 של ESP32
- סיכת SDA של OLED -> PIN D23 כלומר MOSI של ESP32
- סיכת SCK של OLED -> PIN D18 כלומר SCK של ESP32
- Vdd של OLED -> Vcc של ESP32
- GND של OLED -> GND של ESP32
אתה זקוק לקבצי לוח עבור ה- ESP32 שלך. התפריט הנפתח של מנהל לוח הצ'ק-אין של ערכת ה- Arduino IDE עבור ערכת dev ESP32. אם זה לא שם, בצע את השלבים המופיעים בקישור למטה:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
אתה יכול גם להשתמש ב- ESP12 לפרויקט זה, למד כאן להשתמש ב- ESP12.
אנו נשתמש ב- Arduino IDE כדי לכתוב את התוכנית שלנו כמוסבר במאמר לעיל.
הסבר קוד:
הקוד השלם לשעון האינטרנט ESP32 ניתן בסוף המאמר. כאן אנו מסבירים כמה חלקים חשובים בקוד.
אנו זקוקים למספר ספריות כדי להשתמש בקוד שלנו, אותו ניתן להוריד מהקישורים הבאים:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5. WiFiUdp:
אז כללנו את כל הספריות והמשתנה המוגדר להזנת שם ה- Wi-Fi והסיסמה.
#לִכלוֹל
כאן הספרייה NTPClient.h משמשת להתחברות לשרת הזמן. לוקח זמן משרת NTP ושמור אותו מסונכרן. וספריית Hhre WiFiUdp.h משמשת למשלוח וקבלה של הודעות UDP. UDP הוא פרוטוקול השולח ומקבל הודעות קצרות מהמערכת שלנו לשרת NTP.
אז כדי להפיק זמן מהאינטרנט, עלינו להגדיר שלושה משתנים בתוכנית שלנו ל- NTP.
NTP_OFFSET שהוא אזור הזמן של המדינה שלך, כלומר עבור הודו זה +5: 30 שעה. אז זה 19800 בשניות.
NTP_INTERVAL שהוא מרווח הזמן שלוקח NTP לעדכון הזמן. זה 60-64 שניות.
NTP_ADDRESS הוא שרת ה- NTP של המדינה שלך. עבור הודו תוכלו להשתמש ב- " in.pool.ntp.org ".
#define NTP_OFFSET 19800 // בשניות #define NTP_INTERVAL 60 * 1000 // ב- milisekonds #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
בשנת התקנת פונקציה, initialise הגדרות Wi-Fi כדי להתחבר עם אינטרנט.
הגדרת חלל () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("מתחבר אל"); Serial.println (ssid); WiFi.begin (ssid, סיסמה); בעוד (WiFi.status ()! = WL_CONNECTED) { עיכוב (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi מחובר."); Serial.println ("כתובת IP:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
לאחר מכן אתחל את פונקציות התצוגה כדי להציג זמן ב- OLED.
display.begin (SSD1306_SWITCHCAPVCC);
בפונקציית לולאה השתמשנו ב- timeClient.update (), לפונקציה זו לוקח זמן מעודכן מ- NTP בצורה של מחרוזת ושומר אותו במשתנה formattedTime . לאחר מכן הציגו אותו ב- OLED באמצעות פונקציית display.println () .
loop loop () { timeClient.update (); מחרוזת formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // הגדירו את הפרמטרים הללו בהתאם לצורך שלכם.. display.setCursor (0, 0); display.println (formattedTime);
התוכנית המלאה מובאת להלן. עכשיו סוף סוף תכנת ESP32 עם Arduino IDE ושעון האינטרנט שלך מוכן להראות זמן.