כיצד לממשק מודול כרטיס MicroSD עם ESP32 באמצעות Arduino IDE

Kyzd Lmmsq Mwdwl Krtys Microsd M Esp32 B Mz Wt Arduino Ide



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

מאמר זה יסביר את השלבים להתממשקות כרטיס MicroSD ללוח ESP32 באמצעות Arduino IDE.

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







1. מודול כרטיס MicroSD



2. כיצד לממשק ESP32 עם מודול כרטיס MicroSD



3. חומרה





4. קוד

5. פלט



6. ביצוע פונקציות שונות בכרטיס MicroSD באמצעות ESP32

סיכום

1. מודול כרטיס MicroSD

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

מתח העבודה של מודול כרטיס ה-SD הוא 3.3V, כך שלא ניתן לחבר אותו ישירות ל-ESP32 או לכל לוח מיקרו-בקר אחר. לשם כך, עלינו להשתמש במודול כרטיס SD או בחיישן שעובד מעל 5V.

1.1. Pinout

כרטיס ה-MicroSD כולל בסך הכל שישה פינים. שניים מהם הם פיני חשמל: VCC ו-GND. בעוד שהקריאה ארבע פינים משמשים לפרוטוקול תקשורת SPI. להלן הפרטים עבור כל ששת הפינים הללו:

פיני כוח:

  • VCC: מתחבר לפין ESP32 5V.
  • GND: מתחבר לפין ESP32 הארקה (GND).

סיכות SPI:

  • מיסו: (Master In Slave Out) מתחבר לפין ESP32 MOSI (Master Out Slave In).
  • עָשָׁן: מתחבר לפין ESP32 MISO (Master In Slave Out).
  • SCK: מתחבר לפין ESP32 SCK (שעון טורי).
  • SS: (Slave Select) מתחבר לפין שצוין בקוד Arduino בתור פין SS (Slave Select).

2. כיצד לממשק ESP32 עם מודול כרטיס MicroSD

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

בעת שימוש בסיכות SPI ברירת מחדל, אנו הולכים להוסיף את SD ח ו SD_MMC.h ספריות. כברירת מחדל, ספריות אלה לוקחות את פיני VSPI SPI (23, 19, 18, 5) עבור תקשורת SPI. עם זאת, אתה יכול גם להגדיר פינים אחרים עבור תקשורת SPI.

ה-ESP32 מכיל שני ממשקי SPI HSPI ו- VSPI עם פירוט הפינים שלהם כדלקמן:

SPI עָשָׁן מיסו CLK CS
VSPI D23 D19 D18 D5
HSPI D13 D12 D14 D15

קָשׁוּר: ESP32 Pinout Reference - מדריך מלא

2.2. הכן את כרטיס ה-SD

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

פתח את כרטיס ה-SD שלך באמצעות כל קורא כרטיסים ו פוּרמָט זה.

בחר את ה-FAT32 עבור מערכת הקבצים של הכרטיס שלך ולחץ הַתחָלָה .

לאחר פירמוט הכרטיס, בחר בסדר .

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

2.3. תרשים סכמטי

כדי לחבר את חיישן כרטיס ה-MicroSD עם ESP32, בצע את התצורה המפורטת להלן:

להלן הטבלה לתצורת הפינים של חוט החיבור:

כרטיס מיקרו אס די ESP32
GND GND
VCC לבוא
CS D5
עָשָׁן D23
SCK D18
מיסו D19

3. חומרה

עבור חומרה, אתה רק צריך כמה חוטי מגשר ולוח לחם יחד עם ESP32 ומודול כרטיסי SD.

4. קוד

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

הפעל את Arduino IDE והרכיב את הקוד הנתון. לאחר מכן צרוב אותו ללוח ה-ESP32 שלך:

#include

#include

קובץ myFile ;
const int CS = 5 ;

// כתוב את ההודעה הנתונה לקובץ בנתיב שצוין
בָּטֵל WriteFile ( const לְהַשְׁחִיר * נָתִיב , const לְהַשְׁחִיר * הוֹדָעָה ) {
// פתח את הקובץ. הוא תומך בפתיחה של קובץ אחד בכל פעם
// סגור את הקובץ השני לפני פתיחת קובץ חדש
המסמך שלי = SD. לִפְתוֹחַ ( נָתִיב , FILE_WRITE ) ;

אם ( המסמך שלי ) {
סידורי. printf ( 'כותב אל %s' , נָתִיב ) ;
המסמך שלי. println ( הוֹדָעָה ) ;
המסמך שלי. סגור ( ) ; // סגור את הקובץ
סידורי. println ( 'הושלם'. ) ;
} אַחֵר {
סידורי. println ( 'שגיאה בפתיחת קובץ' ) ;
סידורי. println ( נָתִיב ) ;
}
}

// הדפס את תוכן הקובץ בנתיב שצוין
בָּטֵל ReadFile ( const לְהַשְׁחִיר * נָתִיב ) {
// קובץ פתוח
המסמך שלי = SD. לִפְתוֹחַ ( נָתִיב ) ;
אם ( המסמך שלי ) {
סידורי. printf ( 'קורא קובץ מ-%s \n ' , נָתִיב ) ;
// קרא את הקובץ השלם עד שהגיע האחרון
בזמן ( המסמך שלי. זמין ( ) ) {
סידורי. לִכתוֹב ( המסמך שלי. לקרוא ( ) ) ;
}
המסמך שלי. סגור ( ) ; // סגור את הקובץ
} אַחֵר {
// אם הקובץ לא הצליח לפתוח, הדפס שגיאה:
סידורי. println ( 'שגיאה בפתיחת test.txt' ) ;
}
}

בָּטֵל להכין ( ) {
סידורי. התחל ( 9600 ) ;
לְעַכֵּב ( 500 ) ;
בזמן ( ! סידורי ) { ; }

סידורי. println ( 'מאתחל כרטיס SD...' ) ;
אם ( ! SD. התחל ( CS ) ) {
סידורי. println ( 'אתחול נכשל!' ) ;
לַחֲזוֹר ;
}
סידורי. println ( 'אתחול נעשה.' ) ;

WriteFile ( '/test.txt' , 'Linuxhint.com' ) ;
ReadFile ( '/test.txt' ) ;
}

בָּטֵל לוּלָאָה ( ) {

}

4.1. הסבר קוד

להבנה טובה יותר, נחלק את הקוד הזה לחלקי משנה.

אתחול והגדרה: ראשית, הקוד התחיל על ידי הכללת מספר ספריות חשובות הקשורות למודול כרטיס ה-SD. ספריית SPI.h מתווספת לתקשורת עם כרטיס ה-SD ו-SD.h לטיפול בפעולות כרטיס SD. לאחר מכן, הוא מגדיר משתנה גלובלי המסמך שלי מסוג קובץ לניהול פעולות קבצים. קבוע CS מוגדר לפין 5, שישמש כסיכת ה-Chip Select (CS) עבור כרטיס ה-SD.

פונקציית Setup(): בתוך פונקציית ההגדרה, מופעלת תקשורת טורית. לאחר מכן, אתחלנו את מודול כרטיס ה-SD באמצעות הפונקציה SD.begin(CS). בנוסף, הגדרנו גם שתי פונקציות שונות לקריאה וכתיבת טקסט לקובץ טקסט.

כתיבה לכרטיס SD: הפונקציה WriteFile() פותחת את הקובץ test.txt לכתיבה באמצעות SD.open(path, FILE_WRITE). לאחר מכן, הוא כותב את המחרוזת Linuxhint.com לקובץ באמצעות myFile.println(message).

קריאה מכרטיס SD: כדי לקרוא את תוכן הקובץ, השתמשנו בפונקציה ReadFile() . אם נקרא בהצלחה, הנתונים יישלחו ליציאה הטורית של Arduino ויוצגו על הצג הטורי של Arduino IDE.

5. פלט

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

6. ביצוע פונקציות שונות בכרטיס MicroSD באמצעות ESP32

אנו יכולים לבצע פעולות שונות כמו יצירה, הסרה או הוספה של ספריות בכרטיסי MicroSD ישירות דרך קוד Arduino IDE.

6.1. יצירת ספריות בכרטיס MicroSD

הקוד שלהלן יצור ספרייה חדשה בתוך כרטיס ה-MicroSD. הוא מגדיר פונקציה שנקראת createDir שלוקח אובייקט של מערכת קבצים (fs::FS) ונתיב כקלט. פונקציה זו מנסה ליצור ספרייה עם הנתיב שצוין ומדפיסה הודעות המציינות הצלחה או כישלון.

#include 'FS.h'

#include 'SD.h'

#include 'SPI.h'

בָּטֵל createDir ( fs :: FS & fs , const לְהַשְׁחִיר * נָתִיב ) {

סידורי. printf ( 'יוצר Dir: %s \n ' , נָתִיב ) ;

אם ( fs. mkdir ( נָתִיב ) ) {

סידורי. println ( 'Dir נוצר' ) ;

} אַחֵר {

סידורי. println ( 'mkdir נכשל' ) ;

}

}

בָּטֵל להכין ( ) {



סידורי. התחל ( 115200 ) ;

// אתחול כרטיס SD

אם ( ! SD. התחל ( ) ) {

סידורי. println ( 'הרכבת הכרטיס נכשלה' ) ;

לַחֲזוֹר ;

}

// צור ספרייה בשם 'mydir'

createDir ( SD , '/mydir' ) ;

}

בָּטֵל לוּלָאָה ( ) {



}

בפלט, אתה יכול לראות ספרייה חדשה נוצרה עם /mydir שֵׁם.

6.2. ספריות רישום בכרטיס MicroSD

בקוד שלהלן, אנו הולכים לרשום את כל הספריות הקיימות בתוך כרטיס ה-MicroSD. ה listDir הפונקציה מפרטת באופן רקורסיבי את התוכן של ספרייה בכרטיס SD. הוא מדפיס מידע על שתי הספריות (עם קידומת 'DIR') ועל הקבצים (עם קידומת 'FILE'), כולל השמות והגדלים שלהם.

#include 'FS.h'
#include 'SD.h'
#include 'SPI.h'

בָּטֵל listDir ( fs :: FS & fs , const לְהַשְׁחִיר * שם שם , uint8_t רמות ) {
סידורי. printf ( 'ספריית רישום: %s \n ' , שם שם ) ;
שורש הקובץ = fs. לִפְתוֹחַ ( שם שם ) ;
אם ( ! שורש ) {
סידורי. println ( 'פתיחת הספרייה נכשלה' ) ;
לַחֲזוֹר ;
}
אם ( ! שורש. isDirectory ( ) ) {
סידורי. println ( 'לא ספרייה' ) ;
לַחֲזוֹר ;
}
קובץ קובץ = שורש. openNextFile ( ) ;
בזמן ( קוֹבֶץ ) {
אם ( קוֹבֶץ. isDirectory ( ) ) {
סידורי. הדפס ( ' אתה : ' ) ;
סידורי. println ( קוֹבֶץ. שֵׁם ( ) ) ;
אם ( רמות ) {
listDir ( fs , קוֹבֶץ. שֵׁם ( ) , רמות - 1 ) ;
}
} אַחֵר {
סידורי. הדפס ( 'קובץ:' ) ;
סידורי. הדפס ( קוֹבֶץ. שֵׁם ( ) ) ;
סידורי. הדפס ( ' גודל: ' ) ;
סידורי. println ( קוֹבֶץ. גודל ( ) ) ;
}
קוֹבֶץ = שורש. openNextFile ( ) ;
}
}

בָּטֵל להכין ( ) {
סידורי. התחל ( 115200 ) ;
אם ( ! SD. התחל ( ) ) {
סידורי. println ( 'הרכבת הכרטיס נכשלה' ) ;
לַחֲזוֹר ;
}
listDir ( SD , '/' , 0 ) ;
}

בָּטֵל לוּלָאָה ( ) {

}

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

6.3. הסרת ספריות

כעת נסיר את הספריות וקבצי הטקסט שנוצרו בעבר. לשם כך אנו הולכים להשתמש ב- removeDir function, זה ינסה להסיר ספריה שצוינה על ידי הנתיב. אם זה מצליח, זה מודפס Dir הוסר ; אחרת, הוא מודפס rmdir נכשל .

#include 'FS.h'
#include 'SD.h'
#include 'SPI.h'

בָּטֵל removeDir ( fs :: FS & fs , const לְהַשְׁחִיר * נָתִיב ) {
סידורי. printf ( 'מסיר Dir: %s \n ' , נָתִיב ) ;
אם ( fs. הוא rm ( נָתִיב ) ) {
סידורי. println ( 'Dir הוסר' ) ;
} אַחֵר {
סידורי. println ( 'rmdir נכשל' ) ;
}
}

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

אם ( ! SD. התחל ( ) ) {
סידורי. println ( 'הרכבת הכרטיס נכשלה' ) ;
לַחֲזוֹר ;
}


}

בָּטֵל לוּלָאָה ( ) {

}

6.4. קבל סוג כרטיס MicroSD

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

  • SDSC (Standard Capacity SD): כרטיסים אלו מציעים טווח צנוע של קיבולת אחסון של 2GB ומשתמשים במערכות הקבצים FAT-12 ו-FAT-16.
  • SDHC (High Capacity SD): כרטיסים אלה נעים בין 2GB ל-32GB ומשתמשים במערכת הקבצים FAT-32.
  • SDXC (Extended Capacity SD): כרטיסים אלה משתמשים במערכת הקבצים exFAT ומתחילים מ-32GB ועד ל-2TB.
  • SDIO: כרטיסי SDIO משרתים מטרה כפולה על ידי שילוב אחסון הנתונים עם פונקציות INPUT/OUTPUT.

כדי לבדוק את סוג הכרטיס שלך, הפעל את הקוד הבא:

#include 'FS.h'
#include 'SD.h'
#include 'SPI.h'

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

אם ( ! SD. התחל ( ) ) {
סידורי. println ( 'הרכבת הכרטיס נכשלה' ) ;
לַחֲזוֹר ;
}

uint8_t סוג כרטיס = SD. סוג כרטיס ( ) ;
אם ( סוג כרטיס == CARD_NONE ) {
סידורי. println ( 'אין כרטיס SD מחובר' ) ;
לַחֲזוֹר ;
}

סידורי. הדפס ( 'סוג כרטיס SD:' ) ;
אם ( סוג כרטיס == CARD_MMC ) {
סידורי. println ( 'MMC' ) ;
} אַחֵר אם ( סוג כרטיס == CARD_SD ) {
סידורי. println ( 'SDSC' ) ;
} אַחֵר אם ( סוג כרטיס == CARD_SDHC ) {
סידורי. println ( 'SDHC' ) ;
} אַחֵר {
סידורי. println ( 'לא ידוע' ) ;
}

uint64_t גודל כרטיס = SD. גודל כרטיס ( ) / ( 1024 * 1024 ) ;
סידורי. printf ( 'גודל כרטיס SD: %lluMB \n ' , גודל כרטיס ) ;
}

בָּטֵל לוּלָאָה ( ) {
}

מכיוון שיש לי כרטיס 32GB, אתה יכול לראות שהוא נמצא בטווח של SDHC קלפים.

6.5. קבל גודל כרטיס MicroSD

אתה יכול גם לקבל את הגודל של כרטיס ה-SD על ידי העלאת הקוד שלהלן ללוח ה-ESP32 שלך.

#include 'FS.h'
#include 'SD.h'
#include 'SPI.h'

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

אם ( ! SD. התחל ( ) ) {
סידורי. println ( 'הרכבת הכרטיס נכשלה' ) ;
לַחֲזוֹר ;
}

uint8_t סוג כרטיס = SD. סוג כרטיס ( ) ;
אם ( סוג כרטיס == CARD_NONE ) {
סידורי. println ( 'אין כרטיס SD מחובר' ) ;
לַחֲזוֹר ;
}

uint64_t גודל כרטיס = SD. גודל כרטיס ( ) / ( 1024 * 1024 ) ;
סידורי. printf ( 'גודל כרטיס SD: %lluMB \n ' , גודל כרטיס ) ;

// פונקציות אחרות (listDir, createDir, removeDir וכו') יכולות להיקרא כאן
}

בָּטֵל לוּלָאָה ( ) {

}

מהפלט, אתה יכול לראות שיש לי כרטיס SD של כ-30GB.

סיכום

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