Wiznet makers

Benjamin

Published September 23, 2025 ©

54 UCC

11 WCC

6 VAR

0 Contests

0 Followers

1 Following

Original Link

ESP32-S3 Smart Display Portal with W5500 Ethernet and WS2812 LED Control

A comprehensive IoT display portal combining ESP32-S3 with W5500 hardware TCP/IP for stable ethernet connectivity, 4" TFT display, and addressable LED control

COMPONENTS Hardware components

WIZnet - W5500

x 1


Espressif - ESP32

x 1


x 1


PROJECT DESCRIPTION

Introduction

This project builds a wired display and LED control portal using an ESP32-S3 microcontroller, a WIZnet W5500 Ethernet Controller, a 4″ ST7796 SPI TFT display, and WS2812 LED strips. It favors wired reliability and low latency over Wi-Fi, making it ideal for dashboards, visual controllers, or industrial indicators. Planned extensions include HTTP/REST APIs, PC applications, and smart home integration.


WIZnet Product Integration

The WIZnet W5500 is connected to the ESP32-S3 via SPI and handles Ethernet communications through its hardware TCP/IP stack. With support for multiple sockets, large internal buffers, and low-latency operation, the W5500 enables deterministic and reliable networking without burdening the MCU.

The intended data path is:
ESP32-S3 MCU → SPI → W5500 → Wired LAN → HTTP/REST clients or servers.


Technical Implementation

Hardware

SPI Bus Allocation: The W5500 and TFT display both use SPI, requiring chip-select management. When using WS2812 LEDs, the led_strip RMT backend is recommended to avoid bus conflicts.

Critical Signals:

  • W5500: MOSI, MISO, SCLK, CS, optional INT/RST, 3.3 V logic.
  • ST7796 TFT: SCK, MOSI, CS, DC, RST, BL.
  • WS2812: Data line (5 V logic recommended), 5 V power, common ground.

Power: High-current LED strips need a separate 5 V power rail with a large electrolytic capacitor near the strip to stabilize voltage.

Software

  • LED Control: Uses the led_strip component. The RMT backend is preferred for precision and independence from SPI devices.
  • Display: The ST7796 TFT can be driven via an ESP-IDF-compatible driver or with GUI libraries such as LVGL for advanced UIs.
  • Networking (Planned): Configuration of the W5500 for DHCP/static IP, automatic reconnection, and an HTTP/REST API service for remote control.

Reproduction Steps

  • Clone the repository and set the target: idf.py set-target esp32s3.
  • Install required components via the ESP-IDF Component Manager.
  • Configure LED pin and LED count in project settings.
  • Build, flash, and monitor with idf.py build flash monitor.
  • Connect LEDs to a proper 5 V power supply.

Block Diagram

  • ESP32-S3 → SPI → TFT Display
  • ESP32-S3 → SPI → WIZnet W5500 → LAN
  • ESP32-S3 → RMT → WS2812 LEDs

Core Features and Performance

Implemented

  • ESP-IDF scaffolding for ESP32-S3.
  • WS2812 LED control with presets and button interaction.

Planned

  • W5500 Ethernet support.
  • HTTP/REST API endpoints.
  • Multi-strip LED control.
  • Display configuration and UI rendering.
  • PC application and Home Assistant integration.

Performance (future measurement plan)

  • LED frame rates vs. LED count and brightness.
  • Ethernet latency and reconnect time.
  • TFT refresh rate with partial and full updates.

Code Analysis 

The repository includes a minimal LED pipeline based on the led_strip component. The get-started blink example shows the core loop—initialize the strip, set a pixel color, and refresh—providing a clean baseline for later features (Ethernet control, REST API, and TFT UI). This snippet captures the essential update flow we build upon.

// path: test_examples/get-started/blink/main/blink_example.c
// func: app_main | purpose: init LED strip and blink one pixel
void app_main(void) {
    led_strip_handle_t strip;
    led_strip_config_t cfg = {
        .strip_gpio_num = CONFIG_BLINK_GPIO,
        .max_leds       = 1,
    };
    led_strip_rmt_config_t rmt = {
        .clk_src = RMT_CLK_SRC_DEFAULT,
        .resolution_hz = 10 * 1000 * 1000
    };
    led_strip_new_rmt_device(&cfg, &rmt, &strip);

    while (true) {
        led_strip_set_pixel(strip, 0, 16, 16, 16);   // dim white
        led_strip_refresh(strip);
        vTaskDelay(pdMS_TO_TICKS(500));
        led_strip_clear(strip);
        led_strip_refresh(strip);
        vTaskDelay(pdMS_TO_TICKS(500));
    }
}

Applications and Use Cases

  • Home Dashboard: Ethernet-connected control panel with LED status indicators.
  • Event Visuals: Real-time LED animations for shows and interactive installations.
  • Industrial Indicators: Low-latency wired display with LED alarms.
  • PC Companion: Desktop application controlling presets over Ethernet.
  • Smart Home Integration: Planned HTTP/REST hooks for Home Assistant.
  • Extension Ideas
    • Add LVGL-based GUI with efficient SPI updates.
    • Implement robust DHCP/static IP fallback and reconnection.
    • Add OTA update capability over Ethernet.
    • Harden security with token authentication and HTTPS gateways.

Safety Notes

  • High current demand from LED strips requires careful power design.
  • Always use a common ground between MCU and LED supply.
  • Avoid SPI conflicts by using RMT for WS2812 instead of SPI backend.

Conclusion

  • This project demonstrates how WIZnet W5500 can add reliable wired networking to an ESP32-S3-based LED and display portal. With the LED control loop working and Ethernet plus HTTP/REST planned, it offers makers a strong foundation for stable dashboards, installations, and automation hubs.
  • Call to action: Clone the repository, assemble the hardware, and contribute to expanding Ethernet and HTTP functionality for a fully networked portal.
Documents
Comments Write