본문 바로가기

ESPRESSIF/ESP32

ESP32 SD Card Web Server 테스트

ESP32에서 웹서버 소스(HTML 파일) 를 저장하는 방식은 아래와 같이 3가지 정도 있을 수 있겠다.

 

이전 테스트에서 두가지 방식은 테스트 해보았고 SD Card에 저장해서 웹서버를 구현 하는 방법을 테스트 해 보자.

 

ESP32는 내장 NOR 플래시메모리에 SPIFFS를 올려서 파일 시스템을 구현 할수 있지만 가장 큰 단점은 서브 이렉토리를 지원하지 않는다. SD Card를 이용하면 파일시스템의 대부분 기능을 활용 할수 있기 때문에 편리한점이 많다.

 

 

 

ESP32 SD Card 테스트 예제를 이용해서 SD Card에서 웹페이지를 불러와 웹서버를 구현 할수 있다.

#include <Arduino.h>
#include <WiFi.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include "FS.h"
#include "SD.h"
#include "SPI.h"

// Replace with your network credentials
const char* ssid = "";
const char* password = "";

// Create AsyncWebServer object on port 80
AsyncWebServer server(80);

void InitSDCard()
{
	if(!SD.begin())
	{
		Serial.println("Card Mount Failed");
		return;
	}
	uint8_t cardType = SD.cardType();

	if(cardType == CARD_NONE)
	{
		Serial.println("No SD card attached");
		return;
	}

	Serial.print("SD Card Type: ");
	
	if(cardType == CARD_MMC)
	{
		Serial.println("MMC");
	} 
	else if(cardType == CARD_SD)
	{
		Serial.println("SDSC");
	}
	else if(cardType == CARD_SDHC)
	{
		Serial.println("SDHC");
	} 
	else 
	{
		Serial.println("UNKNOWN");
	}
	
	uint64_t cardSize = SD.cardSize() / (1024 * 1024);
	Serial.printf("SD Card Size: %lluMB\n", cardSize);
}

void InitWiFi()
{
	WiFi.mode(WIFI_STA);
	WiFi.begin(ssid, password);
	
	Serial.print("Connecting to WiFi ..");
	while (WiFi.status() != WL_CONNECTED) {
		Serial.print('.');
		delay(1000);
	}
	
	Serial.println(WiFi.localIP());
}

void InitWebServer()
{
	server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
	request->send(SD, "/index.html", "text/html");
	});

	server.serveStatic("/", SD, "/");

	server.begin();
}


void setup()
{
	Serial.begin(115200);
    //SD Card 초고화
    InitSDCard();
    
    //ESP32 Wifi초기화
	InitWiFi();

	//웹서버 초기화
	InitWebServer();
}

void loop() {
  
}

 

 

ESP32 SD Card Webserver 테스트 결과

 

 

반응형