Návod jak upravit programový kód pro ESP32-Cam, aby fungoval zápis na SD kartu a zároveň šlo pracovat se signalizační diodou.
ESP32 se připojuje k SD kartě přes SDMMC Host Driver, přesněji přes slot 1. Je to 4-bitový slot a využívá HS2_*
signály v PIN MUX. Následující tabulka ukazuje mapování pinů a signálů (srov. schematický diagram):
Signál | GPIO | Komentář |
---|---|---|
HS2_CMD | GPIO15 | Vystaveno |
HS2_CLK | GPIO14 | Vystaveno |
HS2_DATA0 | GPIO02 | Vystaveno |
HS2_DATA1 | GPIO04 | Vystaveno a také připojené k zabudované SMD LED |
HS2_DATA2 | GPIO12 | Vystaveno |
HS2_DATA3 | GPIO13 | Vystaveno |
Jak je ukázáno výše, ESP32-CAM používá GPIO piny GPIO02
, GPIO04
a pro čtení GPIO13
a GPIO15
zápis dat na SD kartu. Chcete-li použít SD kartu v režimu „1-Bit“ nebo „1-Wire“, stačí inicializovat SD kartu pomocí následujícího kódu (viz jádro Espressif Arduino pro ESP32):
bool begin(const char * mountpoint="/sdcard", bool mode1bit=false); // cf. SD_MMC.h
SD_MMC.begin("/sdcard", true);
Nastavením parametru mode1bit
na true
, ESP32-CAM pouze používá GPIO02
ke čtení a zápisu dat na SD kartu, čímž se uvolní GPIO piny GPIO04
(HS_DATA1), GPIO12
(HS_DATA2) a GPIO13
(HS_DATA3) jako další GPIO piny pro vstup nebo výstup. Chcete-li použít jeden nebo všechny tyto piny pro vstup nebo výstup, musíte po inicializaci karty SD odpovídajícím způsobem definovat pin. Jinak by inicializace SD karty znovu překonfigurovala piny. Například následující fragment kódu nakonfiguruje pin GPIO GPIO12
jako výstupní pin a nastaví jej na low
:
pinMode(12, OUTPUT);
digitalWrite(4, LOW);
Vezměte prosím na vědomí, že ESP32-CAM používá také GPIO04
k připojení k vestavěnému blesku – SMD (Surface-Mount Device) LED (Light-Emitting Diode). Chcete-li zabránit rozsvícení SMD LED, použijte následující kód:
#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);
}
Literatura:
Using the SD Card in 1-Bit Mode on the ESP32-CAM from AI-Thinker [online]. 2021 [cit. 2022-11-19]. Dostupné z: https://dr-mntn.net/2021/02/using-the-sd-card-in-1-bit-mode-on-the-esp32-cam-from-ai-thinker