Embedded Web Server from Scratch on W5500-EVB-Pico — Personal Blog Hosting in C
Hand-built embedded web server on W5500-EVB-Pico (RP2040 + W5500) in C, serving a personal blog from scratch. No frameworks, no OS. Portfolio project. 2025 new.
Overview
This is a from-scratch embedded web server running on the WIZnet W5500-EVB-Pico board (RP2040 + W5500 integrated), serving a personal blog over HTTP. Written entirely in C with no web frameworks, no RTOS, and no external web libraries, this is a portfolio project demonstrating deep understanding of network programming at the socket level on embedded hardware.
The W5500-EVB-Pico provides the perfect platform for this — the RP2040 microcontroller paired with an onboard WIZnet W5500 Ethernet controller gives a complete wired HTTP server in a compact board form factor.
What This Project Does
- Implements an HTTP/1.1 server from scratch using W5500 TCP sockets
- Parses incoming HTTP GET requests and serves HTML blog content
- Handles multiple client connections using W5500's 8 hardware sockets
- Runs on RP2040 bare-metal (no OS, no FreeRTOS)
- Personal blog content served directly from the microcontroller's flash
Why Build from Scratch? This is a learning-focused portfolio project. Implementing the TCP server, HTTP parser, and response builder from scratch (rather than using a library like lwIP or Mongoose) demonstrates thorough knowledge of socket programming, HTTP protocol structure, and embedded C development.
Hardware
- Board: WIZnet W5500-EVB-Pico (RP2040 + W5500 integrated on-board)
- Connection: RJ45 directly on the board — no additional Ethernet module needed
- Language: C
- Framework: Raspberry Pi Pico SDK (bare-metal)
How to Build
- Clone:
git clone https://github.com/UltraVioletWitch/EmbeddedWebServer - Install Raspberry Pi Pico SDK and set
PICO_SDK_PATH - Build with CMake:
mkdir build && cd build && cmake .. && make - Flash the
.uf2file by holding BOOTSEL and drag-dropping to the Pico USB drive - Access the blog via the assigned IP address in a browser
FAQ
Q1. Why use W5500-EVB-Pico for a web server? The W5500-EVB-Pico integrates W5500 directly on the board, eliminating external wiring. The RP2040 + W5500 combination provides 8 hardware TCP/UDP sockets and a hardware TCP/IP stack — making it well-suited for a simple but reliable embedded web server without software TCP/IP overhead.
Q2. What HTTP features are supported? Since this is built from scratch, it targets the minimal HTTP/1.1 subset needed for serving static blog content: GET request parsing, response headers (Content-Type, Content-Length), and HTTP 200/404 responses.
Q3. Can this handle multiple simultaneous connections? The W5500 provides 8 independent hardware sockets. The implementation can use multiple sockets to handle concurrent clients, though the exact concurrency model depends on the implementation details.
Key Takeaway
Building an HTTP web server from scratch on W5500-EVB-Pico in C is an excellent portfolio project that demonstrates mastery of embedded networking. The W5500's hardware TCP/IP stack simplifies socket-level programming while the RP2040 provides ample processing power — making this a compelling embedded web hosting platform.
Source Code: https://github.com/UltraVioletWitch/EmbeddedWebServer
