วิธีเชื่อมต่อโมดูลการ์ด MicroSD กับ ESP32 โดยใช้ Arduino IDE

Withi Cheuxm Tx Modul Kard Microsd Kab Esp32 Doy Chi 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. พินเอาท์

การ์ด 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_MMC.ชม ห้องสมุด ตามค่าเริ่มต้น ไลบรารีเหล่านี้ใช้พิน VSPI SPI (23, 19, 18, 5) สำหรับการสื่อสาร SPI อย่างไรก็ตาม คุณยังสามารถตั้งค่าพินอื่นๆ สำหรับการสื่อสาร SPI ได้

ESP32 มีอินเทอร์เฟซ SPI สองตัว HSPI และ VSPI โดยมีรายละเอียดพินดังต่อไปนี้:

เอสพีไอ ควัน มิโซะ ซีแอลเค ซีเอส
วีเอสพีไอ D23 D19 D18 D5
เอชเอสพีไอ D13 D12 D14 D15

ที่เกี่ยวข้อง: การอ้างอิง Pinout ของ ESP32 – คู่มือฉบับสมบูรณ์

2.2. เตรียมการ์ด SD ให้พร้อม

ถัดไป ก่อนที่คุณจะสามารถดำเนินการอ่านและเขียนข้อมูลลงในการ์ด MicroSD ได้ ขั้นแรกคุณต้องตั้งค่าก่อนโดยการจัดรูปแบบข้อมูลก่อนหน้าในการ์ด

เปิดการ์ด SD ของคุณโดยใช้เครื่องอ่านการ์ดและ รูปแบบ มัน.

เลือก FAT32 สำหรับระบบไฟล์การ์ดของคุณแล้วคลิก เริ่ม -

หลังจากฟอร์แมตการ์ดแล้ว ให้เลือก ตกลง -

ตอนนี้การ์ด SD ของคุณพร้อมที่จะเชื่อมต่อกับ ESP32 โดยใช้โมดูลการ์ด SD แล้ว

2.3. แผนภาพ

ในการเชื่อมต่อเซ็นเซอร์การ์ด MicroSD กับ ESP32 ให้ปฏิบัติตามการกำหนดค่าด้านล่าง:

ต่อไปนี้เป็นตารางการกำหนดค่าพินของสายเชื่อมต่อ:

การ์ดไมโครเอสดี อีเอสพี32
จีเอ็นดี จีเอ็นดี
วีซีซี มา
ซีเอส D5
ควัน D23
เอสซีเค D18
มิโซะ D19

3. ฮาร์ดแวร์

สำหรับฮาร์ดแวร์ คุณเพียงแค่ต้องมีสายจัมเปอร์กับเขียงหั่นขนมพร้อมกับโมดูล ESP32 และการ์ด SD

4. รหัส

ตอนนี้เราจะเขียนโค้ดที่จะสร้างไฟล์ข้อความภายในการ์ด MicroSD และหลังจากนั้นจะเขียนสตริงข้อความลงไป เมื่อเสร็จแล้ว เราจะอ่านเนื้อหาของไฟล์ข้อความบนมอนิเตอร์อนุกรม Arduino IDE

เริ่ม Arduino IDE และรวบรวมโค้ดที่กำหนด หลังจากนั้นเบิร์นมันลงบนบอร์ด ESP32 ของคุณ:

#รวม

#รวม

ไฟล์ myFile -
ค่าคงที่ ภายใน ซีเอส - 5 -

// เขียนข้อความที่กำหนดไปยังไฟล์ตามเส้นทางที่ระบุ
เป็นโมฆะ เขียนไฟล์ - ค่าคงที่ ถ่าน - เส้นทาง - ค่าคงที่ ถ่าน - ข้อความ - -
//เปิดไฟล์. รองรับการเปิดไฟล์ครั้งละหนึ่งไฟล์
// ปิดไฟล์อื่นก่อนที่จะเปิดไฟล์ใหม่
myFile - เอสดี. เปิด - เส้นทาง - FILE_WRITE - -

ถ้า - myFile - -
อนุกรม พิมพ์ฉ - 'กำลังเขียนถึง %s' - เส้นทาง - -
myFile. พิมพ์ - ข้อความ - -
myFile. ปิด - - - //ปิดไฟล์
อนุกรม พิมพ์ - 'สมบูรณ์.' - -
- อื่น -
อนุกรม พิมพ์ - 'เกิดข้อผิดพลาดในการเปิดไฟล์' - -
อนุกรม พิมพ์ - เส้นทาง - -
-
-

// พิมพ์เนื้อหาไฟล์ตามเส้นทางที่ระบุ
เป็นโมฆะ อ่านไฟล์ - ค่าคงที่ ถ่าน - เส้นทาง - -
// เปิดไฟล์
myFile - เอสดี. เปิด - เส้นทาง - -
ถ้า - myFile - -
อนุกรม พิมพ์ฉ - 'กำลังอ่านไฟล์จาก %s \n - - เส้นทาง - -
// อ่านไฟล์ให้ครบจนถึงสุดท้าย
ในขณะที่ - myFile. มีอยู่ - - - -
อนุกรม เขียน - myFile. อ่าน - - - -
-
myFile. ปิด - - - //ปิดไฟล์
- อื่น -
// หากไฟล์ไม่สามารถเปิดได้ ให้พิมพ์ข้อผิดพลาด:
อนุกรม พิมพ์ - 'ข้อผิดพลาดในการเปิด test.txt' - -
-
-

เป็นโมฆะ ติดตั้ง - - -
อนุกรม เริ่ม - 9600 - -
ล่าช้า - 500 - -
ในขณะที่ - - อนุกรม - - - -

อนุกรม พิมพ์ - 'กำลังเริ่มต้นการ์ด SD...' - -
ถ้า - - เอสดี. เริ่ม - ซีเอส - - -
อนุกรม พิมพ์ - 'การเริ่มต้นล้มเหลว!' - -
กลับ -
-
อนุกรม พิมพ์ - 'การเริ่มต้นเสร็จสิ้นแล้ว' - -

เขียนไฟล์ - '/test.txt' - 'Linuxhint.com' - -
อ่านไฟล์ - '/test.txt' - -
-

เป็นโมฆะ วนซ้ำ - - -

-

4.1. คำอธิบายรหัส

เพื่อความเข้าใจที่ดีขึ้น เราจะแบ่งโค้ดนี้ออกเป็นส่วนย่อย

การเริ่มต้นและการตั้งค่า: ขั้นแรก โค้ดเริ่มต้นด้วยการรวมไลบรารีที่สำคัญบางส่วนที่เกี่ยวข้องกับโมดูลการ์ด SD มีการเพิ่มไลบรารี SPI.h สำหรับการสื่อสารกับการ์ด SD และ SD.h สำหรับการจัดการการทำงานของการ์ด SD ต่อไปจะกำหนดตัวแปรส่วนกลาง myFile ของไฟล์ประเภทเพื่อจัดการการทำงานของไฟล์ ค่าคงที่ CS ถูกตั้งค่าไว้ที่พิน 5 ซึ่งจะใช้เป็นพิน Chip Select (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 มันกำหนดฟังก์ชันที่เรียกว่า สร้างDir ที่ใช้วัตถุระบบไฟล์ (fs::FS) และเส้นทางเป็นอินพุต ฟังก์ชันนี้พยายามสร้างไดเร็กทอรีด้วยเส้นทางที่ระบุและพิมพ์ข้อความที่ระบุว่าสำเร็จหรือล้มเหลว

#รวม 'FS.h'

#รวม'SD.h'

#รวม 'SPI.h'

เป็นโมฆะ สร้างDir - FS - เอฟเอส - FS - ค่าคงที่ ถ่าน - เส้นทาง - -

อนุกรม พิมพ์ฉ - 'กำลังสร้าง Dir: %s \n - - เส้นทาง - -

ถ้า - FS mkdir - เส้นทาง - - -

อนุกรม พิมพ์ - “ไดร์เป็นคนสร้าง” - -

- อื่น -

อนุกรม พิมพ์ - 'mkdir ล้มเหลว' - -

-

-

เป็นโมฆะ ติดตั้ง - - -



อนุกรม เริ่ม - 115200 - -

// เริ่มต้นการ์ด SD

ถ้า - - เอสดี. เริ่ม - - - -

อนุกรม พิมพ์ - 'การเมานต์การ์ดล้มเหลว' - -

กลับ -

-

// สร้างไดเร็กทอรีชื่อ 'mydir'

สร้างDir - เอสดี - '/มีเดียร์' - -

-

เป็นโมฆะ วนซ้ำ - - -



-

ในผลลัพธ์ คุณจะเห็นไดเร็กทอรีใหม่ถูกสร้างขึ้นด้วย /mydir ชื่อ.

6.2. การแสดงรายการไดเรกทอรีในการ์ด MicroSD

ในโค้ดด้านล่าง เราจะแสดงรายการไดเร็กทอรีทั้งหมดที่อยู่ในการ์ด MicroSD ที่ รายการผบ ฟังก์ชั่นแสดงรายการเนื้อหาของไดเร็กทอรีบนการ์ด SD ซ้ำ ๆ โดยจะพิมพ์ข้อมูลเกี่ยวกับทั้งสองไดเร็กทอรี (นำหน้าด้วย “DIR”) และไฟล์ (นำหน้าด้วย “FILE”) รวมถึงชื่อและขนาด

#รวม 'FS.h'
#รวม'SD.h'
#รวม 'SPI.h'

เป็นโมฆะ รายการผบ - FS - เอฟเอส - FS - ค่าคงที่ ถ่าน - นามสกุล - uint8_t ระดับ - -
อนุกรม พิมพ์ฉ - 'ไดเรกทอรีรายการ: %s \n - - นามสกุล - -
ไฟล์รูท - FS เปิด - นามสกุล - -
ถ้า - - ราก - -
อนุกรม พิมพ์ - 'ไม่สามารถเปิดไดเร็กทอรี' - -
กลับ -
-
ถ้า - - ราก. เป็นไดเรกทอรี - - - -
อนุกรม พิมพ์ - 'ไม่ใช่ไดเรกทอรี' - -
กลับ -
-
ไฟล์ไฟล์ - ราก. openNextFile - - -
ในขณะที่ - ไฟล์ - -
ถ้า - ไฟล์. เป็นไดเรกทอรี - - - -
อนุกรม พิมพ์ - ' คุณ : ' - -
อนุกรม พิมพ์ - ไฟล์. ชื่อ - - - -
ถ้า - ระดับ - -
รายการผบ - FS - ไฟล์. ชื่อ - - - ระดับ - 1 - -
-
- อื่น -
อนุกรม พิมพ์ - ' ไฟล์: ' - -
อนุกรม พิมพ์ - ไฟล์. ชื่อ - - - -
อนุกรม พิมพ์ - ' ขนาด: ' - -
อนุกรม พิมพ์ - ไฟล์. ขนาด - - - -
-
ไฟล์ - ราก. openNextFile - - -
-
-

เป็นโมฆะ ติดตั้ง - - -
อนุกรม เริ่ม - 115200 - -
ถ้า - - เอสดี. เริ่ม - - - -
อนุกรม พิมพ์ - 'การเมานต์การ์ดล้มเหลว' - -
กลับ -
-
รายการผบ - เอสดี - - - 0 - -
-

เป็นโมฆะ วนซ้ำ - - -

-

ในเอาต์พุต คุณจะเห็นไฟล์สองไฟล์ที่แตกต่างกัน อันหนึ่งคือไฟล์ข้อความและอีกอันคือไดเร็กทอรีที่เราสร้างขึ้นภายในโค้ดก่อนหน้า

6.3. การลบไดเร็กทอรี

ตอนนี้เราจะลบไดเร็กทอรีและไฟล์ข้อความที่สร้างไว้ก่อนหน้านี้ เพื่อที่เราจะใช้ ลบDir ฟังก์ชันจะพยายามลบไดเร็กทอรีที่ระบุโดยพาธ หากสำเร็จก็จะพิมพ์ Dir ลบออกแล้ว - มิฉะนั้นจะพิมพ์ออกมา rmdir ล้มเหลว -

#รวม 'FS.h'
#รวม'SD.h'
#รวม 'SPI.h'

เป็นโมฆะ ลบDir - FS - เอฟเอส - FS - ค่าคงที่ ถ่าน - เส้นทาง - -
อนุกรม พิมพ์ฉ - 'กำลังลบ Dir: %s \n - - เส้นทาง - -
ถ้า - FS คือ RM - เส้นทาง - - -
อนุกรม พิมพ์ - “ไดร์ลบแล้ว” - -
- อื่น -
อนุกรม พิมพ์ - 'rmdir ล้มเหลว' - -
-
-

เป็นโมฆะ ติดตั้ง - - -
อนุกรม เริ่ม - 115200 - -

ถ้า - - เอสดี. เริ่ม - - - -
อนุกรม พิมพ์ - 'การเมานต์การ์ดล้มเหลว' - -
กลับ -
-


-

เป็นโมฆะ วนซ้ำ - - -

-

6.4. รับประเภทการ์ด MicroSD

การ์ด MicroSD หรือ ปลอดภัย ดี การ์ด igital ได้รับการออกแบบโดยสมาคมการ์ด SD และออกแบบมาเพื่อใช้ในอุปกรณ์พกพา เช่น สมาร์ทโฟนและกล้องถ่ายรูป การ์ด SD ส่วนใหญ่ประกอบด้วยตระกูลสี่ประเภท:

  • SDSC (SD ความจุมาตรฐาน): การ์ดเหล่านี้นำเสนอพื้นที่จัดเก็บข้อมูลที่พอประมาณที่ 2GB และใช้ระบบไฟล์ FAT-12 และ FAT-16
  • SDHC (SD ความจุสูง): การ์ดเหล่านี้มีขนาดตั้งแต่ 2GB ถึง 32GB และใช้ระบบไฟล์ FAT-32
  • SDXC (ขยายความจุ SD): การ์ดเหล่านี้ใช้ระบบไฟล์ exFAT และเริ่มต้นจาก 32GB ไปจนถึงสูงถึง 2TB
  • เอสดิโอ: การ์ด SDIO มีวัตถุประสงค์สองประการโดยรวมการจัดเก็บข้อมูลเข้ากับฟังก์ชัน INPUT/OUTPUT

หากต้องการตรวจสอบประเภทบัตรของคุณ ให้รันโค้ดด้านล่าง:

#รวม 'FS.h'
#รวม'SD.h'
#รวม 'SPI.h'

เป็นโมฆะ ติดตั้ง - - -
อนุกรม เริ่ม - 115200 - -

ถ้า - - เอสดี. เริ่ม - - - -
อนุกรม พิมพ์ - 'การเมานต์การ์ดล้มเหลว' - -
กลับ -
-

uint8_t ประเภทบัตร - เอสดี. ประเภทบัตร - - -
ถ้า - ประเภทบัตร - CARD_NONE - -
อนุกรม พิมพ์ - 'ไม่ได้แนบการ์ด SD' - -
กลับ -
-

อนุกรม พิมพ์ - 'ประเภทการ์ด SD:' - -
ถ้า - ประเภทบัตร - CARD_MMC - -
อนุกรม พิมพ์ - 'เอ็มเอ็มซี' - -
- อื่น ถ้า - ประเภทบัตร - CARD_SD - -
อนุกรม พิมพ์ - “สปส.” - -
- อื่น ถ้า - ประเภทบัตร - CARD_SDHC - -
อนุกรม พิมพ์ - “เอสดีเอชซี” - -
- อื่น -
อนุกรม พิมพ์ - 'ไม่รู้จัก' - -
-

uint64_t ขนาดการ์ด - เอสดี. ขนาดการ์ด - - - - 1,024 - 1,024 - -
อนุกรม พิมพ์ฉ - 'ขนาดการ์ด SD: %lluMB \n - - ขนาดการ์ด - -
-

เป็นโมฆะ วนซ้ำ - - -
-

เนื่องจากฉันมีการ์ด 32GB คุณจะเห็นว่ามันอยู่ในช่วง SDHC การ์ด

6.5. รับขนาดการ์ด MicroSD

คุณยังสามารถรับขนาดของการ์ด SD ได้โดยการอัปโหลดโค้ดด้านล่างไปยังบอร์ด ESP32 ของคุณ

#รวม 'FS.h'
#รวม'SD.h'
#รวม 'SPI.h'

เป็นโมฆะ ติดตั้ง - - -
อนุกรม เริ่ม - 115200 - -

ถ้า - - เอสดี. เริ่ม - - - -
อนุกรม พิมพ์ - 'การเมานต์การ์ดล้มเหลว' - -
กลับ -
-

uint8_t ประเภทบัตร - เอสดี. ประเภทบัตร - - -
ถ้า - ประเภทบัตร - CARD_NONE - -
อนุกรม พิมพ์ - 'ไม่ได้แนบการ์ด SD' - -
กลับ -
-

uint64_t ขนาดการ์ด - เอสดี. ขนาดการ์ด - - - - 1,024 - 1,024 - -
อนุกรม พิมพ์ฉ - 'ขนาดการ์ด SD: %lluMB \n - - ขนาดการ์ด - -

// สามารถเรียกฟังก์ชันอื่นๆ (listDir, createDir, RemoveDir ฯลฯ) ได้ที่นี่
-

เป็นโมฆะ วนซ้ำ - - -

-

จากผลลัพธ์ คุณจะเห็นว่าฉันมีการ์ด SD ขนาดประมาณ 30GB

บทสรุป

โมดูลการ์ด MicroSD ใช้สำหรับอ่านและเขียนข้อมูลจากการ์ด SD โดยใช้บอร์ด ESP32 โมดูลการ์ด MicroSD สื่อสารกับไมโครคอนโทรลเลอร์โดยใช้อินเทอร์เฟซ SPI ดังนั้นคุณสามารถใช้ไลบรารี SPI หรือกำหนดพิน SPI ของคุณเองภายในโค้ดได้ เมื่อเชื่อมต่อแล้ว คุณสามารถอ่านเขียนไฟล์ข้อความหรือสร้างไดเร็กทอรีใหม่ในการ์ด SD ของคุณได้