6주차_참고 : WebServer 객체 - dhryu60/SmartDevice_2025-1 GitHub Wiki

🌐 WebServer 객체란?

WebServer server(80);  // 80번 포트에서 웹서버를 실행
  • WebServerESP32 내부에서 HTTP 웹서버를 동작하게 하는 클래스입니다.
  • WiFiClientWiFiServer를 기반으로 작동합니다.
  • ESP32에 웹 브라우저가 접속하면 요청을 받아 응답할 수 있게 해줍니다.

🧠 기본 구조와 동작 방식

  1. 객체 생성: WebServer server(80);
    → 80번 포트에서 웹서버를 구동할 준비를 합니다.

  2. 라우팅 설정: server.on("/", handleRoot);
    → 특정 경로(예: /)로 요청이 들어오면 handleRoot() 함수로 응답합니다.

  3. 서버 시작: server.begin();
    → 실제로 클라이언트 요청을 받기 시작

  4. 요청 처리: server.handleClient();
    → 클라이언트가 요청을 보냈을 때 그 요청을 분석하고 대응


📦 주요 함수 설명

함수명 설명
WebServer(port) 지정한 포트로 서버 객체 생성 (80, 8080 등 가능)
begin() 서버 시작 (이후부터 클라이언트 요청 수신 가능)
on(path, handler) 특정 경로 요청 시 호출할 함수 지정
send(code, type, content) 응답을 보냄 (HTTP 상태코드, MIME 타입, 내용)
handleClient() 클라이언트 요청을 감지하고 처리
hasArg(name) 클라이언트 요청에 특정 파라미터가 포함됐는지 확인
arg(name) 특정 파라미터 값을 가져옴
sendHeader(key, value) 응답에 HTTP 헤더 추가
streamFile(file, type) SPIFFS나 SD카드의 파일을 스트리밍 형태로 전송

💡 실제 예제 구조

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

WebServer server(80); // 포트 80으로 서버 객체 생성

void handleRoot() {
  server.send(200, "text/html", "<h1>Hello from ESP32!</h1>");
}

void setup() {
  WiFi.begin("SSID", "PASSWORD");
  while (WiFi.status() != WL_CONNECTED) delay(1000);
  
  server.on("/", handleRoot); // 루트 페이지 처리
  server.begin();             // 서버 시작
}

void loop() {
  server.handleClient();      // 요청 처리
}

🧰 기타 활용 예시

✅ GET 파라미터 읽기

server.on("/status", []() {
  if (server.hasArg("device")) {
    String dev = server.arg("device");
    server.send(200, "text/plain", "Device: " + dev);
  } else {
    server.send(400, "text/plain", "Missing 'device' argument");
  }
});

✅ JSON 응답

server.on("/json", []() {
  server.send(200, "application/json", "{\"temp\": 24.5, \"hum\": 58}");
});

❗ 주의할 점

  • 반드시 server.begin() 호출 후 loop()에서 server.handleClient()를 반복적으로 호출해야 요청이 처리됩니다.
  • server.on()setup()에서 설정해야 제대로 동작합니다.
  • 여러 경로(/, /status, /led/on 등)를 다르게 처리할 수 있음 → 웹 기반 대시보드 구현 가능

✅ WebServer vs ESPAsyncWebServer

항목 WebServer ESPAsyncWebServer
방식 동기적 (handleClient 반복 호출 필요) 비동기적 (이벤트 기반, 성능 높음)
복잡도 간단함 (초보자에 적합) 약간 복잡 (고성능 IoT에 적합)
사용 예시 간단한 센서 웹서버, 제어 UI 실시간 대시보드, AJAX 기반 서비스

📌 마무리 요약

  • WebServer 객체는 ESP32의 HTTP 웹서버 엔진이다.
  • 브라우저 요청을 받아서 응답해주는 기본적인 역할을 수행한다.
  • on(), send(), handleClient() 등 함수를 통해 다양한 기능을 구현할 수 있다.
  • 기본 동작은 매우 직관적이며, 소규모 IoT 프로젝트에 최적!

⚠️ **GitHub.com Fallback** ⚠️