DIYables ESP32 WebApps 라이브러리 API 레퍼런스 전체 문서
개요
DIYables ESP32 WebApps 라이브러리는 ESP32에서 WebSocket 기반의 웹 애플리케이션을 개발하기 위한 포괄적이고 모듈식인 솔루션을 제공합니다. 또한 다수의 미리 구성된 웹 애플리케이션과 사용자 정의 애플리케이션을 만들기 위한 유연한 프레임워크를 포함합니다.
라이브러리는 필요한 웹 애플리케이션만 포함하도록 모듈식 아키텍처를 사용하여 메모리를 절약하고 성능을 향상시킵니다.
기능
- 모듈식 아키텍처: 메모리 사용량을 최적화하기 위해 필요한 웹 앱만 추가
- 메모리 효율적인: 각 웹 앱은 독립적으로 활성화/비활성화할 수 있습니다
- 11개 이상 즉시 사용 가능한 웹 애플리케이션: 웹 프로그래밍 지식 없이 ESP32를 완전히 제어
- 맞춤형 웹 앱 프레임워크: 기본 클래스 시스템을 사용하여 직접 애플리케이션을 만드세요
- 실시간 통신: 실시간 업데이트를 위한 WebSocket 기반
- 반응형 디자인: 데스크탑, 태블릿 및 모바일 기기에서 작동합니다
- 쉬운 통합: 간단한 콜백 기반 API
- 다중 앱 지원: 여러 웹 앱을 동시에 추가할 수 있습니다
핵심 클래스
DIYables 웹 애플리케이션 서버
웹 애플리케이션, HTTP 요청 및 WebSocket 통신을 관리하는 메인 서버 클래스.
생성자
웹 애플리케이션 서버 인스턴스를 생성합니다.
- httpPort: HTTP 서버 포트 (기본값: 80)
- websocketPort: 웹소켓 서버 포트 (기본값: 81)
방법
설정 및 연결
네트워크 연결을 초기화하고(이더넷 또는 사전 구성된 연결용) 웹 서버를 시작합니다.
- 반환값: 성공 시 true, 실패 시 false
- 사용 사례: 향후 이더넷 지원을 위한 것이거나 WiFi 자격 증명이 미리 구성된 경우
와이파이 연결을 초기화하고 웹 서버를 시작합니다.
- ssid: WiFi 네트워크 이름
- password: WiFi 비밀번호
- Returns: 성공 시 true, 실패 시 false
- Use case: 자격 증명이 있는 표준 WiFi 연결
HTTP 요청 및 WebSocket 통신을 처리합니다. 메인 루프에서 호출되어야 합니다.
와이파이가 연결되면 true를 반환합니다.
아두이노의 IP 주소를 문자열로 반환합니다.
애플리케이션 관리
웹 애플리케이션을 서버에 추가합니다.
- 앱: 웹 애플리케이션 인스턴스에 대한 포인터
URL 경로로 웹 애플리케이션을 제거합니다.
- path: 애플리케이션의 URL 경로(예: "/chat")
URL 경로로 웹 애플리케이션을 가져옵니다.
- 경로: 애플리케이션의 URL 경로
- 반환값: 애플리케이션에 대한 포인터 또는 찾을 수 없으면 nullptr
404 Not Found 페이지를 설정합니다(선택 사항).
- 페이지: 404 페이지 인스턴스
특화된 앱 접근
추가되면 디지털 핀 페이지 인스턴스를 가져옵니다.
- 반환값: 디지털 핀 페이지에 대한 포인터 또는 nullptr
추가되면 슬라이더 페이지 인스턴스를 가져옵니다.
- 반환값: 슬라이더 페이지에 대한 포인터 또는 nullptr
추가된 경우 조이스틱 페이지 인스턴스를 가져옵니다.
- 반환값: 조이스틱 페이지에 대한 포인터 또는 nullptr
기본 클래스들
DIYables 웹앱 페이지 베이스
모든 웹 애플리케이션이 상속받는 추상 기본 클래스이며, HTTP 처리, WebSocket 통신 및 페이지 관리에 대한 공통 기능을 제공합니다.
생성자
지정된 URL 경로로 기본 페이지 인스턴스를 생성합니다.
- 페이지 경로: 페이지의 URL 경로(예: "/web-joystick")
가상 메서드(파생 클래스에서 구현해야 합니다)
이 페이지에 대한 HTTP 요청을 처리합니다. 순수 가상 메서드.
- 클라이언트: 응답 전송용 웹 클라이언트 인터페이스
이 페이지의 WebSocket 메시지를 처리합니다. 순수 가상 메서드.
- ws: WebSocket 연결 인터페이스
- message: 수신된 메시지 내용
- length: 메시지 길이
연결 정보 표시에 사용되는 페이지 식별 문자열을 반환합니다. 순수 가상 메서드.
- 반환값: 페이지 정보 문자열(예: "🕹️ 웹 조이스틱: ")
홈 페이지 네비게이션 버튼의 HTML을 반환합니다. 순수 가상 메서드.
- 반환값: 네비게이션 카드용 HTML 문자열
가상 메서드 (선택적 재정의)
새로운 WebSocket 연결이 성립될 때 호출됩니다.
- ws: 새로운 WebSocket 연결
WebSocket 연결이 닫힐 때 호출됩니다.
- ws: WebSocket 연결이 닫혔습니다.
일반적인 방법
이 페이지의 URL 경로를 가져옵니다.
- 반환값: 페이지 경로 문자열
페이지가 현재 활성화되어 있는지 확인합니다.
- 반환값: 활성화되면 true, 비활성화되면 false
페이지를 활성화하거나 비활성화합니다.
- enable: true일 때 활성화, false일 때 비활성화
유틸리티 메서드들
클라이언트에 표준 HTTP 헤더를 보낸다.
- 클라이언트: 웹 클라이언트 인터페이스
- 콘텐츠 유형: MIME 타입 (기본값: "text/html")
특정 웹소켓 클라이언트에게 메시지를 보냅니다.
- ws: 대상 WebSocket 연결
- message: 보낼 메시지
연결된 모든 웹소켓 클라이언트에게 메시지를 방송합니다.
- 메시지: 방송할 메시지
청크 전송 인코딩을 사용하여 대용량 HTML 콘텐츠를 보냅니다.
- 클라이언트: 웹 클라이언트 인터페이스
- HTML: 전송할 HTML 콘텐츠
사용 예시
웹 애플리케이션 클래스들
DIYables 홈페이지
모든 활성화된 애플리케이션에 대한 링크를 제공하는 중앙 탐색 허브.
생성자
URL 경로
- 경로: / (루트)
DIYables 웹 채팅 페이지
Arduino와의 양방향 통신을 위한 대화형 채팅 인터페이스.
생성자
URL 경로
- 경로: /webchat
방법
수신되는 채팅 메시지에 대한 콜백을 설정합니다.
웹 채팅 인터페이스에 메시지를 보냅니다.
DIYables 웹 모니터 페이지
실시간 출력 및 명령 입력을 위한 웹 기반 시리얼 모니터.
생성자
URL 경로
- 경로: /webmonitor
방법
수신되는 모니터 메시지에 대한 콜백을 설정합니다.
웹 모니터 인터페이스에 메시지를 보낸다.
DIYables 웹 디지털 핀 페이지
웹 인터페이스를 통해 디지털 핀 0-13을 제어하고 모니터링합니다.
생성자
URL 경로
- 경로: /webdigitalpins
방법
웹 제어용 핀을 활성화합니다.
- pin: 핀 번호(0-13)
- mode: WEB_PIN_OUTPUT 또는 WEB_PIN_INPUT
출력 핀의 쓰기 작업에 대한 콜백을 설정합니다.
핀 읽기 작업에 대한 콜백을 설정합니다(입력 핀).
핀 모드 변경에 대한 콜백을 설정합니다.
웹 클라이언트를 위한 핀 상태를 실시간으로 업데이트합니다.
DIYables 웹 슬라이더 페이지
아날로그/PWM 응용 프로그램을 위한 듀얼 슬라이더 컨트롤.
생성자
URL 경로
- 경로: /webslider
방법
웹에서 슬라이더 값이 변경될 때의 콜백을 설정합니다.
- 매개변수: slider1 (0-255), slider2 (0-255)
현재 값을 요청하는 웹 클라이언트를 위한 콜백을 설정합니다.
슬라이더 값을 웹 인터페이스로 전송합니다.
DIYables 웹 조이스틱 페이지
로봇 공학 및 위치 제어 응용을 위한 2차원 조이스틱 제어
생성자
- autoReturn: 조이스틱이 자동으로 중앙으로 돌아가는지 여부
- sensitivity: 업데이트를 트리거하기 위한 최소 이동 비율
URL 경로
- 경로: /webjoystick
방법
웹에서 조이스틱 움직임에 대한 콜백을 설정합니다.
- 매개변수: x (-100에서 100까지), y (-100에서 100까지)
현재 위치를 요청하는 웹 클라이언트를 위한 콜백을 설정합니다.
조이스틱 위치를 웹 인터페이스로 전송합니다.
자동 반환 동작 설정
이동 민감도 설정(백분율).
DIYables 웹 플로터 페이지
다중 데이터 시리즈를 지원하는 실시간 데이터 시각화.
생성자
URL 경로
경로: /webplotter
방법
그래프 제목을 설정합니다.
축 레이블을 설정합니다.
자동 Y축 스케일링을 활성화하거나 비활성화합니다.
표시할 데이터 포인트의 최대 개수를 설정합니다.
시계열에 데이터 포인트를 추가합니다.
그래프의 모든 데이터를 지웁니다.
DIY 가능한 아이템을 찾을 수 없는 페이지
더 나은 사용자 경험을 위한 선택적 404 오류 페이지.
생성자
기본 사용 예제
웹 애플리케이션 개요
홈 페이지
- 주소: http://[esp32-ip]/
- 목적: 중앙 탐색 허브
- 기능: 활성화된 모든 애플리케이션으로의 링크, 연결 상태
웹 채팅 애플리케이션
- URL: http://[esp32-ip]/webchat
- 목적: 양방향 통신 인터페이스
- 주요 기능: 실시간 메시징, 메시지 기록, WebSocket 상태
웹 모니터
- URL: http://[esp32-ip]/webmonitor
- 목적: 시리얼 모니터 대체
- 주요 기능: 실시간 시리얼 출력, 명령 입력, 다크 테마
웹 디지털 핀 제어
- URL: http://[esp32-ip]/webdigitalpins
- 목적: 디지털 핀 0-13 제어
- 특징: 개별 핀 제어, 대량 작업, 실시간 상태
웹 슬라이더 컨트롤
- URL: http://[esp32-ip]/webslider
- 목적: 듀얼 아날로그/PWM 제어
- 특징: 두 개의 독립적인 슬라이더(0-255), 프리셋 값, 실시간 피드백
웹 조이스틱 제어
- URL: http://[esp32-ip]/webjoystick
- 목적: 로봇/차량의 2D 위치 제어
- 특징: 터치/마우스 제어, 좌표 표시, 감도 조정
웹 플로터
- URL: http://[esp32-ip]/webplotter
- Purpose: 실시간 데이터 시각화
- Features: 다중 데이터 시리즈, 자동 스케일링, 제목 및 축 구성 가능
웹소켓 통신
모든 애플리케이션은 실시간 통신을 위해 포트 81에서 WebSocket을 사용합니다:
- 웹소켓 URL: ws://[esp32-ip]:81
- 연결: 연결이 끊어지면 자동 재연결
- 프로토콜: 텍스트 기반 메시지 형식
메시지 형식
웹 채팅 메시지
- 웹에서: 직접 텍스트 메시지
- 웹으로: 직접 텍스트 메시지
웹 모니터링 메시지
- 웹에서: 직접 문자 메시지
- 웹으로: 직접 문자 메시지
웹 디지털 핀 메시지
- 웹에서: JSON 형식: {"pin": 13, "state": 1}
- 웹으로: JSON 형식: {"pin": 13, "state": 1}
웹 슬라이더 메시지
- 웹에서: JSON 형식: {"slider1": 128, "slider2": 255}
- 웹으로: JSON 형식: {"slider1": 128, "slider2": 255}
웹 조이스틱 메시지
- 웹에서: JSON 형식: {"x": 50, "y": -25}
- 웹으로: JSON 형식: {"x": 50, "y": -25}
웹 플로터 메시지
- 웹에서: 해당되지 않음(표시 전용)
- 웹으로: JSON 형식: {"series": "temp", "x": 10.5, "y": 23.4}
에러 처리
라이브러리는 다음에 대한 자동 오류 처리를 포함합니다:
- 와이파이 연결 실패
- WebSocket 연결 끊김
- 잘못된 메시지 형식
- 클라이언트 연결 수 제한
메모리 사용량
모듈식 아키텍처의 이점: 필요한 웹 애플리케이션만 포함하여 메모리 사용량을 최적화하세요.
구성요소당 대략적인 메모리 사용량:
- DIYablesWebAppServer: ~8KB 플래시, ~2KB 램
- DIYablesHomePage: ~3KB 플래시, ~1KB 램
- DIYablesWebChatPage: ~6KB 플래시, ~1.5KB 램
- DIYablesWebMonitorPage: ~5KB 플래시, ~1.5KB 램
- DIYablesWebDigitalPinsPage: ~8KB 플래시, ~2KB 램
- DIYablesWebSliderPage: ~6KB 플래시, ~1.5KB 램
- DIYablesWebJoystickPage: ~7KB 플래시, ~1.5KB 램
- DIYablesWebPlotterPage: ~10KB 플래시, ~2KB 램
- WebSocket 버퍼: ~1KB 램(연결당)
모든 앱 활성화 시 총합: ~53KB 플래시, ~12KB 램
최소 설정 (서버 + 홈 + 1개의 앱): ~17KB의 플래시 메모리, ~4.5KB의 램
브라우저 호환성
지원되는 브라우저:
- 크롬 50 이상
- 파이어폭스 45 이상
- 사파리 10 이상
- 엣지 79 이상
- 모바일 브라우저(iOS 사파리, 크롬 모바일)
보안 주의사항
- 인증이 구현되어 있지 않음(로컬 네트워크에만 적합)
- 신뢰할 수 있는 네트워크에서만 사용
- 공개 배포에 대한 인증 추가를 고려하십시오
문제 해결
일반적인 문제
- 와이파이에 연결할 수 없습니다
- SSID와 비밀번호 확인
- 네트워크가 2.4GHz인지 확인합니다(5GHz가 아님)
- 신호 강도 확인
- WebSocket 연결 실패
- IP 주소가 올바른지 확인
방화벽 설정을 확인하세요
- 다른 브라우저를 사용해 보세요
- 높은 메모리 사용량
- 사용하지 않는 애플리케이션 비활성화
동시 연결 수 제한
- 메모리 단편화가 발생하면 ESP32를 재시작합니다
- 느린 응답
- 와이파이 신호 강도 확인
- WebSocket 메시지 전송 빈도 감소
더 짧은 콜백 함수를 사용하세요.
예시 프로젝트
예시 애플리케이션
DIYables ESP32 WebApps 라이브러리는 ESP32 교육용 플랫폼을 위해 설계된 포괄적인 예제를 포함합니다:
사용 가능한 예제
- 채팅 예시: 양방향 통신 인터페이스
- 웹 모니터 예시: 향상된 기능을 갖춘 직렬 모니터 대체
- 웹 디지털 핀 예시: 시각적 피드백으로 모든 디지털 핀을 제어
- 웹 슬라이더 예시: 프리셋이 있는 이중 아날로그/PWM 제어
- 웹 조이스틱 예시: 로봇 프로젝트용 2D 위치 제어
- 다중 웹 앱 예시: 모든 애플리케이션이 동시에 실행
완전한 프로젝트는 examples/ 폴더를 확인하고, 자세한 설정 지침은 docs/ 폴더를 확인하십시오.
플랫폼 추상화 인터페이스
DIYables ESP32 WebApps 라이브러리는 다수의 하드웨어 플랫폼을 지원할 수 있도록 하는 인터페이스를 갖춘 플랫폼 추상화 계층을 사용합니다. 이 인터페이스들은 핵심 WebApp 기능을 플랫폼별 구현으로부터 분리합니다.
핵심 인터페이스
IWebClient
HTTP 클라이언트 연결을 위한 인터페이스.
IWebSocket
양방향 통신을 지원하는 웹소켓 연결 인터페이스.
아이웹서버
HTTP 서버 기능을 위한 인터페이스.
I웹소켓서버
연결 관리 기능이 있는 웹소켓 서버 인터페이스
INetworkProvider
네트워크 연결 관리를 위한 인터페이스.
IServerFactory
플랫폼별 구현체 생성을 위한 팩토리 인터페이스.
플랫폼 구현 예시
ESP32용 인터페이스는 DIYables_ESP32_WebServer 라이브러리를 사용하여 구현됩니다:
새로운 플랫폼 지원 추가
새로운 플랫폼(예: ESP32)에 대한 지원을 추가하려면:
- 타깃 플랫폼용 모든 인터페이스를 구현한다
- 당신의 구현을 인스턴스화하는 ServerFactory를 생성한다
- 플랫폼별 네트워킹 처리 및 WebSocket 프로토콜을 다룬다
- 기존 WebApp 클래스와 함께 테스트한다 (변경 필요 없음)
다양한 플랫폼에서의 사용 예시:
인터페이스 기반 설계의 이점
- 플랫폼 독립성: 코어 WebApp 로직은 어떤 플랫폼에서도 작동합니다
- 확장성: 새로운 하드웨어 지원을 쉽게 추가할 수 있습니다
- 유지보수성: 플랫폼별 코드는 격리되어 있습니다
- 테스트 용이성: 인터페이스를 단위 테스트를 위해 모의(mock) 객체로 대체할 수 있습니다
- 일관성: 지원되는 모든 플랫폼에서 동일한 API를 제공합니다
현재 플랫폼 지원
- ✅ ESP32: 완전히 구현되었고 테스트되었습니다
- 🔄 ESP32: 별도의 확장으로 이용 가능 - DIYables_WebApps_ESP32
- 🚀 향후 플랫폼들: 같은 인터페이스 패턴으로 추가할 수 있습니다