כיצד להשתמש במודול שעון זמן אמת DS3231 (RTC) עם ESP32

Kyzd Lhstms Bmwdwl S Wn Zmn Mt Ds3231 Rtc M Esp32



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

כבר עשינו הדרכה בנושא DS1307 מתממשק למודול ESP32 . היום נדון ביסודות של חיישן DS3231 RTC ונבדוק איך אפשר לממשק אותו עם לוח ESP32.

תוכן העניינים:







1. מהו מודול DS3231 RTC



2. כיצד לממשק את DS3231 עם ESP32



3. חומרה





4. קוד

5. פלט



6. כיצד להציג את הזמן RTC DS3231 על מסך OLED באמצעות ESP32

סיכום

1. מהו מודול DS3231 RTC

מודול DS3231 מספק שמירת זמן מדויקת ביותר. הוא כולל מתנד קריסטל משולב (TCXO) המעניק לנו זמן בדיוק רב. המודול פועל על פרוטוקול I2C באמצעות תצורת Master-Slave. זה יכול לשמור זמן ותאריך עם סוללת גיבוי גם כאשר אין כוח כניסה ראשי. הוא נפוץ בשימוש במכשירים תלויי זמן ותאריך.

ה-DS3231 שומר על שניות, דקות ושעות. זה יכול גם לשמור תיעוד של תאריכים וימי חול. כאשר עוסקים בשנים מעוברות, הוא מתאים אוטומטית את הזמן בהתאם. כמו כן, הוא יכול להציג זמן הן בפורמט של 12 שעות או 24 שעות, עם מחוון AM/PM.

1.1. DS3231 לעומת DS1307

גם DS3231 וגם DS1307 הם מודולים לשמירה על זמן עם תמיכה בגיבוי סוללה. עם זאת, ה-DS3231 מדויק יותר מה-DS1307. הסיבה העיקרית היא ש-DS1307 תלוי בקריסטל חיצוני של 32kHz לצורך שמירת זמן.

עם זאת, ה-RTC DS3231 כולל מתנד גביש פנימי עם פיצוי בטמפרטורה (TCXO). זה הופך אותו לפחות מושפע מהטמפרטורה החיצונית וכתוצאה מכך, יש לו יתרון דיוק של כמה דקות בשנה מאשר ל-DS1307.

1.2. DS3231 Pinout

DS3231 עובד באמצעות פרוטוקול I2C. בלב מודול RTC זה, יש לנו את שבב ה-RTC המדויק שתוכנן על ידי מקסים. שבב זה מטפל בכל פונקציות הזמן ומתקשר באמצעות I2C עם לוח ESP32 או Arduino.

הפינים העיקריים של מודולי RTC DS3231 הם:

  • VCC: חבר את הפין הזה למסוף החיובי של מקור הכוח שלך.
  • GND: חיבור הארקה.
  • SDA: סיכת נתונים טוריים (משמש לתקשורת I2C).
  • SCL: סיכת שעון טורית (גם חלק מממשק I2C).
  • QW: פין פלט מרובע (יכול ליצור אות תקופתי, למשל, עבור אזעקות או למטרות תזמון אחרות).
  • 32K: פלט מתנד 32KHz (שימושי ליישומי תזמון מדויקים).

להלן הרכיבים העיקריים המשולבים של מודול RTC DS3231:

  • מחזיק סוללה: זה מאפשר למודול להמשיך לפעול כאשר המתח החיצוני נעדר.
  • שבב RTC: שבב זה שומר על השעה והתאריך.
  • AT24C32 EEPROM: הוא מספק אחסון לא נדיף לרישום נתונים ולמטרות אחרות עם 1,000,000 מחזורי כתיבה.
  • TCXO: מתנד עם פיצוי על טמפרטורה כדי לספק את הזמן הנכון עבור טווח משתנה של טמפרטורות.
  • חיישן טמפרטורה: זה לוקח קריאות טמפרטורה ומספק אותן כחלק מהתכונה של המודול.

2. כיצד לממשק את DS3231 עם ESP32

כדי לממשק את DS3231 עם ESP32, עליך להתקין את ספריית RTClib ראשון. לאחר התקנת ספריית Adafruit RTC זו, אתה יכול לחבר את לוח ה-ESP32 שלך עם DS3231 באמצעות פרוטוקול I2C. כדי לחבר את ESP32 I2C עם מודול RTC DS3231, אתה יכול להשתמש בפינים ESP32 D21 ו-D22.

2.1. תרשים חיווט של ESP32 עם RTC DS3231

ראשית, עליך לחבר את ה-ESP32 עם מודול I2C RTC DS3231 שלך. עקוב אחר תצורת הפינים הנתונה להלן עבור חיווט:

לאחר חיבור ה-ESP32 עם RTC DS3231, דיאגרמת החיווט שלך אמורה להיראות כך. אתה יכול גם להפעיל את ה-DS3231 מסיכת ה-VIN של ESP32. מתחי הפעולה של DS3231 הם 3.3 עד 5.5 VDC.

2.2. התקנת הספריות הנדרשות

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

3. חומרה

תזדקק לחומרה הבאה לתכנון שעון RTC מבוסס DS3231 עם ESP32:

  • לוח פיתוח ESP32
  • מודול RTC DS3231
  • סוללת CR2032
  • חוטי מגשר
  • קרש לחם

4. קוד

לאחר התקנת ספריית RTC, החלק הבא הוא לכתוב את הקוד עבור DS3231 ולהעלות אותו ללוח ESP32. ראשית, עליך לכתוב את הקוד כדי להגדיר את השעה הנוכחית שלך. לאחר שתגדיר את השעה ב-DS3231, הוא יזכור את השעה וימשיך לפעול גם אם לוח ה-ESP32 שלך יכבה.

כעת פתחו את Arduino IDE, קומפלו וצרבו את הקוד ללוח ESP32.

#include
#include

RTC_DS3231 rtc ; // אתחול מופע של המחלקה RTC_DS3231

בָּטֵל להכין ( ) {
סידורי. התחל ( 115200 ) ;
חוּט. התחל ( ) ;

אם ( ! rtc. התחל ( ) ) {
סידורי. println ( 'RTC לא זוהה' ) ;
בזמן ( 1 ) ; // השהה ללא הגבלת זמן אם RTC לא נמצא
}

//בטל את ההערה בשורה למטה כדי להגדיר את התאריך והשעה הראשוניים
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

בָּטֵל לוּלָאָה ( ) {
// קרא את השעה הנוכחית מהחיישן (DS3231)
DateTime עכשיו = rtc. עַכשָׁיו ( ) ;

// הדפס את התאריך והשעה באותה שורה עם שתי ספרות עבור שעות, דקות ושניות
סידורי. הדפס ( 'דייט נוכחי: ' ) ;
סידורי. הדפס ( עַכשָׁיו. שָׁנָה ( ) , DEC ) ;
סידורי. הדפס ( '/' ) ;
printTwoDigits ( עַכשָׁיו. חוֹדֶשׁ ( ) ) ;
סידורי. הדפס ( '/' ) ;
printTwoDigits ( עַכשָׁיו. יְוֹם ( ) ) ;
סידורי. הדפס ( ' זמן נוכחי: ' ) ;
printTwoDigits ( עַכשָׁיו. שָׁעָה ( ) ) ;
סידורי. הדפס ( ':' ) ;
printTwoDigits ( עַכשָׁיו. דַקָה ( ) ) ;
סידורי. הדפס ( ':' ) ;
printTwoDigits ( עַכשָׁיו. שְׁנִיָה ( ) ) ;
סידורי. println ( ) ;

לְעַכֵּב ( 1000 ) ; // עדכן כל שנייה
}

בָּטֵל printTwoDigits ( int מספר ) {
אם ( מספר < 10 ) {
סידורי. הדפס ( '0' ) ; // הוסף אפס מוביל עבור מספרים חד ספרתיים
}
סידורי. הדפס ( מספר ) ;
}

4.1. הסבר קוד

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

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

הגדרת השעון בפעם הראשונה

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

//rtc.adjust(DateTime(__DATE__, __TIME__));

לאחר קביעת השעה, עליך להעלות מחדש את הקוד לעיל, אך הפעם אתה חייב הערה על שורת הפונקציה rtc.adjust() . אחרת, זה ידרוס את הזמן שהוגדר קודם לכן וכאשר ה-ESP32 שלך כבוי, ה-RTC יתחיל שוב מרגע שהעלית את הקוד.

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

בתוך ה לוּלָאָה חלק, התאריך והשעה הנוכחיים נקראים מהמודול DS3231 באמצעות הפונקציה rtc.now() . רכיבי התאריך והשעה נשלפים והתאריך המעוצב מודפס על הצג הטורי של Arduino IDE כל שנייה אחת.

5. פלט

לאחר העלאת הקוד ללוח ESP32, תראה שהשעה תתחיל להדפיס על הצג הטורי של Arduino IDE.

6. כיצד להציג את הזמן RTC DS3231 על מסך OLED באמצעות ESP32

אתה יכול גם ללכת צעד אחד קדימה ולהציג את השעה על מסך ה-OLED שלך לאחר קריאתו מ-DS3231. בשביל זה, אתה צריך להתקין את ספריית Adafruit GFX SSD1306 ב- Arduino IDE.

לאחר ההתקנה, חבר את ה-ESP32 עם מודול ה-OLED וה-RTC בתצורה הבאה.

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

כעת העלה את קוד ה-DS3231 הבא ללוח ESP32.

#include
#include
#include
#include 'RTClib.h'

RTC_DS3231 rtc ;

לְהַשְׁחִיר ימים [ 7 ] [ 12 ] = { 'יוֹם רִאשׁוֹן' , 'יוֹם שֵׁנִי' , 'יוֹם שְׁלִישִׁי' , 'יום רביעי' , 'יוֹם חֲמִישִׁי' , 'יוֹם שִׁישִׁי' , 'יום שבת' } ;

צג Adafruit_SSD1306 = Adafruit_SSD1306 ( 128 , 64 , & חוּט , - 1 ) ;

בָּטֵל להכין ( ) {
סידורי. התחל ( 115200 ) ;

לְהַצִיג. התחל ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

אם ( ! rtc. התחל ( ) ) {
סידורי. println ( 'לא הצליח למצוא RTC! בדוק מעגל.' ) ;
בזמן ( 1 ) ;
}
//בטל את ההערה בשורה למטה בזמן הגדרת השעה בפעם הראשונה
//rtc.adjust(DateTime(__DATE__, __TIME__));
לְהַצִיג. תצוגה ברורה ( ) ;
לְהַצִיג. setTextColor ( לבן ) ;
לְהַצִיג. setTextSize ( 2 ) ;
לְהַצִיג. setCursor ( 0 , עשרים ) ;
לְהַצִיג. הדפס ( 'שעון RTC' ) ;
לְהַצִיג. לְהַצִיג ( ) ;
לְעַכֵּב ( 5000 ) ;
}

בָּטֵל לוּלָאָה ( ) {
DateTime עכשיו = rtc. עַכשָׁיו ( ) ;

לְהַצִיג. תצוגה ברורה ( ) ;
לְהַצִיג. setTextSize ( 2 ) ;
לְהַצִיג. setCursor ( 75 , 0 ) ;
לְהַצִיג. println ( עַכשָׁיו. שְׁנִיָה ( ) , DEC ) ;
לְהַצִיג. setTextSize ( 2 ) ;
לְהַצִיג. setCursor ( 25 , 0 ) ;
לְהַצִיג. println ( ':' ) ;
לְהַצִיג. setTextSize ( 2 ) ;
לְהַצִיג. setCursor ( 65 , 0 ) ;
לְהַצִיג. println ( ':' ) ;
לְהַצִיג. setTextSize ( 2 ) ;
לְהַצִיג. setCursor ( 40 , 0 ) ;
לְהַצִיג. println ( עַכשָׁיו. דַקָה ( ) , DEC ) ;
לְהַצִיג. setTextSize ( 2 ) ;
לְהַצִיג. setCursor ( 0 , 0 ) ;
לְהַצִיג. println ( עַכשָׁיו. שָׁעָה ( ) , DEC ) ;
לְהַצִיג. setTextSize ( 2 ) ;
לְהַצִיג. setCursor ( 0 , 25 ) ;
לְהַצִיג. println ( עַכשָׁיו. יְוֹם ( ) , DEC ) ;
לְהַצִיג. הדפס ( ימים [ עַכשָׁיו. יום בשבוע ( ) ] ) ;
לְהַצִיג. setTextSize ( 2 ) ;
לְהַצִיג. setCursor ( עשרים , 25 ) ;
לְהַצִיג. println ( '-' ) ;
לְהַצִיג. setTextSize ( 2 ) ;
לְהַצִיג. setCursor ( 35 , 25 ) ;
לְהַצִיג. println ( עַכשָׁיו. חוֹדֶשׁ ( ) , DEC ) ;
לְהַצִיג. setTextSize ( 2 ) ;
לְהַצִיג. setCursor ( 60 , 25 ) ;
לְהַצִיג. println ( '-' ) ;
לְהַצִיג. setTextSize ( 2 ) ;
לְהַצִיג. setCursor ( 75 , 25 ) ;
לְהַצִיג. println ( עַכשָׁיו. שָׁנָה ( ) , DEC ) ;
לְהַצִיג. לְהַצִיג ( ) ;
}

הסבר קוד

הקוד התחיל בכמה ספריות חשובות שנדרשות עבור מסכי RTC ו-OLED. תצוגת ה-OLED מוגדרת באמצעות ספריית Adafruit SSD1306.

בחלק הלולאה, התאריך והשעה הנוכחיים מתקבלים באמצעות ה-rtc.now(). לאחר מכן, מסך ה-OLED נמחק ורכיבי הזמן מוצגים בפורמט שעון דיגיטלי. אתה יכול גם לשנות את הקוד כדי להתאים את פורמט התאריך והשעה.

לאחר העלאת הקוד ללוח שלך, תקבל את השעה הנוכחית על מסך ה-OLED.

הערה: הקוד לעיל משתמש ב- 0x3C כתובת I2C עבור OLED. זוהי כתובת ה-I2C הנפוצה ביותר הזמינה בתצוגות SSD1306 OLED. אם אתה רוצה למצוא את כתובת I2C עבור מסך ה-OLED שלך, אתה יכול להפעיל את קוד סורק I2C .

סיכום

DS3231 הוא חיישן RTC שניתן להשתמש בו לשמירה על זמן. יש לו גיבוי סוללה שיכול לשמור על זמן מדויק גם אם לוח המיקרו-בקר שלך כבוי. כדי לממשק את ESP2 עם DS3231, עליך להתקין את ספריית RTClib ב-Arduino IDE שלך. לאחר מכן, עליך לחבר את מודול RTC על פרוטוקול I2C באמצעות הפין הדיגיטלי של ESP32. לאחר החיבור, פשוט העלה את הקוד והתאם את השעה. כעת חיישן ה-RTC ישמור על הזמן, ותוכל לקרוא אותו בצג הטורי שלך בפרויקטים מבוססי זמן עיצוב.