Wiznet makers

matthew

Published December 16, 2025 ©

114 UCC

9 WCC

38 VAR

0 Contests

0 Followers

1 Following

Original Link

W6300-EVB-PICO2にArduinoVNCを移植する話

W6300-EVB-PICO2にArduinoVNCを移植する話

COMPONENTS
PROJECT DESCRIPTION

Title

Porting ArduinoVNC to W6300-EVB-PICO2: replacing Wi-Fi with W6300 wired Ethernet (DHCP), avoiding SPI conflicts, and pushing toward a tiny thin-client


Introduction

This project is a practical porting story from kazueda’s Zenn article (published 2025/12/14): taking an ArduinoVNC sketch originally built for Raspberry Pi Pico W (Wi-Fi) and moving it onto WIZnet’s W6300-based W6300-EVB-PICO2. The author doesn’t just claim success—they documents the exact engineering steps that make embedded ports reliable: swapping the network stack, stabilizing reset timing, pinning the display bus to avoid contention, temporarily disabling input peripherals, and finally reaching a working milestone: connecting from W6300-EVB-PICO2 to a VNC server running on a Raspberry Pi 4 (TigerVNC/TightVNC).
What makes this worth curating is the method: it’s a clean example of how to carve a “messy” bring-up into a minimal success path—and it ends with a concrete direction for future work: exploring the device as a truly compact thin client.


Overview

The outcome of the article can be read as three deliberate stages, each enabling the next.

Establish a stable wired network baseline
ArduinoVNC on Pico W naturally leans on Wi-Fi libraries and connection loops. The author removes the Wi-Fi include/connect logic and replaces it with W6300lwIP-based Ethernet initialization plus a DHCP wait loop. A notably “real-world” touch is the explicit manual reset pulse (LOW → 100 ms → HIGH → 100 ms) before bringing Ethernet up—small details like this often make the difference between flaky and repeatable bring-up.

Make the display deterministic (avoid shared-bus surprises)
On boards where the Ethernet controller already occupies a critical bus/pin set, “network works but screen is broken” (or the reverse) is common. Instead of relying on auto-configuration, the author pins the LCD to SPI1 and hard-codes the relevant pins, removing a major class of SPI contention problems.

Defer non-essential peripherals until the baseline is solid
Touch and an I2C keyboard are useful—but they also introduce more pin conflicts and debugging variables. The article disables them temporarily, focuses on getting W6300 connectivity + LCD rendering working first, then plans to re-enable input later with safer pin assignments.

In short, this is not a generic networking demo. It’s an embedded port that turns a small MCU-class board into a wired, interactive VNC viewer, which is exactly the kind of workload where stability, bus planning, and incremental integration matter.


Quick background

1) What ArduinoVNC is

ArduinoVNC is a VNC viewer implementation intended for microcontrollers or small boards. It connects to a remote VNC server (e.g., TigerVNC/TightVNC on a Raspberry Pi 4), then:

receives screen updates (typically as rectangles/tiles),

renders them onto a local LCD (often via a graphics layer such as Arduino_GFX), and

sends input events (touch/keyboard translated into mouse/key events) back to the server.

That means ArduinoVNC is a combined workload: networking + graphics rendering + input event delivery. If any part is unstable—network jitter, bus contention, slow draw paths—you feel it immediately.

2) Where VNC is commonly used

VNC (RFB-based remote framebuffer control) shows up repeatedly in a few well-known patterns:

Headless device operation: managing a Raspberry Pi / Linux box without a monitor, while still using a GUI remotely.

Remote support and troubleshooting: screen-sharing and control for IT/helpdesk workflows.

Virtualization and server console access: VM/host graphical consoles, often via browser-based noVNC.

Out-of-band / KVM-style remote management: scenarios where a graphical console is needed even during boot or recovery (implementation details vary by product, but “VNC console” is a recurring motif).

The use case in this article—Raspberry Pi 4 as a VNC server, a small embedded device as the viewer—maps especially well to headless operation and thin-client style access.

3) Who uses VNC, and how broadly (qualitative view)

It’s hard to give a single trustworthy “global user count” because usage spans many implementations and deployment styles. But the user groups are consistently broad:

Makers, students, researchers: remote GUI control of Raspberry Pi and lab machines.

System and infrastructure engineers: VM/server console access and operational workflows.

IT support organizations: remote assistance and troubleshooting.

Embedded/OT engineers: lightweight terminals where heavy UI runs elsewhere.

So VNC tends to behave like infrastructure: not always visible as a “hot product,” but widely present where remote graphical access is needed.

4) Why “Wi-Fi → wired Ethernet” matters so much for VNC

VNC is sensitive to latency and packet loss in a very human way—stutters and delays become instantly obvious. That’s why the author’s decision to remove Wi-Fi assumptions and build on wired Ethernet (DHCP) is more than preference: it’s a practical design choice aligned with the workload, especially if the long-term goal is a reliable, small thin client device.

 

Author & Community (who the author is, and where the impact comes from)

Author: who is kazueda?

Based on the Zenn profile line shown in your screenshots, kazueda introduces themselves as someone who loves 8-bit CPUs and MCUs—very much a maker/embedded engineer vibe. The writing style matches that: instead of presenting a polished “finished product,” it documents a bring-up → conflict resolution → staged feature expansion process.

This post is also part of the Raspberry Pi Advent Calendar 2025 (listed for 12/22), which naturally creates a distribution path like:

People following the calendar discover it in sequence

Related contributors cross-reference and share within the same theme cluster

It spreads more like a community reading chain than a one-off SEO article

Why this content has real leverage (qualitative)

Its value isn’t “I ran something on a W6300 board.” It’s that it captures reusable porting patterns with enough specificity to replicate:

Replaces the entire Wi-Fi stack with wired Ethernet + DHCP

Accepts W6300 resource constraints (SPI/pins) and moves the LCD to SPI1 explicitly

Disables touch/keyboard during bring-up to reduce variables

Publishes a diff patch to make reproduction realistic

That makes it useful not only to WIZnet users, but to anyone doing RP-class + Arduino sketch porting.


Architecture & Data Flow (mechanism-first)

Here’s the port described as a system flow—because with VNC, networking and display/IO resource layout must both work.

End-to-end flow (high level)

W6300-EVB-PICO2 (ArduinoVNC) acquires an IP via DHCP

It connects (through the router) to a VNC server on Raspberry Pi 4 over TCP (typically 5900/5901, etc.)

Server → device: framebuffer updates stream in

Device renders to LCD via Arduino_GFX (ILI9341)

(Future) touch/keyboard events would be sent back to the server
→ In the current stage, input is intentionally disabled

0) Bring-up priority: define the “minimum success path”

The author doesn’t try to enable everything at once. They aim to make W6300 networking + LCD rendering coexist first, then revisit input devices later. This is a classic move: once touch/keyboard are enabled, debugging can explode due to pin/bus conflicts.

1) Networking stack swap: Wi-Fi → W6300 wired Ethernet

Remove WiFi.h and the Wi-Fi connect loop (WiFi.mode/begin/status)

Introduce W6300lwIP, call eth.begin(), then wait on eth.connected() for DHCP

Stability tweak: manually pulse reset on the W6300 reset pin (LOW 100ms → HIGH 100ms) before calling eth.begin()

It’s not “just changing a library”—it’s replacing the connection model from a Wi-Fi state machine to an Ethernet link/DHCP model.

2) LCD stability: eliminate SPI0 contention structurally

On this board family, the network chip owns critical resources. The author avoids automatic display bus selection and forces SPI1 with explicit pin mapping:

Hard-define LCD SCLK/MOSI/MISO/CS/DC/RST pins

Force the bus using Arduino_RPiPicoSPI(..., spi1)

Drive the panel with Arduino_ILI9341

For VNC, this is basically “half the win,” because display rendering is the whole point.

3) Temporarily disable touch/keyboard: the bring-up isolation strategy

Comment out touch.h, keyboard.h, their init calls, and their handlers

Rationale: W6300 has dedicated pins (e.g., GPIO16–21, 22, 15, etc.) and other features risk collisions

Plan: later re-enable after re-mapping to safe pins

This isn’t “giving up features”—it’s a deliberate isolation phase.

4) Status UI/logging: improve debug throughput

Rename and update the message from TFTnoWifi()TFTnoEthernet()

Print eth.localIP() after connection

In networked embedded systems, showing the IP can save hours.

5) Patch publication

The author publishes a diff patch and notes it targets their modified ArduinoVNC-pico.ino and may not perfectly patch personal settings—honest and useful for real-world reproduction.


WIZnet / Ethernet Section (where WIZnet is used)

In this content, WIZnet isn’t “background”—it’s the core enabler.

Hardware: W6300-EVB-Pico2, an RP2350-based evaluation board featuring WIZnet’s W6300 hardwired TCP/IP Ethernet controller

Software: bring-up uses W6300lwIP / Wiznet6300lwIP to initialize Ethernet and obtain DHCP connectivity (as shown in the article text/patch)

System impact: because W6300 claims specific buses/pins, the port explicitly restructures resources—LCD moved to SPI1, input disabled until safe pin reassignment

So the post demonstrates how to make a complete application (VNC) work around and with a WIZnet Ethernet board’s constraints, rather than treating networking as an afterthought.


Results / Lessons learned / Limitations

Results (what worked)

Wired Ethernet (DHCP) successfully brought up on W6300-EVB-PICO2

ArduinoVNC connects to a VNC server on Raspberry Pi 4 (TigerVNC/TightVNC referenced)

The setup uses a router to connect the device and the Pi

Lessons learned (transferable patterns)

Explicit resource assignment beats “auto config” when buses collide (SPI1 forcing is often the fastest route to stability)

Input devices are bring-up multipliers—get network + display stable first

Ethernet bring-up is often half reset timing—manual reset pulses can dramatically improve stability

Status messages and IP display are part of the product, not just debugging

Publishing a patch creates impact—others can follow, fork, and extend

Limitations / next steps (as stated by the author)

Touch pad and I2C keyboard remain disabled for now

Plan to add DNS-based addressing so the VNC server can be selected by name

Explore the form factor as a thin client (e.g., “foldable keyboard-sized thin client”)


Where this matters (who benefits)

Engineers building wired Ethernet apps on RP-class boards (Pico/Pico2 family)

W6300-EVB-Pico2 users needing network + LCD bring-up on the same target

Anyone porting Arduino sketches across boards and wanting repeatable conflict-resolution patterns (SPI/pins/feature staging)

Teams exploring thin-client/HMI alternatives where the terminal stays light and the UI lives on a remote host


Quick Reproduce / Getting Started (checklist)

Remove Wi-Fi related code from the ArduinoVNC sketch

Replace with W6300lwIP-based Ethernet bring-up

Apply a manual W6300 reset pulse (e.g., 100ms low/high) before eth.begin()

Wait for DHCP using eth.connected()

Force the LCD onto SPI1 with explicit pin mapping

Disable touch/keyboard during the initial bring-up phase

Update UI/log messages for Ethernet and print eth.localIP()

Configure VNC server IP/port/password and validate connection


References (collected)

[1] Zenn — kazueda, “W6300-EVB-PICO2にArduinoVNCを移植する話” (2025/12/14): https://zenn.dev/kazueda/articles/6a296ed5b09603 (verified via user-provided screenshots/text/patch)
[2] Raspberry Pi Advent Calendar 2025: https://adventar.org/calendars/11389
[3] WIZnet Product Page — W6300-EVB-Pico2: https://wiznet.io/products/evaluation-boards/w6300-evb-pico2
[4] WIZnet Product Page — W6300 Ethernet Controller: https://wiznet.io/products/ethernet-chips/w6300
[5] RFC 6143 — The Remote Framebuffer Protocol (RFB, used by VNC): https://www.rfc-editor.org/rfc/rfc6143

Documents
Comments Write