본문 바로가기

ESPRESSIF/ESP32

ESP32 비동기 AsyncWebServer - SPIFFS 사용

ESP32 웹서버 테스트시 좀더 화려한 웹페이지를 만들기 위해 HTML 코드나 CCS 파일을 수정하는 일이 많은데 이번에는 ESP32의 SPIFFS 파일 시스템에 올려서 웹서버를 구현 하는 테스트를 해 보았다.

이렇게 하면 웹페이지만 변경하기도 쉽고 좀더 효율적으로 관리 할 수 있을것 같다.

 

이번에도 SPIFF 기반의 웹서버가 동작하는 가장 기본이 되는 코드를 작성해 보자.

 

#ifdef ESP32 // ESP32 libraries
#include <WiFi.h>
#include <AsyncTCP.h>
#else // ESP8266 libraries
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#endif
#include <ESPAsyncWebServer.h>
#include <SPIFFS.h>
// SSID & Password

const char *ssid = " ";
const char *password = " ";

AsyncWebServer server(80);  // Object of WebServer(HTTP port, 80 is defult)
#define Led1Pin        23    

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());
}

//SPIFFS 파일 시스템 초기화
void InitSPIFFS() {
  if (!SPIFFS.begin()) {
    Serial.println("Cannot mount SPIFFS volume...");

    while (1) {
    }
  }
}

//페이지 요청이 들어 오면 처리 하는 함수
String processor(const String& var){
  Serial.println(var);
  return var;
}


void onRootRequest(AsyncWebServerRequest *request) {
   digitalWrite(Led1Pin, 0); 
   Serial.println("LED OFF");
   
  request->send(SPIFFS, "/index.html", "text/html", false, processor);
}

void onStatusLed(AsyncWebServerRequest *request) {

    digitalWrite(Led1Pin, 1);
    Serial.println("LED ON");

    request->send(SPIFFS, "/off.html", "text/html", false, processor);
}


void InitWebServer() 
{
    server.on("/", onRootRequest);
    server.on("/index.html", onRootRequest);
    server.on("/off.html", onStatusLed);  

	server.serveStatic("/", SPIFFS, "/");
    server.begin();
}



void setup() {
    pinMode(Led1Pin, OUTPUT);
    digitalWrite(Led1Pin, 1);

    Serial.begin(115200);
    Serial.println("ESP32 Simple web Start");
    Serial.println(ssid);

    InitSPIFFS();

    // Connect to your wi-fi modem
	InitWiFi();

    //페이지 요청 처리 함수 등록
    InitWebServer();
    delay(100); 
}

void loop() {
  
}

 

 

간단한 코드로 이미지가 포함된 웹페이지 출력및 간단한 LED제어까지 쉽게 가능하다.

물론 편리한 장점이 있으면 단점도 있는것 같다. 아무래도 파일시스템을 사용하다 보니 속도가 조금 느린듯...

특히 큰 이미지 로드 할때는 조금 차이가 있는것 같다.

 

 

https://youtube.com/shorts/2bxn6Te7gno?feature=share 

 

반응형