Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ArtNet → WS2811 Bridge

Firmware that receives ArtNet DMX over Ethernet and drives up to 8 parallel WS2811 LED universes in real time.

Supports two WIZnet boards — selected at build time via -DPICO_BOARD:

PICO_BOARD Board MCU Ethernet
pico2 W6300-EVB-Pico2 RP2350 W6300 — QSPI, IPv4/IPv6
pico W5500-EVB-Pico RP2040 W5500 — SPI, IPv4

Built for LED walls — each output carries one ArtNet universe (170 RGB pixels / 512 DMX channels) at up to 40 fps.

This project uses the Pico SDK directly (not Arduino). Full PIO and DMA access is required for real-time parallel LED output.


Hardware

Component Purpose
W6300-EVB-Pico2 or W5500-EVB-Pico MCU + WIZnet hardware TCP/IP
SN74LVC4245A (LJ245A) 3.3 V → 5 V level shift for WS2811 data lines
5 V PSU Power for LEDs + level shifter VCCB

Pinout — WS2811 Outputs (8 channels)

Same GPIO assignment on both boards:

GPIO SN74LVC4245A ArtNet Universe PIO Block State Machine Default use
GP0 A1 → B1 0 PIO0 SM0 Universe 0
GP1 A2 → B2 1 PIO0 SM1 Universe 1
GP2 A3 → B3 2 PIO0 SM2 Universe 2
GP3 A4 → B4 3 PIO0 SM3 Universe 3
GP4 A5 → B5 4 PIO1 SM0 Universe 4
GP5 A6 → B6 5 PIO1 SM1 Universe 5
GP6 A7 → B7 6 PIO1 SM2 Reserve
GP7 A8 → B8 7 PIO1 SM3 Reserve

WS2811_BASE_PIN and WS2811_NUM_OUTPUTS in config.h control which pins and how many are active.
The universe offset is set with ARTNET_UNIVERSE_START (default 0).

Wiring Diagram

EVB-Pico / EVB-Pico2     SN74LVC4245A          WS2811 strips
────────────────────      ────────────          ─────────────
GP0  ──────────── A1 ──► B1 ───────────────► Universe 0  (170 RGB px)
GP1  ──────────── A2 ──► B2 ───────────────► Universe 1
GP2  ──────────── A3 ──► B3 ───────────────► Universe 2
GP3  ──────────── A4 ──► B4 ───────────────► Universe 3
GP4  ──────────── A5 ──► B5 ───────────────► Universe 4
GP5  ──────────── A6 ──► B6 ───────────────► Universe 5
GP6  ──────────── A7 ──► B7 ───────────────► Universe 6  (optional)
GP7  ──────────── A8 ──► B8 ───────────────► Universe 7  (optional)

3.3V ───────────── VCCA
5V (ext PSU) ───── VCCB
GND ────────────── GND (common with PSU!)
HIGH ───────────── DIR   (A→B direction)
GND ────────────── /OE   (always enabled)

Reserved — Ethernet chip (do not use):
  W6300-EVB-Pico2:  GP15=INT  GP16=CS  GP17=SCK  GP18=IO0  GP19=IO1  GP20=IO2  GP21=IO3  GP22=RST
  W5500-EVB-Pico:   GP16=MISO  GP17=CS  GP18=SCK  GP19=MOSI  GP20=RST  GP21=INT

Important: Connect GND of the external 5 V PSU to the board GND. Missing common ground is the most common cause of signal errors.


Features

  • Hardware ArtNet reception via WIZnet chip (hardware TCP/IP, no lwIP overhead)
  • Parallel WS2811 output using PIO — all universes sent simultaneously
  • DMA-driven — zero CPU load during LED output
  • Double-buffered — new ArtNet data can arrive while the previous frame is being sent
  • 40 fps frame rate (configurable)
  • Up to 8 independent universes (limited by PIO state machines)

Configuration

Edit src/config.h before building:

#define WS2811_BASE_PIN     0       // first output GPIO
#define WS2811_NUM_OUTPUTS  6       // 1–8

#define ARTNET_UNIVERSE_START  0    // first ArtNet universe → output 0

#define NET_IP     { 192, 168, 1, 200 }
#define NET_SUBNET { 255, 255, 255, 0 }
#define NET_GW     { 192, 168, 1, 1   }

Build

Requirements

  • Raspberry Pi Pico SDK ≥ 1.5 (W5500) or ≥ 2.0 (W6300)
  • CMake ≥ 3.20
  • ARM GCC toolchain (arm-none-eabi-gcc)

Steps

# 1. Clone WIZnet ioLibrary — check out the branch matching your board
git clone https://github.com/WIZnet-ioLibrary/ioLibrary_Driver lib/ioLibrary_Driver

# W6300-EVB-Pico2:
cd lib/ioLibrary_Driver && git checkout W6300 && cd ../..

# W5500-EVB-Pico (master is the default):
# cd lib/ioLibrary_Driver && git checkout master && cd ../..

# 2. Copy pico_sdk_import.cmake
cp $PICO_SDK_PATH/external/pico_sdk_import.cmake .

# 3. Configure & build — set PICO_BOARD to match your hardware
mkdir build && cd build

# W6300-EVB-Pico2:
cmake .. -DPICO_BOARD=pico2

# W5500-EVB-Pico:
# cmake .. -DPICO_BOARD=pico

make -j4

Flash build/ArtNetToWS2811.uf2 via USB (hold BOOTSEL while plugging in).


ArtNet Setup

Parameter Value
Protocol Art-Net 4 (UDP)
Port 6454
Universe 0 → Output GP0
Universe 1 → Output GP1

Compatible with MadMapper, QLC+, Resolume, sACN-to-ArtNet bridges, and any Art-Net 4 source.


Architecture

Ethernet → WIZnet chip (HW TCP/IP) → UDP socket
                                          │
                                    ArtNet parser
                                          │
                               universe buffer (double-buffered)
                                          │
                                DMA → PIO state machine
                                          │
                               SN74LVC4245A (3.3V→5V)
                                          │
                                  WS2811 LED strip

Both MCUs (RP2040 and RP2350) have 8 PIO state machines across 2 PIO blocks. Each state machine drives one universe independently. DMA transfers run in the background — the CPU only handles Ethernet polling and ArtNet parsing.


License

MIT

About

ArtNet → WS2811 bridge for WIZnet W6300-EVB-Pico2 — 8 parallel LED universes via RP2350 PIO + DMA

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages