The ESP32-CAM from AI-Thinker has an on-board connector for micro SD cards:
The ESP32 connects to an SD card via the SDMMC Host Driver, more precisely via slot 1. It is a 4-bit slot and uses the HS2_*
signals in the PIN MUX. The following table shows the pin and signal mappings (cf. schematic diagram):
Signal | GPIO | Comment |
---|---|---|
HS2_CMD | GPIO15 | Exposed |
HS2_CLK | GPIO14 | Exposed |
HS2_DATA0 | GPIO02 | Exposed |
HS2_DATA1 | GPIO04 | Exposed and also connected to on-board SMD LED |
HS2_DATA2 | GPIO12 | Exposed |
HS2_DATA3 | GPIO13 | Exposed |
As shown above, the ESP32-CAM uses the GPIO pins GPIO02
, GPIO04
, GPIO13
and GPIO15
for reading and writing data to the SD card. To use the SD card in the ‚1-Bit‘ or ‚1-Wire‘ mode, just initialize the SD card with the following code (cf. Espressif Arduino core for the ESP32):
bool begin(const char * mountpoint="/sdcard", bool mode1bit=false); // cf. SD_MMC.h
SD_MMC.begin("/sdcard", true);
By setting the parameter mode1bit
to true
, the ESP32-CAM just uses the GPIO02
to read and write data to the SD card, which frees up the GPIO pins GPIO04
(HS_DATA1), GPIO12
(HS_DATA2), and GPIO13
(HS_DATA3) as further GPIO pins for input or output. To use one or all of these GPIO pins for input or output, you have to define the GPIO pin accordingly after the initialization of the SD card. Otherwise, the initialization of the SD card would re-configure the GPIO pins again. For instance, the following code snippet configures the GPIO pin GPIO12
as an output pin and sets it to low
:
pinMode(12, OUTPUT);
digitalWrite(4, LOW);
Please note that the ESP32-CAM uses the GPIO04
to connect to the on-board flash light as well – the SMD (Surface-Mount Device) LED (Light-Emitting Diode). To prevent the SMD LED from glowing, use the following code:
#include "SD_MMC.h"
#include "SPI.h"
#define BUILTIN_LED 4
void setup() {
Serial.begin(115200);
// Initialize the SD card
if (!SD_MMC.begin("/sdcard", true)){
Serial.println("Failed to mount SD card");
return;
}
// Specify that LED pin
pinMode(BUILTIN_LED, OUTPUT);
digitalWrite(BUILTIN_LED, LOW);
// Check for an SD card
uint8_t cardType = SD_MMC.cardType();
if (cardType == CARD_NONE){
Serial.println("No SD card attached");
return;
}
// <Put your init code here>
}
void loop() {
// <Put your main code here, to run repeatedly>
Serial.println("loop end, 10sec delay");
delay(10000);
}
Neueste Kommentare