STM32 Ethernet with W5500 (PART 5): STM32 as HTTP WebServer | LED Control
STM32 Ethernet with W5500 (PART 5): STM32 as HTTP WebServer | LED Control
🔌 STM32와 W5500으로 구축하는 실용적인 HTTP 웹 서버
— CGI 없이도 가능한 실전 LED 제어 튜토리얼 소개
이번 콘텐츠에서는 STM32 MCU와 WIZnet W5500 이더넷 칩을 활용하여 HTTP 웹 서버를 직접 구축하는 방법을 단계별로 안내합니다. 네트워크에 연결된 장치에서 웹 브라우저를 통해 LED를 제어하는 실습까지 포함되어 있어, 임베디드 네트워크 개발을 처음 접하는 분들에게도 매우 실용적인 가이드를 제공합니다.
📌 튜토리얼 핵심 내용 요약
1. 프로젝트 구성 및 환경 준비
WIZnet W5500 전용 라이브러리 파일을 프로젝트에 복사하여 사용
HTTP 서버 구동을 위한 예제 파일들도 함께 포함
W5500의 8개 소켓 중
DHCP: 소켓 7, DNS: 소켓 6
웹 서버용 소켓: 2개(0, 1) 사용
2. 정적 웹 페이지 등록
서버는 기본적으로 다음 세 가지 정적 페이지를 제공하도록 설정됩니다.
/index.html — 메인 페이지
/ledon.html — LED 켜기
/ledoff.html — LED 끄기
각 페이지는 register_http_server_web_content() 함수를 통해 URI와 매핑되어 서버에 등록됩니다.
3. CGI 없이 구현하는 동적 동작 처리 (핵심)
일반적으로 URI 요청에 따른 특정 행동을 구현하려면 CGI 방식을 사용해야 하지만, 구조가 복잡하고 임베디드에서는 부담이 될 수 있습니다.
이 튜토리얼에서는 CGI를 사용하지 않고, HTTP Dynamic Handler라는 커스텀 함수를 직접 구현하여 URI 요청을解析하고 LED 제어 로직을 수행합니다.
구현 방식
커스텀 핸들러 함수 작성
http_dynamic_handler() 형태의 사용자 정의 함수
요청된 URI를 확인해 LED ON/OFF 수행
HTTP Process Handler에 직접 연결
HTTP 요청 처리 루틴의 switch-case 내부에서
기본 GET 처리 이후 커스텀 핸들러를 수동으로 호출
URI 정보는 구조체 형태로 전달
4. LED 제어 로직
STM32 보드의 PC13 핀에 연결된 LED 제어
LED는 Active Low 방식
→ LOW 쓰기: LED 켜짐
→ HIGH 쓰기: LED 꺼짐
5. HTTP 서버 실행 구조
웹 서버는 http_server_run() 함수가 담당하며 다음 기능을 포함합니다:
소켓 연결 처리
HTTP 요청 파싱
페이지 전송
클라이언트 연결 유지 및 종료
이 함수는 무한 루프(while) 안에서 지속적으로 호출되어 웹 서버가 상시 동작하도록 합니다.
6. 실제 동작 결과
테스트 환경에서 W5500의 IP 주소인 192.168.1.4에 접속한 후:
인덱스 페이지 정상 로드
LED On / Off 버튼 클릭 시 LED가 즉시 반응
URI 요청 → 핸들러 → GPIO 제어로 이어지는 전체 흐름이 안정적으로 동작함을 확인
🎯 이 튜토리얼의 의미
이 예제는 단순히 LED를 제어하는 수준을 넘어,
“W5500 기반 HTTP 서버에서 CGI 없이도 실용적인 동적 기능 구현이 가능하다”
는 점을 명확하게 보여주는 사례입니다.
임베디드 환경에서 REST API, 장치 제어, 실시간 모니터링 페이지 등
확장형 서비스를 구현할 때 유용한 구조를 배울 수 있습니다.
✨ 마무리
STM32와 W5500 조합은 다음과 같은 장점이 있습니다:
하드웨어 TCP/IP 스택 기반의 안정적인 네트워크
소형 MCU에서도 구현 가능한 경량 웹 서버
URI 기반의 유연한 커스텀 기능 추가 가능
이번 튜토리얼은 네트워크 임베디드 개발 입문자부터
실제 제품 개발자까지 모두에게 도움이 될 수 있는 실전 예제입니다.
