ESP32 - SD Card

In this guide, we'll explore how to use a Micro SD Card with the ESP32. We'll delve into the following topics:

Hardware Used In This Tutorial

1×ESP-WROOM-32 Dev Module
1×USB Cable Type-C
1×Micro SD Card
1×Micro SD Card Module
1×Jumper Wires
1×Breadboard
1×USB 3.0 SD Card Reader
1×(Recommended) ESP32 Screw Terminal Adapter

Or you can buy the following sensor kit:

1×DIYables Sensor Kit 30 types, 69 units
Disclosure: some of these links are affiliate links. We may earn a commission on your purchase at no extra cost to you. We appreciate it.

Introduction to Micro SD Card Module

The Micro SD Card Module can interface with ESP32 and it can carry a Micro SD Card. In another word, the Micro SD Card Module is a bridge between ESP32 and Micro SD Card

Pinout

Micro SD Card Module Pinout

Micro SD Card Module includes 6 pins:

  • VCC pin: connect to the ESP32's 5V pin.
  • GND pin: connect this pin to the ESP32's GND.
  • MISO pin: (Master In Slave Out) connect this pin to the ESP32's MOSI pin.
  • MOSI pin: (Master Out Slave In) connect this pin to the ESP32's MISO pin.
  • SCK pin: connect this pin to the ESP32's SCK pin.
  • SS pin: (Slave Select) connect this pin to the pin specified in ESP32 code as a SS pin.

Preparation

  • Connect the Micro SD Card to the PC via USB 3.0 SD Card Reader
  • Make sure that the Micro SD Card is formatted FAT16 or FAT32 (Google for it)

Wiring Diagram

ESP32 Micro SD Card Module Wiring Diagram

This image is created using Fritzing. Click to enlarge image

If you're unfamiliar with how to supply power to the ESP32 and other components, you can find guidance in the following tutorial: How to Power ESP32.

※ NOTE THAT:

If you use an Ethernet shield or any shield that has a Micro SD Card Holder, you do not need to use the Micro SD Card Module. You just need to insert the Micro SD Card to the Micro SD Card Holder on the shield.

ESP32 - How to open a file on Micro SD Card and create if not existed

ESP32 Code

/* * This ESP32 code is created by esp32io.com * * This ESP32 code is released in the public domain * * For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-sd-card */ #include <SD.h> #define PIN_SPI_CS 5 // The ESP32 pin GPIO5 File myFile; void setup() { Serial.begin(9600); if (!SD.begin(PIN_SPI_CS)) { Serial.println(F("SD CARD FAILED, OR NOT PRESENT!")); while (1); // stop the program } Serial.println(F("SD CARD INITIALIZED.")); if (!SD.exists("esp32.txt")) { Serial.println(F("esp32.txt doesn't exist. Creating esp32.txt file...")); // create a new file by opening a new file and immediately close it myFile = SD.open("esp32.txt", FILE_WRITE); myFile.close(); } // recheck if file is created or not if (SD.exists("esp32.txt")) Serial.println(F("esp32.txt exists on SD Card.")); else Serial.println(F("esp32.txt doesn't exist on SD Card.")); } void loop() { }

Quick Instructions

  • If this is the first time you use ESP32, see how to setup environment for ESP32 on Arduino IDE.
  • Open Arduino IDE on your PC.
  • Select the right ESP32 board (e.g. ESP32 Dev Module) and COM port.
  • Insert the Micro SD Card to the Micro SD Card module
  • Do the wiring between the Micro SD Card module and ESP32 as the above wiring diagram
  • Connect ESP32 to PC via USB cable
  • Open Arduino IDE, select the right board and port
  • Open Serial On Arduino IDE
  • Copy the above code and paste it to Arduino IDE
  • Click Upload button on Arduino IDE to upload code to ESP32
  • The result on Serial Monitor for the first run
COM6
Send
SD CARD INITIALIZED. esp32.txt doesn't exist. Creating esp32.txt file... esp32.txt exists on SD Card.
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • The result on Serial Monitor for the next runs
COM6
Send
SD CARD INITIALIZED. esp32.txt exists on SD Card.
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ NOTE THAT:

You may NOT see the output on Serial Monitor for the first run of your first upload is done before opening Serial Monitor.

  • Detach the Micro SD Card from the module
  • Insert the Micro SD Card to an USB SD Card reader
  • Connect the USB SD Card reader to the PC
  • Check if the file exists or not

ESP32 - How to write/read data to/from a file on Micro SD Card

The below code does:

  • Write data to a file
  • Read the content of the a file character-by-character and print it to Serial Monitor
/* * This ESP32 code is created by esp32io.com * * This ESP32 code is released in the public domain * * For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-sd-card */ #include <SD.h> #define PIN_SPI_CS 5 // The ESP32 pin GPIO5 File myFile; void setup() { Serial.begin(9600); if (!SD.begin(PIN_SPI_CS)) { Serial.println(F("SD CARD FAILED, OR NOT PRESENT!")); while (1); // stop the program } Serial.println(F("SD CARD INITIALIZED.")); // open file for writing myFile = SD.open("esp32.txt", FILE_WRITE); if (myFile) { myFile.println("Created by esp32io.com"); // write a line to esp32.txt myFile.println("Learn ESP32 and SD Card"); // write another line to esp32.txt myFile.close(); } else { Serial.print(F("SD Card: Issue encountered while attempting to open the file esp32.txt")); } // open file for reading myFile = SD.open("esp32.txt", FILE_READ); if (myFile) { while (myFile.available()) { char ch = myFile.read(); // read characters one by one from Micro SD Card Serial.print(ch); // print the character to Serial Monitor } myFile.close(); } else { Serial.print(F("SD Card: Issue encountered while attempting to open the file esp32.txt")); } } void loop() { }
  • The Serial Monitor shown the content of the file
COM6
Send
Created by esp32io.com Learn ESP32 and SD Card
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ NOTE THAT:

The data will be appended to the end of file by default. If you reboot ESP32 with above code, the text will be appended to the file again ⇒ the Serial Monitor will shows more lines as below:

COM6
Send
Created by esp32io.com Learn ESP32 and SD Card Created by esp32io.com Learn ESP32 and SD Card
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

You can also detach the Micro SD Card from the module, and open it on your PC to check the content (USB SD Card reader is needed)

ESP32 - How to read a file on Micro SD Card line-by-line

/* * This ESP32 code is created by esp32io.com * * This ESP32 code is released in the public domain * * For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-sd-card */ #include <SD.h> #define PIN_SPI_CS 5 // The ESP32 pin GPIO5 File myFile; void setup() { Serial.begin(9600); if (!SD.begin(PIN_SPI_CS)) { Serial.println(F("SD CARD FAILED, OR NOT PRESENT!")); while (1); // stop the program } Serial.println(F("SD CARD INITIALIZED.")); // open file for writing myFile = SD.open("esp32.txt", FILE_WRITE); if (myFile) { myFile.println("Created by esp32io.com"); // write a line to esp32.txt myFile.println("Learn ESP32 and SD Card"); // write another line to esp32.txt myFile.close(); } else { Serial.print(F("SD Card: Issue encountered while attempting to open the file esp32.txt")); } // open file for reading myFile = SD.open("esp32.txt", FILE_READ); if (myFile) { int line_count = 0; while (myFile.available()) { char line[100]; // maximum is 100 characters, change it if needed int line_length = myFile.readBytesUntil('\n', line, 100); // read line-by-line from Micro SD Card line_count++; Serial.print(F("Line ")); Serial.print(line_count); Serial.print(F(": ")); Serial.write(line, line_length); // print the character to Serial Monitor // \n character is escaped by readBytesUntil function Serial.write('\n'); // print a new line charactor } myFile.close(); } else { Serial.print(F("SD Card: Issue encountered while attempting to open the file esp32.txt")); } } void loop() { }
  • The result on Serial Monitor
COM6
Send
SD CARD INITIALIZED. Line 1: Created by esp32io.com Line 2: Learn ESP32 and SD Card
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ NOTE THAT:

You may see more lines on Serial Monitor if the content of the file is not deleted before.

ESP32 - How to overwrite a file on Micro SD Card

By default, the content will append to the end of the file. The simplest way to overwrite a file is: delete the exsiting file and create new one with the same name

/* * This ESP32 code is created by esp32io.com * * This ESP32 code is released in the public domain * * For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-sd-card */ #include <SD.h> #define PIN_SPI_CS 5 // The ESP32 pin GPIO5 File myFile; void setup() { Serial.begin(9600); if (!SD.begin(PIN_SPI_CS)) { Serial.println(F("SD CARD FAILED, OR NOT PRESENT!")); while (1); // stop the program } Serial.println(F("SD CARD INITIALIZED.")); SD.remove("esp32.txt"); // delete the file if existed // create new file by opening file for writing myFile = SD.open("esp32.txt", FILE_WRITE); if (myFile) { myFile.println("Created by esp32io.com"); // write a line to esp32.txt myFile.println("Learn ESP32 and SD Card"); // write another line to esp32.txt myFile.close(); } else { Serial.print(F("SD Card: Issue encountered while attempting to open the file esp32.txt")); } // open file for reading myFile = SD.open("esp32.txt", FILE_READ); if (myFile) { while (myFile.available()) { char ch = myFile.read(); // read characters one by one from Micro SD Card Serial.print(ch); // print the character to Serial Monitor } myFile.close(); } else { Serial.print(F("SD Card: Issue encountered while attempting to open the file esp32.txt")); } } void loop() { }
  • The result on Serial Monitor
COM6
Send
SD CARD INITIALIZED. Created by esp32io.com Learn ESP32 and SD Card
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Reboot ESP32
  • Check if the content of the file on Serial Monitor is appended or not.

You can also detach the Micro SD Card from the module, and open it on your PC to check the content (USB SD Card reader is needed)

Video Tutorial

Making video is a time-consuming work. If the video tutorial is necessary for your learning, please let us know by subscribing to our YouTube channel , If the demand for video is high, we will make the video tutorial.

Function References

※ OUR MESSAGES