ESP32-CAM是由AI-Thinker开发的一款基于ESP32芯片的摄像头模块,广泛用于物联网(IoT)项目中,尤其适合于嵌入式开发和边缘计算应用。该模块配备了一个集成的micro SD卡插槽,便于存储数据,并可通过SDMMC(Secure Digital MultiMedia Card)主机驱动与外部SD卡进行通信。
在ESP32-CAM的设计中,SD卡通过ESP32的SDMMC主机接口与系统进行连接。默认情况下,ESP32的SDMMC接口使用4位数据传输模式,但如果开发者需要节省GPIO资源或仅使用单条数据线与SD卡通信,ESP32还支持将SD卡切换到1位模式(1-Wire模式)。本文将探讨如何在ESP32-CAM中使用1位模式连接SD卡,并通过相关代码示例进行详细说明。
ESP32-CAM的SD卡引脚映射
ESP32-CAM通过SDMMC主机接口与SD卡进行通信。默认情况下,它使用4个数据引脚和1个命令引脚。具体的引脚映射如下所示:
信号 | GPIO | 备注 |
---|---|---|
HS2_CMD | GPIO15 | 曝露在外 |
HS2_CLK | GPIO14 | 曝露在外 |
HS2_DATA0 | GPIO02 | 曝露在外 |
HS2_DATA1 | GPIO04 | 曝露且连接到板载LED |
HS2_DATA2 | GPIO12 | 曝露在外 |
HS2_DATA3 | GPIO13 | 曝露在外 |
如上所示,ESP32-CAM使用GPIO02、GPIO04、GPIO12、GPIO13与SD卡进行数据读写。如果您希望在1位模式下运行SD卡,只需要在初始化SD卡时,将参数mode1bit
设置为true
。此时,ESP32-CAM仅使用GPIO02进行数据传输,从而释放出GPIO04、GPIO12和GPIO13,供其他输入或输出用途。
如何启用SD卡的1位模式
要在ESP32-CAM上启用SD卡的1位模式,可以使用如下代码:
#include "SD_MMC.h"
#include "SPI.h"
#define BUILTIN_LED 4
void setup() {
Serial.begin(115200);
// 初始化SD卡,启用1位模式
if (!SD_MMC.begin("/sdcard", true)) {
Serial.println("Failed to mount SD card");
return;
}
// 配置GPIO04(内置LED)为输出,并关闭LED
pinMode(BUILTIN_LED, OUTPUT);
digitalWrite(BUILTIN_LED, LOW);
// 检查SD卡是否已连接
uint8_t cardType = SD_MMC.cardType();
if (cardType == CARD_NONE) {
Serial.println("No SD card attached");
return;
}
// 其他初始化代码
}
void loop() {
// 主循环代码
Serial.println("loop end, 10sec delay");
delay(10000);
}
在上述代码中,我们通过SD_MMC.begin("/sdcard", true)
启用了1位模式。这里的第二个参数true
表明我们希望将SD卡工作在1位模式。这样,ESP32-CAM将仅使用GPIO02进行数据传输。
释放GPIO资源与自定义配置
启用1位模式后,ESP32-CAM释放了GPIO04、GPIO12和GPIO13,使得这些引脚可以作为普通的GPIO输入或输出进行使用。可以在初始化SD卡之后,使用pinMode()
和digitalWrite()
函数对这些引脚进行自定义配置。例如,如果您希望使用GPIO12作为输出引脚并将其设为低电平,可以使用如下代码:
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
避免LED干扰
需要特别注意的是,ESP32-CAM的GPIO04还连接着板载的SMD LED(闪光灯),该LED可能会在初始化SD卡时意外点亮。为防止LED在初始化过程中亮起,您可以将GPIO04配置为低电平。如下所示的代码会在SD卡初始化时关闭LED:
pinMode(BUILTIN_LED, OUTPUT);
digitalWrite(BUILTIN_LED, LOW);
总结
使用ESP32-CAM的SD卡在1位模式下操作,不仅简化了硬件连接,还有效释放了多个GPIO引脚,可以为其他外设提供更多的接口资源。这对于在资源有限的嵌入式系统中尤其重要。通过简单的代码配置,开发者可以在确保SD卡正常工作的同时,灵活地利用更多的GPIO引脚来满足其他功能需求。
无论您是构建一个数据采集系统,还是需要高效存储处理图像或视频流,ESP32-CAM提供了一种灵活且高效的解决方案。