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

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

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

הדוגמה של SimpleTime

אם אתה משתמש ב-Arduino IDE עם ה-ESP32, תגלה שיש לו דוגמה בשם SimpleTime זה נראה כך:

אתה יכול לגשת לדוגמא זו על ידי הגדרת ה-Arduino IDE לשימוש בלוח ESP32, מה- כלים תפריט, כגון על ידי בחירה ב- ESP32 Dev Module. לאחר שעשית זאת, תוכל לגשת לדוגמה של SimpleTime מה- כלים תפריט מתחת דוגמאות,ESP32,זְמַן, ו זמן פשוט.

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

instagram viewer
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;

הגדרת אזור הזמן באמצעות gmtOffset_sec זה לא נוח כי אתה צריך למצוא קיזוז GMT עבור המיקום הספציפי שלך. אתה יכול לעשות זאת על ידי התייעצות עם אתר שעון גריניץ'. למרבה המזל, אתה צריך לעשות זאת רק פעם אחת. ה daylightOffset_sec עם זאת, מהווה בעיה גדולה יותר, מכיוון שאתה צריך להתאים אותו פעמיים בשנה. זה עשוי לדרוש ממך להוריד את הפרויקט שלך ולחבר אותו ל-Arduino IDE פעמיים בשנה, מה שהופך אותו לבלתי הולם לחלוטין עבור פרויקט IoT שאתה רוצה להגדיר ולשכוח.

מחפש גישה טובה יותר

אז מה תהיה דרך טובה יותר להגדיר את אזור הזמן ושעון הקיץ? כדי לענות על שאלה זו, אל תסתכל רחוק יותר מאשר איך מחשב Windows שלך מטפל במצב:

שים לב איך במקום לתת לו קיזוז זמן מ-GMT, אנחנו אומרים ל-Windows מה אזור הזמן והמיקום שלנו - במקרה שלנו שעון הרים (ארה"ב וקנדה)-ולאחר מכן סמן את תיבת הסימון כוונן אוטומטית את השעון לשעון קיץ. מנקודה זו ואילך, Windows מטפל בזה באופן אוטומטי עבורנו כל השנה. זה סוג הנוחות שאנחנו רוצים מה-ESP32 שלנו.

קָשׁוּר: כיצד להתאים אישית את שעון מגש המערכת ב-Windows

יצירת מסד נתונים של מיקום עבור ה-ESP32

לעשות את אותו הדבר ב-ESP32 דורש קצת עבודת רגליים. התחלנו עם א פוסט בבלוג שתיאר כיצד להגדיר את אזור הזמן באמצעות משתנה הסביבה TZ. עבור המיקום שלנו, זה היה במקרה MST7MDT, M3.2.0,M11.1.0, לפי זה טבלת אזור זמן. אמנם זה פתר את הבעיה של הצורך להתאים באופן ידני לשעון קיץ, אבל רצינו התהליך יהיה פשוט יותר, ללא צורך לחפש מחרוזת של מספרים ואותיות עבור כל אחד מהם מקום.

המרנו את הנתונים מהאתר למסד נתונים שתוכלו להשתמש בו ישירות מתוך סקיצות הארדואינו שלכם. לעקוב אחר הקישור הזה כדי להוריד ישירות קובץ zip עם הסקיצה של Arduino.

מסד הנתונים עצמו מאוחסן בקובץ time_zone.h. באמצעות מסד הנתונים, הקוד של SimpleTime נראה כך:

הדגשנו את השינויים בדוגמה של SimpleTime בצהוב. שורה זו תאפשר לסקיצה להשתמש במסד הנתונים:

#include "time_zones.h"

שורה זו מגדירה את המיקום שלך:

const char* location = "אמריקה/דנבר";

ישנם 461 מיקומים אפשריים. אתה יכול למצוא את המיקומים הזמינים על ידי עיון ב- time_zone.h קובץ, או על ידי התבוננות ברישום אזור הזמן על האתר הזה.

לבסוף, השורה הבאה אומרת ל-ESP32 לסנכרן את השעה עם שרת אינטרנט באמצעות פרוטוקול זמן הרשת (NTP):

configTimeWithTz (getTzByLocation (מיקום), ntpServer);

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

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

אתה גם רוצה לוודא להוסיף את המידע עבור נקודת הגישה האלחוטית שלך בשתי השורות הבאות:

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASS";

החלף YOUR_SSID עם שם הרשת האלחוטית שלך ו YOUR_PASS עם הסיסמה המשמשת להתחבר אליו.

קָשׁוּר: דרכים להגדיר בצורה מאובטחת נתב אלחוטי כנקודת גישה ציבורית

מסיים

לאחר שסיימתם את שלבי ההגדרה, העלו את הסקיצה ל-ESP32 והוא ישתמש בזמן הנכון כל השנה ללא כל התערבות!

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

  1. הגדר את ה-ESP32 כנקודת גישה אלחוטית לתצורה ראשונית
  2. הפעל שרת אינטרנט כדי להציג למשתמש דף תצורה
  3. צור טופס HTML כדי לאפשר למשתמש להזין את פרטי הרשת האלחוטית ולבחור את מיקומו
  4. צור את הקוד כדי לעבד את הבחירות של המשתמש ולאחסן אותו בזיכרון לא נדיף
  5. בעת הפעלת הלוח:
    • קרא את התצורה מזיכרון לא נדיף
    • התחבר לרשת האלחוטית וסנכרן את השעה

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

קרדיט תמונה: Marcio Teixeira/פליקר

בדוק את קוד מקור ל-ESP32 Dali Clock כדי לראות כיצד להציג דף תצורת אינטרנט עם כל התכונות. דף התצורה מציג תפריט נפתח כדי לאפשר למשתמש לבחור את מיקומו ואזור הזמן שלו מאפשר גם למשתמש להגדיר את השעה באופן ידני באמצעות ווידג'ט זמן ולוח שנה, עבור לא מחובר חֲלוּפָה!

סנכרון זמן רשת מבוסס מיקום ב-ESP32

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

7 פרויקטים מעניינים המשתמשים ב-ESP32 כדי ליצור וידאו מורכב

אם אתה מחפש פרויקטים מעניינים עם ESP32, אתה במקום הנכון.

קרא הבא

לַחֲלוֹקצִיוּץאימייל
נושאים קשורים
  • עשה זאת בעצמך
  • ESP32
  • האינטרנט של הדברים
על הסופר
מרסיו טייקסיירה (4 מאמרים שפורסמו)

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

עוד מאת Marcio Teixeira

הירשם לניוזלטר שלנו

הצטרף לניוזלטר שלנו לקבלת טיפים טכניים, ביקורות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!

לחץ כאן כדי להירשם