目录
一.介绍
使用SD卡来存储数据。因为SD卡容量大,所以与EEPROM相比可以存储更多数据。为什么SD卡对ESP32很有用?如您所知,ESP8266和ESP32在物联网应用中更受欢迎。他们可以保留以下角色:
– 客户端从传感器收集数据,如温度或湿度或事件日志,并将这些数据保存到SD卡中。
– 使用SD卡存储网页,图像,javascript等的Web服务器,它将返回给客户端请求。
由于micro sdcard(microSD)很受欢迎,因此我们将使用micro sdcard进行演示。以下是要求:
1。ESP32连接到micro sdcard
2.遍历micro sdcard以列出其中的所有文件和文件夹并打印到串口监视器。
3.打开一个名为“test.txt”的文件,将“Hello world!”文本写入其中并关闭它
4.再次打开“test .txt”读取文本,然后打印到串口监视器并关闭它。
二.元器件清单
- ESP32开发板
- 一个SPI microSD卡模块
- 导线若干
三.电路图
ESP32 连接microSD卡:
[ESP32 IO26 – CS MICROSD]
[ESP32 IO14 – MOSI(DI) MICROSD]
[ESP32 IO12 – MISO(DO) MICROSD]
[ESP32 IO27 – SCK MICROSD]
[ESP32 GND – GND MICROSD]
[3.3V – VCC MICROSD]
四.代码设计
我们将使用SD卡库用于沟通。您可以在此处下载:
https://github.com/nhatuan84/esp32-micro-sdcard
下载后,将其解压缩并将解压缩的文件夹复制到Arduino文件夹下的libraries文件夹。
这个库提供了一些类和接口:
– SD.begin(uint8_t cs,int8_t mosi,int8_t miso,int8_t sck):使用SPI引脚初始化库
– SD.open(filename,FILE_WRITE):打开文件进行写入
– SD.open(filename):打开文件进行读取
– SD.open(“/”):打开sdcard at root“/”
类文件:
– openNextFile():遍历目录
– name():获取文件名或目录
– isDirectory():检查条目是否为目录
– size():获取文件大小
– close():关闭打开的条目
– println(文本):将文本写入打开的文件
– available():检查可用的数据reading
– read():如果数据可用则读取数据
– close():关闭打开的文件
以下是相应的代码:
/*******************************************************
ESP32 LED点阵显示信息
功能:使用SPI LED点阵显示信息
引脚:GPIO26 -> CS GPIO14 -> MOSI(DI) GPIO12 -> MISO(DO) GPIO27 - SCK
Designer: Code_Mouse
Date:2018-9-8
*******************************************************/
#include
#include
File root;
void setup()
{
Serial.begin(115200);
Serial.print("Initializing SD card...");
/*初始化SD库SPI引脚*/
if (!SD.begin(26, 14, 12, 27)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
/*从根目录root“/”*/
root = SD.open("/");
if (root) {
printDirectory(root, 0);
root.close();
} else {
Serial.println("error opening test.txt");
}
/*打开“test.txt”写入*/
root = SD.open("test.txt", FILE_WRITE);
/*如果成功打开 - > root!= NULL 然后写字符串“Hello world!”*/
if (root) {
root.println("Hello world!");
root.flush();
/*关闭文件 */
root.close();
} else {
/* 如果文件打开错误,则打印错误 */
Serial.println("error opening test.txt");
}
delay(1000);
/*写完后再重新打开文件并读取它 */
root = SD.open("test.txt");
if (root) {
/* 从文件中读取,直到其中没有其他内容 */while (root.available()) {
/* 读取文件并打印到串口监视器*/
Serial.write(root.read());
}
root.close();
} else {
Serial.println("error opening test.txt");
}
Serial.println("done!");
}
void loop()
{
}
余下程序:
五.测试代码
要测试代码,只需使用Arduino IDE上传它。然后,您应该看到串口监视器打印出文件的目录。以下就是实现的效果:
好好
???
并不能运行的啊 ✗骷髅头✗
你的線接的根本就錯的好嗎
MOSI是13、SCK為什麼是接27?
你按照程序的来连接,或者程序中改一下引脚,改成图上连接的那样
我连不上,看了看esp32的引脚定义,最后改成if (!SD.begin(5, 23, 19, 18)),对应连线,成功,这个是默认的spi引脚定义,大家搞不成的,可以参考一下。
#include
#include
請問連續寫2個#include是什麼語法?
說明一下好嗎?
那个被网站系统过滤掉了,
应该是:
#include “SPI.h”
#include “mySD.h”
“”改成尖括号,尖括号会被安全系统过滤掉
‘printDirectory’ was not declared in this scope麻烦问一下,为什么会报这个错误
printDirectory声明的位置是不是不对?
这个库函数,可以新建excel表格和新建或者删除文件夹吗
excel表格不是很清楚,应该不行。新建或删除文件夹应该是支持的,你看看头文件里的函数,找找看
想要新建excel表格,和往表格写数据的函数,但是网上一直没找到教程
厉害?
每日一学
I (350) gpio: GPIO[5]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 I (360) sdspi_transaction: cmd=52, R1 response: command not supported I (400) sdspi_transaction: cmd=5, R1 response: command not supported E (430) sdmmc_sd: sdmmc_check_scr: send_scr returned 0x109 E (430) vfs_fat_sdmmc: sdmmc_card_init failed (0x109). I (430) gpio: GPIO[5]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
太酷啦