本篇讲述SD卡读写及图片显示功能。
一.硬件原理与准备
开发板带有SD卡座,原理如下:

这里使用SPI口,硬件引脚定义如下:
CS --GPIO42
SCK --GPIO43
MOSI--GPIO44
MISO--GPIO39
准备一张SD卡,容量32GB以下(使用64GB的读不出来),FAT32格式。在SD里用读卡器放入以下图片1280*760,我这里放了png格式和jpg格式图片文件。

将准备好文件的SD卡插入卡座。
二.代码准备
1.sd卡引脚定义
#define SD_SPI_CS_PIN 42 #define SD_SPI_SCK_PIN 43 #define SD_SPI_MOSI_PIN 44 #define SD_SPI_MISO_PIN 39
2.sd卡初始化并检测SD卡是否识别插入
// SD Card Initialization
SPI.begin(SD_SPI_SCK_PIN, SD_SPI_MISO_PIN, SD_SPI_MOSI_PIN, SD_SPI_CS_PIN);
if (!SD.begin(SD_SPI_CS_PIN, SPI, 25000000)) {
// Print a message if SD card initialization failed or if the SD card does not exist.
M5.Display.print("\n SD card not detected\n");
while (1);
} else {
M5.Display.print("\n SD card detected\n");
}3.SD卡读写文件// Write TXT file
M5.Display.print("\n SD card write test...\n");
auto file = SD.open("/WriteTest.txt", FILE_WRITE, true);
if (file) {
file.print("Hello, world! \nSD card write success! \n");
file.close();
M5.Display.print(" SD card write success\n");
} else {
M5.Display.print(" Failed to create TXT file\n");
}
delay(1000);
M5.Display.print("\n SD card read test...\n");
if (SD.open("/TestPicture01.png", FILE_READ, false)) {
M5.Display.print(" PNG file 01 detected\n");
} else {
M5.Display.print(" PNG file 01 not detected\n");
}
if (SD.open("/TestPicture02.png", FILE_READ, false)) {
M5.Display.print(" PNG file 02 detected\n");
} else {
M5.Display.print(" PNG file 02 not detected\n");
}4.读出图片文件及显示
这里使用到了PNG和JPG图片文件。
void loop()
{
// Read PNG file and draw picture
M5.Display.drawPngFile(SD, "/TestPicture01.png");
delay(1500);
M5.Display.drawPngFile(SD, "/TestPicture02.png");
delay(1500);
M5.Display.drawJpgFile(SD, "/C145_02_1280_760.jpg",0,0);
delay(2000);
}5.全部代码如下
#include <Arduino.h>
#include <SPI.h>
#include <SD.h>
#include <M5Unified.h>
#include <M5GFX.h>
#define SD_SPI_CS_PIN 42
#define SD_SPI_SCK_PIN 43
#define SD_SPI_MOSI_PIN 44
#define SD_SPI_MISO_PIN 39
void setup()
{
M5.begin();
M5.Display.setRotation(3);
M5.Display.setFont(&fonts::FreeMonoBold18pt7b);
// SD Card Initialization
SPI.begin(SD_SPI_SCK_PIN, SD_SPI_MISO_PIN, SD_SPI_MOSI_PIN, SD_SPI_CS_PIN);
if (!SD.begin(SD_SPI_CS_PIN, SPI, 25000000)) {
// Print a message if SD card initialization failed or if the SD card does not exist.
M5.Display.print("\n SD card not detected\n");
while (1);
} else {
M5.Display.print("\n SD card detected\n");
}
delay(1000);
// Write TXT file
M5.Display.print("\n SD card write test...\n");
auto file = SD.open("/WriteTest.txt", FILE_WRITE, true);
if (file) {
file.print("Hello, world! \nSD card write success! \n");
file.close();
M5.Display.print(" SD card write success\n");
} else {
M5.Display.print(" Failed to create TXT file\n");
}
delay(2000);
M5.Display.print("\n SD card read test...\n");
if (SD.open("/TestPicture01.png", FILE_READ, false)) {
M5.Display.print(" PNG file 01 detected\n");
} else {
M5.Display.print(" PNG file 01 not detected\n");
}
if (SD.open("/TestPicture02.png", FILE_READ, false)) {
M5.Display.print(" PNG file 02 detected\n");
} else {
M5.Display.print(" PNG file 02 not detected\n");
}
delay(5000);
}
void loop()
{
// Read PNG file and draw picture
M5.Display.drawPngFile(SD, "/TestPicture01.png");
delay(1500);
M5.Display.drawPngFile(SD, "/TestPicture02.png");
delay(1500);
M5.Display.drawJpgFile(SD, "/C145_02_1280_760.jpg",0,0);
delay(2000);
}三.调试测验
编译烧录后,SD卡读写文件如下:

读出展示图片如下:



整个SD卡读写文件显示图片视频如下
我要赚赏金
