كيفية ربط وحدة بطاقة MicroSD مع ESP32 باستخدام Arduino IDE

Kyfyt Rbt Whdt Btaqt Microsd M Esp32 Bastkhdam 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.3 فولت، لذلك لا يمكن توصيلها مباشرة بـ ESP32 أو أي لوحة تحكم دقيقة أخرى. للقيام بذلك، نحتاج إلى استخدام وحدة بطاقة SD أو المستشعر الذي يعمل بجهد يزيد عن 5 فولت.

1.1. بينوت

تتميز بطاقة MicroSD بإجمالي ستة دبابيس. اثنان منهم عبارة عن دبابيس طاقة: VCC وGND. بينما يتم استخدام دبابيس القراءة الأربعة لبروتوكول اتصال SPI. فيما يلي تفاصيل كل هذه المسامير الستة:

دبابيس الطاقة:

  • بطاقة الائتمان الافتراضية: يتصل بدبوس ESP32 5V.
  • أرض الواقع: يتصل بدبوس ESP32 الأرضي (GND).

دبابيس SPI:

  • ميسو: (Master In Slave Out) يتصل بمنفذ ESP32 MOSI (Master Out Slave In).
  • دخان: يتصل بدبوس ESP32 MISO (Master In Slave Out).
  • سك: يتصل بدبوس ESP32 SCK (الساعة التسلسلية).
  • سس: (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 د19 د18 د5
HSPI D13 D12 د14 د15

متعلق ب: مرجع Pinout ESP32 – دليل كامل

2.2. جهّز بطاقة SD

بعد ذلك، قبل أن تتمكن من متابعة قراءة البيانات وكتابتها على بطاقة MicroSD، عليك أولاً إعدادها عن طريق تنسيق أي بيانات سابقة فيها.

افتح بطاقة SD الخاصة بك باستخدام أي قارئ بطاقات و شكل هو - هي.

حدد FAT32 لنظام ملفات البطاقة الخاص بك وانقر فوق يبدأ .

بعد تهيئة البطاقة، حدد نعم .

الآن أصبحت بطاقة SD الخاصة بك جاهزة للتفاعل مع ESP32 باستخدام وحدة بطاقة SD.

2.3. رسم تخطيطى

لتوصيل مستشعر بطاقة MicroSD بـ ESP32، اتبع التكوين الموضح أدناه:

فيما يلي جدول تكوين الدبوس لسلك التوصيل:

بطاقة مايكرو التنمية المستدامة ESP32
أرض أرض
VCC يأتي
CS د5
دخان D23
SCK د18
ميسو د19

3. الأجهزة

بالنسبة للأجهزة، تحتاج فقط إلى بعض أسلاك التوصيل ولوحة التجارب بالإضافة إلى وحدة ESP32 وبطاقة SD.

4. الكود

سنقوم الآن بكتابة رمز من شأنه إنشاء ملف نصي داخل بطاقة MicroSD وبعد ذلك، يقوم بكتابة بعض السلاسل النصية لذلك. بمجرد الانتهاء من ذلك، سوف نقرأ محتوى الملف النصي على شاشة Arduino IDE التسلسلية.

ابدأ تشغيل Arduino IDE وقم بتجميع الكود المحدد. بعد ذلك قم بحرقه على لوحة ESP32 الخاصة بك:

#تشمل

#تشمل

ملف ماي فايل ;
مقدار ثابت كثافة العمليات CS = 5 ;

// اكتب الرسالة المعطاة إلى ملف في المسار المحدد
فارغ ملف الكتابة ( مقدار ثابت شار * طريق , مقدار ثابت شار * رسالة ) {
// افتح الملف. وهو يدعم ملف واحد لفتحه في كل مرة
// أغلق الملف الآخر قبل فتح ملف جديد
ملفي = SD. يفتح ( طريق , FILE_WRITE ) ;

لو ( ملفي ) {
مسلسل. printf ( 'الكتابة إلى %s' , طريق ) ;
ملفي. println ( رسالة ) ;
ملفي. يغلق ( ) ; // أغلق الملف
مسلسل. println ( 'مكتمل.' ) ;
} آخر {
مسلسل. println ( 'خطأ في فتح الملف' ) ;
مسلسل. println ( طريق ) ;
}
}

// طباعة محتوى الملف على المسار المحدد
فارغ إقرا الملف ( مقدار ثابت شار * طريق ) {
// فتح الملف
ملفي = SD. يفتح ( طريق ) ;
لو ( ملفي ) {
مسلسل. printf ( 'قراءة الملف من %s ' , طريق ) ;
// اقرأ الملف كاملاً حتى تصل إلى الأخير
بينما ( ملفي. متاح ( ) ) {
مسلسل. يكتب ( ملفي. يقرأ ( ) ) ;
}
ملفي. يغلق ( ) ; // أغلق الملف
} آخر {
// إذا فشل فتح الملف، فاطبع خطأ:
مسلسل. println ( 'خطأ في فتح ملف test.txt' ) ;
}
}

فارغ يثبت ( ) {
مسلسل. يبدأ ( 9600 ) ;
تأخير ( 500 ) ;
بينما ( ! مسلسل ) { ; }

مسلسل. println ( 'جاري تهيئة بطاقة SD...' ) ;
لو ( ! SD. يبدأ ( CS ) ) {
مسلسل. println ( 'فشلت التهيئة!' ) ;
يعود ;
}
مسلسل. println ( 'تم التهيئة.' ) ;

ملف الكتابة ( '/اختبار.txt' , 'لينكسهنت.كوم' ) ;
إقرا الملف ( '/اختبار.txt' ) ;
}

فارغ حلقة ( ) {

}

4.1. شرح الكود

لفهم أفضل، سوف نقوم بتقسيم هذا الكود إلى أجزاء فرعية.

التهيئة والإعداد: أولاً، بدأ الكود بتضمين بعض المكتبات المهمة المتعلقة بوحدة بطاقة SD. تتم إضافة مكتبة SPI.h للتواصل مع بطاقة SD وSD.h للتعامل مع عمليات بطاقة SD. وبعد ذلك، يتم تعريف متغير عالمي ملفي من نوع الملف لإدارة عمليات الملف. تم تعيين ثابت CS على الرقم 5، والذي سيتم استخدامه كدبوس تحديد الشريحة (CS) لبطاقة SD.

وظيفة الإعداد (): داخل وظيفة الإعداد، يبدأ الاتصال التسلسلي. بعد ذلك، قمنا بتهيئة وحدة بطاقة 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) ومسارًا كمدخل. تحاول هذه الوظيفة إنشاء دليل بالمسار المحدد وطباعة الرسائل التي تشير إلى النجاح أو الفشل.

#تشمل 'FS.h'

#تشمل 'SD.h'

#تشمل 'SPI.h'

فارغ createDir ( خ :: خ.س & خ , مقدار ثابت شار * طريق ) {

مسلسل. printf ( ''إنشاء الدليل: %s ' , طريق ) ;

لو ( خ. mkdir ( طريق ) ) {

مسلسل. println ( 'دير خلق' ) ;

} آخر {

مسلسل. println ( 'فشل مكدير' ) ;

}

}

فارغ يثبت ( ) {



مسلسل. يبدأ ( 115200 ) ;

// تهيئة بطاقة SD

لو ( ! SD. يبدأ ( ) ) {

مسلسل. println ( 'فشل تركيب البطاقة' ) ;

يعود ;

}

// قم بإنشاء دليل باسم 'mydir'

createDir ( SD , '/ ميدير' ) ;

}

فارغ حلقة ( ) {



}

في الإخراج، يمكنك رؤية أنه تم إنشاء دليل جديد باستخدام /mydir اسم.

6.2. قائمة الدلائل في بطاقة MicroSD

في الكود أدناه، سنقوم بإدراج جميع الأدلة الموجودة داخل بطاقة MicroSD. ال listDir تسرد الوظيفة بشكل متكرر محتويات الدليل الموجود على بطاقة SD. يقوم بطباعة معلومات حول كل من الدلائل (المسبوقة بـ 'DIR') والملفات (المسبقة بـ 'FILE')، بما في ذلك أسمائها وأحجامها.

#تشمل 'FS.h'
#تشمل 'SD.h'
#تشمل 'SPI.h'

فارغ listDir ( خ :: خ.س & خ , مقدار ثابت شار * dirname , uint8_t المستويات ) {
مسلسل. printf ( 'دليل القائمة: %s ' , dirname ) ;
جذر الملف = خ. يفتح ( dirname ) ;
لو ( ! جذر ) {
مسلسل. println ( 'فشل في فتح الدليل' ) ;
يعود ;
}
لو ( ! جذر. isDirectory ( ) ) {
مسلسل. println ( 'ليس دليلا' ) ;
يعود ;
}
ملف الملف = جذر. openNextFile ( ) ;
بينما ( ملف ) {
لو ( ملف. isDirectory ( ) ) {
مسلسل. مطبعة ( ' أنت : ' ) ;
مسلسل. println ( ملف. اسم ( ) ) ;
لو ( المستويات ) {
listDir ( خ , ملف. اسم ( ) , المستويات - 1 ) ;
}
} آخر {
مسلسل. مطبعة ( ' ملف: ' ) ;
مسلسل. مطبعة ( ملف. اسم ( ) ) ;
مسلسل. مطبعة ( ' مقاس: ' ) ;
مسلسل. println ( ملف. مقاس ( ) ) ;
}
ملف = جذر. openNextFile ( ) ;
}
}

فارغ يثبت ( ) {
مسلسل. يبدأ ( 115200 ) ;
لو ( ! SD. يبدأ ( ) ) {
مسلسل. println ( 'فشل تركيب البطاقة' ) ;
يعود ;
}
listDir ( SD , '/' , 0 ) ;
}

فارغ حلقة ( ) {

}

في الإخراج، يمكنك رؤية ملفين مختلفين. أحدهما عبارة عن ملف نصي والآخر عبارة عن دليل قمنا بإنشائه بالداخل في الكود السابق.

6.3. إزالة الدلائل

سنقوم الآن بإزالة الدلائل والملفات النصية التي تم إنشاؤها مسبقًا. ولهذا سوف نستخدم RemoveDir الدالة، سيحاول إزالة الدليل المحدد بواسطة المسار. إذا نجحت، فإنه يطبع تمت إزالة دير ; وإلا فإنه يطبع فشل rmdir .

#تشمل 'FS.h'
#تشمل 'SD.h'
#تشمل 'SPI.h'

فارغ RemoveDir ( خ :: خ.س & خ , مقدار ثابت شار * طريق ) {
مسلسل. printf ( 'إزالة الدليل: %s ' , طريق ) ;
لو ( خ. هو جمهورية مقدونيا ( طريق ) ) {
مسلسل. println ( 'تمت إزالة دير' ) ;
} آخر {
مسلسل. println ( 'فشل رمدير' ) ;
}
}

فارغ يثبت ( ) {
مسلسل. يبدأ ( 115200 ) ;

لو ( ! SD. يبدأ ( ) ) {
مسلسل. println ( 'فشل تركيب البطاقة' ) ;
يعود ;
}


}

فارغ حلقة ( ) {

}

6.4. احصل على نوع بطاقة MicroSD

بطاقة مايكرو اس دي أو س com.ecure د تم تصميم البطاقة الرقمية في الأصل من قبل جمعية بطاقة SD، وتم تصميمها للاستخدام في الأجهزة المحمولة مثل الهواتف الذكية والكاميرات. تحتوي بطاقات SD بشكل أساسي على أربعة أنواع من العائلات:

  • SDSC (السعة القياسية SD): توفر هذه البطاقات نطاقًا متواضعًا من سعة التخزين تبلغ 2 جيجابايت وتستخدم نظامي الملفات FAT-12 وFAT-16.
  • SDHC (SD عالي السعة): تتراوح سعة هذه البطاقات من 2 جيجابايت إلى 32 جيجابايت وتستخدم نظام الملفات FAT-32.
  • SDXC (السعة الموسعة SD): تستخدم هذه البطاقات نظام الملفات exFAT وتبدأ من 32 جيجابايت إلى 2 تيرابايت.
  • سديو: تخدم بطاقات SDIO غرضًا مزدوجًا من خلال الجمع بين تخزين البيانات ووظائف الإدخال/الإخراج.

للتحقق من نوع بطاقتك، قم بتشغيل الكود أدناه:

#تشمل 'FS.h'
#تشمل 'SD.h'
#تشمل 'SPI.h'

فارغ يثبت ( ) {
مسلسل. يبدأ ( 115200 ) ;

لو ( ! SD. يبدأ ( ) ) {
مسلسل. println ( 'فشل تركيب البطاقة' ) ;
يعود ;
}

uint8_t نوع البطاقة = SD. نوع البطاقة ( ) ;
لو ( نوع البطاقة == CARD_NONE ) {
مسلسل. println ( 'لا توجد بطاقة SD مرفقة' ) ;
يعود ;
}

مسلسل. مطبعة ( 'نوع بطاقة SD:' ) ;
لو ( نوع البطاقة == CARD_MMC ) {
مسلسل. println ( 'MMC' ) ;
} آخر لو ( نوع البطاقة == بطاقة_SD ) {
مسلسل. println ( 'SDSC' ) ;
} آخر لو ( نوع البطاقة == CARD_SDHC ) {
مسلسل. println ( 'اس دي اتش سي' ) ;
} آخر {
مسلسل. println ( 'مجهول' ) ;
}

uint64_t حجم البطاقة = SD. حجم البطاقة ( ) / ( 1024 * 1024 ) ;
مسلسل. printf ( 'حجم بطاقة SD: %lluMB ' , حجم البطاقة ) ;
}

فارغ حلقة ( ) {
}

نظرًا لأن لدي بطاقة سعة 32 جيجابايت، يمكنك أن ترى أنها تقع في نطاق SDHC بطاقات.

6.5. احصل على حجم بطاقة MicroSD

يمكنك أيضًا الحصول على حجم بطاقة SD عن طريق تحميل الكود أدناه على لوحة ESP32 الخاصة بك.

#تشمل 'FS.h'
#تشمل 'SD.h'
#تشمل 'SPI.h'

فارغ يثبت ( ) {
مسلسل. يبدأ ( 115200 ) ;

لو ( ! SD. يبدأ ( ) ) {
مسلسل. println ( 'فشل تركيب البطاقة' ) ;
يعود ;
}

uint8_t نوع البطاقة = SD. نوع البطاقة ( ) ;
لو ( نوع البطاقة == CARD_NONE ) {
مسلسل. println ( 'لا توجد بطاقة SD مرفقة' ) ;
يعود ;
}

uint64_t حجم البطاقة = SD. حجم البطاقة ( ) / ( 1024 * 1024 ) ;
مسلسل. printf ( 'حجم بطاقة SD: %lluMB ' , حجم البطاقة ) ;

// يمكن استدعاء وظائف أخرى (listDir، createDir، RemoveDir، وما إلى ذلك) هنا
}

فارغ حلقة ( ) {

}

من الإخراج، يمكنك أن ترى أن لدي بطاقة SD بسعة 30 جيجابايت تقريبًا.

خاتمة

يتم استخدام وحدة بطاقة MicroSD لقراءة وكتابة البيانات من بطاقة SD باستخدام لوحة ESP32. تتواصل وحدة بطاقة MicroSD مع وحدة التحكم الدقيقة باستخدام واجهة SPI. لذا يمكنك إما استخدام مكتبة SPI أو تحديد دبابيس SPI الخاصة بك داخل الكود. بمجرد الاتصال، يمكنك قراءة وكتابة ملف نصي، أو إنشاء أدلة جديدة في بطاقة SD الخاصة بك.