תוכן עניינים:
- שלב 1: זמן Google
- שלב 2: שרתי זמן SNTP
- שלב 3: קבלת הזמן ממודול RTC
- שלב 4: זיכרון משתמש RTC
- שלב 5: מודולי RTC חיצוניים
- שלב 6: רישום נתונים
- שלב 7: סיכום
וִידֵאוֹ: NODEMCU Lua ESP8266 עם שעון בזמן אמת (RTC) ו- EEPROM: 7 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
קבלת הזמן הנכון חיונית אם ברצונך לשמור יומן נתונים. ישנן דרכים שונות לקבל את הזמן ממקורות באינטרנט.
אתה יכול לשאול מדוע לא להשתמש ב- ESP8266 כדי לשמור על הזמן עבורך? אתה יכול, יש לו RTC פנימי משלו (שעון בזמן אמת), אך ל- ESP8266 יש 3 תדרי שעון הפעלה שונים - 52 מגהרץ כאשר הוא מופעל, 80 מגהרץ במהלך פעולה רגילה ו -160 מגהרץ אם הוא מוגבר. אם אתה צריך שמירת זמן מדויקת יותר, במיוחד לאורך תקופות ארוכות יותר, אז RTC חיצוני עשוי לספק פתרון. במודולים אלה יש גם גיבוי סוללה במקרה של אובדן חשמל. RTC אינו מדויק במיוחד מכיוון שהוא סופר את הזמן שחלף מאז שהוא נקבע ולמרות שהוא עשוי לעשות את זה ברוב היישומים, יתכן שהוא לא מספיק טוב לשמירה על זמן קריטי. ניתן לקבל את השעה המדויקת משרת זמן SNTP שממנו ניתן לעדכן את ה- RTC במרווחי זמן קבועים במידת הצורך.
מודול ה- DS1307 Tiny RTC I2C (למעלה) הוא דוגמה לפריטים אלה וניתן לרכוש אותו ב- eBay וספקים אחרים בפחות מ -2 ליש ט. יש גם אחרים כמו DS1302 ו- DS3231 שעובדים בצורה דומה ועולים מ- 99p ומעלה.
מודול DS1307 משתמש בממשק I2C ועל ESP-01 צריך להיות מחובר כ:
Vcc - 3.3v, Gnd - Gnd, SDA - D3, SCL - D4
ניתן לחבר SDA ו- SCL לכל אחד מסיכות הקלט/פלט ב- ESP8266 הגדולים יותר (שנה את הקוד בהתאם). רק את הסיכות בצד שמאל צריך להיות מחובר במודול זה.
שלב 1: זמן Google
ישנן דוגמאות רבות לקבלת הזמן מגוגל ולהיראות כך. כאשר אתה מפעיל את תוכנית GoogleTime.lua אתה מקבל תוצאה כזו:
dofile ("GoogleTime.lua")> שעה: יום שישי, 15 בדצמבר 2017 11:19:45 GMT
הבעיה בשיטה זו היא שאתה מקבל את הזמן בפורמט מחרוזת ואתה צריך לפצל את המחרוזת לביטים האישיים שלה במשך שעות, דקות, שניות וכו 'ה- RTC מקבל את הזמן בפורמט מיוחד כלומר חותמת זמן UNIX. במונחים של הדיוט זהו מספר השניות שחלפו מאז יום חמישי הראשון בינואר 1970 ועד היום והשעה הנוכחית. תקופת UNIX (1970/01/01 00:00:00) משמשת את רוב מערכות ההפעלה הממוחשבות והזמן שחלף מאוחסן כמספר 32 סיביות חתום. המשמעות היא שמערכת זו תעבוד עד ה -19 בינואר 2038 כאשר המספר יהפוך להיות גדול מכדי לאחסן אותו כך. פתרון אחד הוא לאחסן את המספר כ- 64 סיביות, אך לעת עתה שיטת 32 הסיביות תספיק.
כדי להגדיר את השעה ל- 9 ביולי 2015, 18:29:49 ב- RTC הפנימי, היית משתמש בשורת קוד זו:
rtctime.set (1436430589, 0)
2 הפרמטרים הם שניות ומיקרו שניות.
תוכל למצוא מידע נוסף בקריאת תיעוד NodeMCU.
שלב 2: שרתי זמן SNTP
פרוטוקול זמן רשת פשוט (SNTP) מסופק ממקורות רבים באינטרנט, ולמדינות רבות ברחבי העולם יש שירות זה.
התוכנית, SNTPTime2.lua קובעת את השעה ב- RTC הפנימי. אתה צריך שיהיה לך את המודולים rtctime & sntp בבנייתך כאשר אתה מהבהב ב- ESP8266. התוכנית מקבלת את הזמן מהשרת תוך שניות ומיקרו שניות ומגדירה את ה- RTC הפנימי עם rtctime.set (sec, usec).
לאחר מכן התוכנית מציגה את התאריך והשעה בפורמטים שונים.
ישנם שרתי SNTP רבים ברחבי העולם וחלקם כדלקמן:
- sntp.sync ({"216.239.35.0"},
- sntp.sync ({"0.uk.pool.ntp.org", "0.uk.pool.ntp.org"},
- sntp.sync ({"3.uk.pool.ntp.org", "143.210.16.201"},
- sntp.sync ({"0.uk.pool.ntp.org", "1.uk.pool.ntp.org", "3.uk.pool.ntp.org"},
ניתן להחליף את כל שורות הקוד שלעיל לתוכנית SNTPTime2.lua.
ישנם יותר שרתי SNTP בכתובות למטה שאפשר להשתמש בהם שוב בתוכנית.
93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com
Google מספקת גם שרתי זמן בכתובות הבאות:
216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12
עליך לזכור לקבל את הזמן מהמדינה שבה אתה נמצא, או שתצטרך לשנות אותו לאזורי הזמן השונים בעולם. גם במדינות מסוימות יש שעון קיץ, כך שתצטרך להתמודד גם עם זה.
שלב 3: קבלת הזמן ממודול RTC
התוכנית GetRTCTime.lua קוראת את הזמן מתוך ה- RTC הפנימי.
החלק הראשון קורא את הזמן ומציג אותו תוך שניות ומיקרו שניות.
החלק השני הופך אותו לפורמט קריא יותר של בני אדם.
כאשר מתקשרים ל tm = rtctime.epoch2cal (rtctime.get ()) הוא מחזיר:
- שנה - 1970 ~ 2038
- שני - חודש 1 ~ 12 בשנה הנוכחית
- יום - יום 1 ~ 31 בחודש הנוכחי
- שָׁעָה
- דקות
- שניות
- יום - יום 1 ~ 366 בשנה הנוכחית
- wday - יום 1 ~ 7 בשבוע הנוכחי (יום ראשון הוא 1)
ניתן לגשת לכל פריט בתור tm ["day"], tm ["year"]…
תוכל למצוא מידע נוסף בקריאת תיעוד NodeMCU.
DisplaySNTPtime.lua היא דרך משוכללת יותר להציג את התאריך והשעה על מסך LCD בגודל 128 x 64 OLED, מכיוון שהוא ניתן לחיבור בקלות וניתן להשתמש בו עם תוכניות אלה.
שלב 4: זיכרון משתמש RTC
קצת הסחה משמירת הזמן היא ה- RTC הפנימי ב- ESP8266 בעל כתובות זיכרון של 128 על 32 סיביות שאליהן ניתן לגשת למתכנת. הם שימושיים במיוחד מכיוון שהם יכולים לשרוד את מחזור השינה העמוקה של ה- ESP8266. על המתכנת לשלוט על השימוש בהם ולוודא שלא יחליפו אותם בטעות.
כללתי את RTCmem.lua, תוכנית פשוטה שמדגימה את השימוש בה. אתה צריך שיהיה לך מודול rtcmem במבנה שלך.
שלב 5: מודולי RTC חיצוניים
מודולי ה- RTC החיצוניים מתחברים ל- ESP8266 דרך ממשק I2C, שמשתמש רק בשני פיני קלט/פלט ולכן עובד עם ESP-01 כמו גם עם רוב שאר ESP8266 התקנים.
כתובת מודול RTC היא 0x68 ונגישות אליה באמצעות הפקודות הרגילות של I2C. עם זאת, יש לזכור, הנתונים ברשומות ה- RTC מאוחסנים בפורמט BCD (בסיס 16), כך שהתוכניות שלך צריכות להתמודד עם זה. השעה והתאריך מאוחסנים ב -7 רישומים בתוך ה- RTC. ב- RTC הפנימי, ההמרות BCD מטופלות על ידי מודול rtctime.
SetExtRTC.lua ממיר את הנתונים ל- BCD וקובע את השעה.
ReadExtRTC.lua קורא את נתוני הזמן ומדפיס אותם. הערה: הנתונים מודפסים בהקסדצימלי.
לא השקעתי הרבה זמן בעיצוב התצוגה מכיוון שיש לך אולי רעיונות משלך לגבי מה שאתה רוצה לעשות עם תאריך ושעה. זהו המנוע הבסיסי בצורתו הפשוטה ביותר, כך שתוכל לפתח אותו הלאה אם תרצה.
שלב 6: רישום נתונים
אם תסתכל מקרוב על המודולים של RTC, תבחין כי יש בהם AT24C32 EEPROM IC או דומה מובנה, או שאתה יכול להשתמש בלוח 24C256 כפי שמופיע למעלה. לרוב IC אלה של EEPROM יש סיכות סיכה דומות כמפורט לעיל. הם מגיעים עם כמויות אחסון שונות, אך לכולם ניתן לגשת באותו אופן. מכיוון שה- AT24C32 כבר מולחם על הלוח, ניתן להשתמש בו ישירות מה- I2C של ה- RTC החיצוני.
אם יש לך רק IC 24C256 או דומה, תוכל להגדיר אותו בלוח לחם, לחבר את A1, A2 ו- A3 ל- Gnd, Vcc ל- 3.3V ו- SDA ו- SCL ל- I2C, ניתן להשאיר את WP צף. חלק ממעגלי ה- EEPROM פועלים רק על 5V, לכן בדוק קודם את דף הנתונים הרלוונטי.
ByteWR.lua כותב 1 בייט של נתונים למיקום הזיכרון 0x00 של ה- EEPROM וקורא אותו בחזרה.
Desiderata.lua כותב כמה שורות מטקסט מפורסם ל- EEPROM.
eeRead.lua קורא נתונים מה- EEPROM ומדפיס אותם.
הערה: תוכניות אלה צריכות לפעול גם עם לוחות EEPROM אחרים.
שלב 7: סיכום
ניסיתי להראות כיצד RTC ו- EEPROM פועלים לרישום נתונים. זהו רק התחלה שתוכל להתפתח הלאה. ניתן לחבר מכשירים שונים לאוטובוס I2C כגון חיישני אור, חיישני לחץ ברומטרי, חיישני טמפרטורה ולחות ולהקליט את הנתונים ב- EEPROM.
מוּמלָץ:
שעון רשת ESP8266 ללא כל RTC - Nodemcu NTP שעון אין RTC - פרויקט שעון אינטרנט: 4 שלבים
שעון רשת ESP8266 ללא כל RTC | Nodemcu NTP שעון אין RTC | פרויקט שעון אינטרנט: בפרויקט תעשה פרויקט שעון ללא RTC, ייקח זמן מהאינטרנט באמצעות wifi והוא יציג אותו בתצוגה st7735
הגדרת ה- RTC DS3231 (שעון בזמן אמת) בצורה מדויקת, מהירה ואוטומטית באמצעות ג'אווה (+-1 שניות): 3 שלבים
הגדרת ה- DS3231 RTC (שעון בזמן אמת) בצורה מדויקת, מהירה ואוטומטית באמצעות ג'אווה (+-1 שניות): מדריך זה יראה לך כיצד להגדיר את השעה על שעון בזמן אמת DS3231 באמצעות Arduino ויישום Java קטן המשתמש החיבור הסדרתי של ה- Arduino. ההיגיון הבסיסי של תוכנית זו: 1. הארדואינו שולח בקשה סדרתית
שעון מבוסס Arduino באמצעות מודול שעון בזמן אמת DS1307 (RTC) & 0.96: 5 שלבים
שעון מבוסס Arduino באמצעות מודול שעון בזמן אמת DS1307 (RTC) & 0.96: היי חברים במדריך זה נראה כיצד להכין שעון עבודה באמצעות מודול שעון בזמן אמת DS1307 & מציג OLED. אז נקרא את הזמן ממודול השעון DS1307. והדפס אותו על מסך OLED
הכנת שעון עם M5stick C באמצעות Arduino IDE - שעון בזמן אמת של RTC עם M5stack M5stick-C: 4 שלבים
הכנת שעון עם M5stick C באמצעות Arduino IDE | שעון בזמן אמת של RTC עם M5stack M5stick-C: היי חברים במדריך זה נלמד כיצד להכין שעון עם לוח פיתוח m5stick-C של m5stack באמצעות Arduino IDE. כך m5stick יציג תאריך, שעה & השבוע בחודש המוצג בתצוגה
שעון זמן אמת בזמן אמת: 4 שלבים
שעון זמן אמת סביבתי: AimI יצרתי את השעון הזה כי יש לי פס LED שניתן להתייחס אליו ואני רוצה להשתמש בו. ואז ראיתי שלחדר שלי אין שעון טוב התואם את הקירות שלו. אז החלטתי להכין שעון שיכול לשנות את צבעו בהתאם למצב הרוח של המשתמש או