Arduino ESP32 Web服务器从microSD卡读取

本文介绍如何使用Arduino ESP32构建一个Web服务器,从microSD卡读取并发送文件内容。当客户端请求时,服务器从SD卡读取信息,节省硬件资源。文件必须放在FAT32格式的SD卡根目录下,接线及实例代码亦有详述。

Arduino ESP32 Web服务器从microSD卡读取


将网页内容放到SD卡中,当有客户端数据请求时,从SD卡读取信息进行发送,比起SPIFFS文件系统,更节约板上的硬件资源。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SD卡接线说明

ESP32----- SD
如果您打算使用Arduino运行Web服务器,那么这里是您的理想选择。我们将在Web服务器上显示传感器数据。 硬件部件: Arduino UNO和Genuino UNO×1个 Arduino以太网修订版3×1个 跳线(通用)×1个 DHT22温度传感器×1个 软件应用程序和在线服务: Arduino IDE 仅作记录,Arduino本身不能充当Web服务器。与具有完整功能的嵌入式系统Raspberry Pi不同,Arduino需要以太网屏蔽才能连接到Internet或ESP8266芯片。 Arduino以太网屏蔽是一种电路板,可让Arduino连接到互联网。它基于Wiznet W5xxx系列以太网芯片。这些芯片具有能够同时使用TCP-IP和UDP的网络堆栈。但是,屏蔽层仅允许通过RJ45连接器进行有线连接。因此,如果您正在寻找无线互联网解决方案,则可以改用ESP8266开发板。Arduino以太网防护罩具有集成的microSD器,可用于存储网页文件。 您仍然可以使用以太网屏蔽的母头引脚与Arduino的大多数引脚接口。只需将屏蔽罩和Arduino的引脚对齐,然后向下压直到它们舒适地合上即可。不能使用的引脚是引脚10 (SS),11 (MOSI),12 (MISO)和13 (SCK)。这些是SPI(串行外围设备接口)引脚,Arduino用来与以太网屏蔽进行通信。 准备硬件 对于此项目,我们将显示来自Arduino的DHT22温湿度传感器数据和与网络页面配对的以太网屏蔽,您可以在世界任何地方访问该页面。为此,请连接以下组件,如图2所示: 组装完组件后,将LAN电缆插入RJ45连接器。另一端必须在连接到互联网的路由器上。
### ESP32 Arduino SD 使用示例 尽管提供的参考资料主要涉及基于 C 语言开发的 ESP-IDF 框架[^1],但在 Arduino 框架下操作 SD 同样非常简单。以下是关于如何在 ESP32 上通过 Arduino 框架操作 SD 的具体方法。 #### 所需硬件 - ESP32 开发板。 - MicroSD 模块(支持 SPI 接口)。 - 连接线缆用于连接 ESP32SD 模块。 #### 配置 GPIO 引脚 ESP32 的默认 SPI 引脚配置如下: | 功能 | 默认引脚 | |------------|-----------| | MOSI (DI) | GPIO23 | | MISO (DO) | GPIO19 | | SCLK | GPIO18 | | CS | GPIO5 | 如果需要更改这些引脚分配,则可以在初始化时指定不同的 GPIO 编号。 #### 初始化代码示例 以下是一个完整的 Arduino 示例程序,展示如何读取和写入 SD 中的文件: ```cpp #include <SPI.h> #include <SD.h> // 定义CS针脚,默认为GPIO5 const int chipSelect = 5; void setup() { Serial.begin(115200); // 初始化SD while (!Serial) {} if (!SD.begin(chipSelect)) { Serial.println("Card failed, or not present"); return; } Serial.println("card initialized."); } void loop() { // 创建并写入新文件 File dataFile = SD.open("test.txt", FILE_WRITE); if (dataFile) { dataFile.println("Hello ESP32!"); dataFile.close(); Serial.println("Data written to file"); } else { Serial.println("Error opening test.txt"); } delay(2000); // 读取文件内容 File readFile = SD.open("test.txt"); if (readFile) { Serial.println("test.txt:"); while (readFile.available()) { Serial.write(readFile.read()); } readFile.close(); } else { Serial.println("Error reading test.txt"); } delay(5000); } ``` 上述代码实现了两个功能:向 `test.txt` 文件中写入数据以及从该文件中读取数据[^3]。 #### 常见问题排查 1. **无法检测到 SD ** - 确认 SD 已正确插入模块,并且模块与 ESP32 正确连接。 - 如果仍然失败,请尝试更换其他引脚作为芯片选择信号(CS),并通过参数传递给 `SD.begin()` 函数。 2. **文件系统错误** - 确保使用的 SD 已经格式化为 FAT 或 FAT32 文件系统。 - 尝试重新插拔 SD 或者更换一张新的测试片。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值