6‐7주차_ESP32 Web Server 실습 - dhryu60/SmartDevice_2025-1 GitHub Wiki

ESP32 웹서버 강의 노트

1. ESP32 WiFi 개요

ESP32는 내장 WiFi 기능을 통해 웹서버 기능을 구현할 수 있습니다. WiFi 연결 모드:

  • STA 모드: 기존 WiFi 네트워크에 클라이언트로 접속
  • AP 모드: ESP32 자체가 WiFi 네트워크 제공 (Soft AP)

https://github.com/dhryu60/SmartDevice_2025-1/wiki/6%EC%A3%BC%EC%B0%A8_%EC%B0%B8%EA%B3%A0-:--ESP32-Wi%E2%80%90Fi-%EB%AA%A8%EB%93%9C


2. 웹서버 개념

웹서버는 클라이언트(브라우저)의 요청을 받아 웹페이지를 제공하는 역할을 합니다. ESP32는 간단한 웹서버를 구동해 다양한 센서 정보 제공 및 제어가 가능합니다.

https://www.youtube.com/watch?v=7ujWkFyw01g


3. 간단한 웹서버 구축

#include <WiFi.h>

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

WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting...");
  }

  Serial.println(WiFi.localIP());
  server.begin();
}

void loop() {
  WiFiClient client = server.available();
  if (client) {
    client.println("Hello from ESP32!");
    delay(10);
    client.stop();
  }
}

4. 내장 LED를 제어하는 웹서버

필요 라이브러리: ESPAsyncWebServer

  • HTML 파일에 %STATE%, %BUTTON%을 사용해 LED 상태 실시간 표시
  • 상태에 따라 버튼과 텍스트 자동 갱신

핵심 함수:

String processor(const String& var) {
  if (var == "STATE") return ledState ? "ON" : "OFF";
  if (var == "BUTTON") return ledState ? "<button>OFF</button>" : "<button>ON</button>";
}

5. DHT11 온습도센서 제어

센서 연결

  • 데이터핀(DH11) → D18

필요 라이브러리

  • DHT sensor library by Adafruit
  • Adafruit Unified Sensor

센서 데이터 읽기

float temp = dht.readTemperature();
float hum = dht.readHumidity();

6. 온습도 표시 웹서버

HTML 페이지에 %TEMPERATURE%, %HUMIDITY% 자리 표시자 설정.

Javascript로 주기적 요청

setInterval(() => {
  fetch("/temperature").then(res => res.text()).then(data => {
    document.getElementById("temp").innerHTML = data;
  });
}, 2000);

ESP32 서버에서는 각각의 요청을 처리하여 값을 반환:

server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){
  request->send_P(200, "text/plain", String(temp).c_str());
});

7. 서버 외부 접속

외부 접속 방식 소개

  1. 포트 포워딩

    • 공유기 설정 필요
    • 공인 IP 사용
  2. 터널링 서비스

    • Ngrok, Serveo, LocalTunnel
  3. 고정 IP를 통한 직접 호스팅

    • 비용 발생

Ngrok를 이용한 외부 접속

1. Ngrok 가입 및 인증키 발급

2. Ngrok 설치

3. 인증키 저장

ngrok config add-authtoken <인증키>

4. 서버 실행 (예시: ESP32가 192.168.0.5:80에서 실행 중)

ngrok tcp 192.168.0.5:80

5. 외부 접속 확인

  • 생성된 ngrok 주소를 외부 브라우저에서 접속
  • ex) tcp://0.tcp.ngrok.io:12345

참고자료

PPT : 챕터5.Web Server.pdf
교재 : 5장웹서버.pdf
소스코드 : 챕터5.WEBserver.zip

  • ESP32 공식 WiFi 라이브러리
  • Adafruit DHT 라이브러리 문서
  • Ngrok 공식 문서 및 커뮤니티 포럼

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