본문 바로가기

ESPRESSIF/ESP32

ESP32 Simple Web Sever 테스트

 
 
ESP32 에서 제공하는 기본 라이브러리를 이용해 가장 간단한 웹서버 예제를 작성 해 보자
 

WiFi에 접속하고 페이지 요청 들어 오면 간단한 HTML 페이지를 전송하는 코드 이다.

#include <WiFi.h>
#include <WebServer.h>

// SSID & Password
const char *ssid = "";
const char *password = "";

WebServer server(80);  // Object of WebServer(HTTP port, 80 is defult)
void handle_root();

// HTML 페이지
#if 1
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE html>
<html>
<body>
<center>
<h1>ESP32 Simple Web Server - &#128522;</h1>
</center>
</body>
</html>
)rawliteral";
#endif


//페이지 요청이 들어 오면 처리 하는 함수
void handle_root()
{
  server.send(200, "text/html", index_html);
}


void InitWebServer() 
{
	//페이지 요청 처리 함수 등록
	server.on("/", handle_root);

    server.begin();
}

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

	//WiFi 접속
	WiFi.begin(ssid, password);

	//접속 완료 하면
	while (WiFi.status() != WL_CONNECTED) {
	delay(1000);
	Serial.print(".");
	}
    
	Serial.print("Wifi IP: ");
	Serial.println(WiFi.localIP());  //Show ESP32 IP on serial

	InitWebServer(); 
    
	Serial.println("HTTP server started");
	delay(100); 
}

void loop() {
  server.handleClient();
}
 
 
여기서 한가지 팁으로 Raw String Literal 를 사용하면 웹페지 HTML 소스를 문자열 처럼 만들 수 있다. 
 
컴파일 후 다운로드 하면 시리얼 터미널 창에서 웹페이지의 IP를 확인 할 수 있다.

 

웹서버 IP로 접속 하면 기본 페이지가 출력 되는것을 확인 할 수 있다.


이번에는 조금 더 복잡한 웹페이지를 하나 만들자. LED On/Off Button 을 만들어서 제어 할 수 있도록 웹이페이지를 작성 했다.

const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE html>
<html>
<body>
<center>
<h1>ESP32 Simple Web Server - &#128522;</h1>
<a href="on"><button>ON</button></a><p></p>
<a href="off"><button>OFF</button></a>
</center>
</body>
</html>
)rawliteral";

 

 

웹페이지의 요청 인자에 따라 LED 상태를 처리 하는 함수

//페이지 요청이 들어 오면 처리 하는 함수
void handle_root() {
  server.send(200, "text/html", index_html);
}

//On 버튼 페이지 처리함수
void SetLedStatusOn()
{
    Serial.println("On");
    digitalWrite(Led1Pin, 0);
    server.send(200, "text/html", index_html);
}

//Off 버튼 페이지 처리함수
void SetLedStatusOff()
{
    Serial.println("Off");
    digitalWrite(Led1Pin, 1);
    server.send(200, "text/html", index_html);
}

 

 

페이지 요청에 따른 콜백 함수 등록

void InitWebServer() 
{
    //페이지 요청 처리 함수 등록
    server.on("/", handle_root);
    server.on("/on", HTTP_GET, SetLedStatusOn);
    server.on("/off", HTTP_GET, SetLedStatusOff);

    server.begin();
}

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

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

    // Connect to your wi-fi modem
    WiFi.begin(ssid, password);

    // Check wi-fi is connected to wi-fi network
    while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
    }
    Serial.println("");
    Serial.println("WiFi connected successfully");
    Serial.print("IP: ");
    Serial.println(WiFi.localIP());  //Show ESP32 IP on serial

	InitWebServer();
    
    Serial.println("HTTP server started");
    delay(100); 
}

 

 

이렇게 해서 실행 하면 Led On/Off Button을 가진 웹페이지가 출력되며 각 버튼에 따라 웹페이지를 요청하고 LED를 제어 할 수 있다.

 

 


이제 기본 틀이 완료 되었기에 웹페이지를 좀더 화려하게 꾸미면 좀더 보기 좋은 웹서버를 구현 할 수 있다.

const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<style>
	button {
        width:120px;
        height: 40px;
        color:#fff;
        background: #f80404;
        font-size: 16px;
        border:none;
        border-radius: 20px;
        box-shadow: 0 4px 16px #4d0000;
        transition:0.3s;
        position: relative;
        left:50%;
        top:50%;
        transform: translate(-50%,-50%);
    }
</style>
</head>
<body>
<h1><center>ESP32 Simple Web Server - &#128522;</h1>
<br><br>
    <a href="on"><button type="button">ON</button></a><p>
    <a href="off"><button type="button">OFF</button></a>
</body>
</html>
)rawliteral";

 

 

CCS 파일을 적당히 활용하면 간단하면서도 멋진 웹페이지를 구현 할 수 있다. 

 

 

 

반응형