Skip to content

wled custom builds

WLED modifications for sp530e hardware Controllers with ESP32-C3 chips

Lihan__

Published August 18, 2026

Original author: johnvoipguyOriginal source (new tab)

wled custom builds

Project description

WLED Custom Builds β€” W5500 Ethernet for LED Controllers: A Field Study in TOE vs. MACRAW

#W5500 #WIZnet #TOE #MACRAW #ESP32S3 #WLED #OTA #DDP #E131 #ArtNet #PoE #SPI

πŸ“š Context: Independent open-source maintainer project β€” a build-and-release pipeline for custom WLED firmware targets, with the Waveshare ESP32-S3-ETH (W5500) as its most technically documented line. βœ… Verification status: Hardware-validated on two physical Waveshare ESP32-S3-ETH boards. Ethernet/PoE link-up, Wi-Fi, DDP over both transports, the web UI over both transports, and runtime LED bus reconfiguration are all confirmed passing on the recommended v17 line. MQTT is explicitly listed as not yet tested, and OTA β€” while described by the maintainer as working automatically over Ethernet β€” is not itemized in that validation list. The superseded v16 line is documented with an equally rigorous negative result.


01 β€” What is this project?

the original repo
the original repo

πŸ”· First, some background: what WLED is, and why it works differently from ordinary firmware

Most embedded firmware is written for one product. You define the behavior, compile it, flash it, and that binary belongs to that device. WLED does not work that way, and understanding why is the key to understanding this repository.

WLED is an open-source firmware for controlling addressable LED strips β€” WS2812-family strips where every individual pixel has its own color, as opposed to a normal LED strip where the whole run is one color. You flash WLED onto an ESP32, connect a strip to a data pin, and the board joins your network and serves a web interface.

The crucial part: the behavior is not compiled in. WLED ships with a large built-in library of lighting effects β€” rainbow sweeps, fire flicker, music-reactive patterns, solid colors β€” and the user picks them from the web UI at runtime. Even the hardware wiring is configured through that same web UI: which GPIO carries the LED data, how many pixels are on it, which chipset they are. Those values are stored as JSON in flash and read at boot.

This means one binary serves an unlimited number of different wiring setups. The only thing that genuinely requires a different binary is a different MCU family β€” an ESP32, an ESP32-S3, and an ESP32-C3 produce incompatible machine code β€” which is why WLED's official releases are published per-MCU rather than per-board. A user downloads the one matching their chip and configures the rest by clicking.

For large installations, WLED also accepts live pixel data from professional lighting software over the network, using the protocols that industry already runs on: DDP, E1.31 (sACN), and Art-Net. A PC running sequencing software such as xLights streams frames continuously, and the controller becomes a rendering endpoint rather than an autonomous device.

πŸ”· Where that model breaks β€” and why this repository exists

The web UI can only expose features that exist in the compiled binary. If the code for something isn't there, no amount of configuration will summon it.

The Waveshare ESP32-S3-ETH board carries a WIZnet W5500 Ethernet controller on SPI. WLED's upstream Ethernet support was built exclusively around RMII PHYs attached to the ESP32's internal EMAC β€” a peripheral the ESP32-S3 does not physically contain. On an S3, WLED's stock Ethernet board table doesn't merely fail to list this board; the build refuses to compile at all.

wled-custom-builds exists to close exactly that kind of gap. Concretely, it does three things:

β‘  It carries board-specific source modifications, not configuration presets. Each supported board has a folder containing .patch files that surgically modify upstream WLED source β€” network.cpp and others β€” plus vendored copies of libraries the maintainer had to fix, a custom partition table .csv, and PlatformIO environment fragments defining pin assignments and flash behavior. The W5500 Ethernet support is newly written driver integration code, not a flag being switched on. Upstream WLED is refetched clean on every build and the overlay is applied on top, so the engine core stays current while the board work stays separate.

This board actually carries three build lines: v15 (WLED 0.15.x, preserved and frozen, no longer actively developed), v16 (WLED 16.0.1, W5500 hardware-socket Ethernet), and v17 (WLED main, native lwIP W5500 β€” the recommended line). This curation concerns v16 and v17, where the Ethernet architecture work lives.

β‘‘ It builds those targets and publishes finished binaries. GitHub Actions builds on pushes and PRs that touch targets/** or the workflow file itself β€” deliberately narrow triggers β€” and writes a dated log and build-metadata JSON for each run, and publishes to GitHub Releases β€” but only when the push commit message contains the token release; adding legacy marks it as a prerelease rather than latest. Most WLED users have no development environment and cannot build from source, so shipping ready-to-flash binaries is the entire point of the distribution side.

β‘’ It splits every release into two artifacts, specifically to make firmware updates survivable. This is the part that dominates the repository's own documentation, and it deserves an unambiguous explanation.

πŸ”· About OTA: what WLED already provides, and what this repository actually built

OTA (Over-The-Air update) is a stock WLED feature. This repository did not create it. In WLED, OTA works like this: you open the board's web UI, go to Settings β†’ Security & Updates, and upload a firmware file from your PC. The board writes it into its spare application partition and reboots into the new image. 

Why that matters so much here: these controllers get installed permanently β€” twelve meters up a faΓ§ade, inside a stage rig, behind a wall. Once commissioned, reaching one with a USB cable means a ladder and a service call. OTA is the difference between a five-minute update from a laptop and a site visit.

What this repository built around that feature is twofold.

First, the two-artifact release format. Every release publishes:

ArtifactDelivery methodWhen to use it
wled-<version>-<target>-<suffix>.app.binOTA β€” uploaded via the board's web UIUpdating a board that is currently running and reachable
wled-<version>-<target>-<suffix>.full.binUSB/UART β€” flashed with esptoolNew board, unresponsive board, or after a partition layout change

The .full.bin merges bootloader, partition table, and application into a single image β€” the bootloader is the small program that runs first and decides which application partition to boot; the partition table is the map telling it where everything lives. The build step that produces it fails loudly if any of the three inputs is missing, because a half-formed recovery image on a release page is worse than no image at all.

This split exists because OTA has failure modes with no software escape. A build whose partition layout differs from what's on the device cannot be delivered as an .app.bin. And a mismatched flash-mode header boot-loops inside ROM before any application code executes, producing no serial output whatsoever β€” recoverable only by erasing the chip over USB. The documented rule is one sentence: if OTA is rejected or the board won't boot afterward, flash the matching .full.bin over UART.

Second β€” and this is the part that makes the whole project a WIZnet story β€” the maintainer discovered that whether OTA can travel over Ethernet at all depends entirely on how the W5500 is integrated. Two build lines were produced for the same board. On one, OTA reaches the device only over Wi-Fi even though the Ethernet port has a working IP address. On the other, OTA arrives over Ethernet with no additional code. For a PoE-powered controller on a site with no usable Wi-Fi, that distinction decides whether the installation is remotely maintainable or not. Sections 03 and 04 explain the mechanism in full.

02 β€” Why Ethernet for LED control?

πŸ”· Realtime pixel protocols are unforgiving

DDP and E1.31 are UDP streams with no retransmission and hard deadlines. A frame that arrives late is worse than useless β€” the renderer has already moved on. Wi-Fi's retry and backoff behavior, which is exactly what makes it work for web browsing, is what destroys it for pixel streaming. Wired Ethernet's deterministic latency is the whole reason professional lighting runs on it.

πŸ”· Permanent installs need permanent links

An installation controller is often physically inaccessible after commissioning. Ethernet plus PoE gives you one cable carrying both power and data, with a link that stays up for years and can be diagnosed from the switch port.

πŸ”· The ESP32-S3 has no EMAC β€” so the PHY has to be on SPI

This is the constraint that makes the project a WIZnet story. The classic ESP32 could drive an RMII PHY like the LAN8720 directly. The S3 cannot. Any Ethernet on an S3 must arrive over SPI, and the SPI Ethernet options are effectively the ENC28J60, the W5500, and its WIZnet siblings.

πŸ”· Where the W5500 sits in the WIZnet lineup

(The chip-to-chip comparison in this subsection is general background, not a claim made by the repository β€” the maintainer never evaluated alternatives to the W5500, since the board ships with one.) The W5500 is the mainstream WIZnet choice for this class of design: 8 hardware sockets, a 32 KB internal TX/RX buffer, SPI up to 80 MHz, and 10/100 Ethernet. Against the ENC28J60 β€” the only other SPI Ethernet chip with comparable ecosystem support β€” the W5500 wins on every axis that matters here: the ENC28J60 is 10 Mbps only, has no hardwired TCP/IP stack whatsoever, and carries a well-known reputation for erratum-driven driver complexity. Within WIZnet's own range, the W6100 adds dual-stack IPv6 and the W6300 adds a QSPI host interface for higher throughput, while the W55RP20 fuses a W5500-class MAC/PHY with an RP2040 into a single package. For a board that already has an ESP32-S3 doing the compute, the W5500's plain SPI interface and mature driver ecosystem are exactly the right trade.

03 β€” System architecture

 

03 β€” System architecture

04 β€” Why WIZnet W5500? ⭐

πŸ”· It is the only SPI Ethernet part that gives you a real architectural choice

This is the core of why the project is worth studying. Most Ethernet controllers offer exactly one integration model. The W5500 offers two, and this project is a rare instance of an engineer building both on the same hardware and publishing the measured outcome of each.

πŸ”· Mode 1 β€” TOE hardware sockets (the v16 line)

The v16 line uses the W5500 exactly as WIZnet designed it: as a self-contained hardware TCP/IP socket engine. The host talks to it through a vendored, minimally patched Ethernet_Generic library, opening sockets on the chip's own hardwired stack rather than on the ESP32's lwIP. The maintainer's own summary is that this is the W5500's actual differentiating hardware β€” the silicon socket engine β€” and that using it means real protocol offload, with the ESP32 CPU never touching TCP state machines, checksums, or retransmission timers.

Validated on hardware: chip detected over SPI (hardwareStatus=3), link detected (linkStatus=1), DHCP lease obtained, and Wi-Fi and Ethernet running simultaneously with distinct IP addresses shown side by side in the WLED info panel.

And a documented limitation, reproduced twice: none of WLED's application traffic actually traverses it. WLED's DDP, E1.31, web UI, and MQTT handlers all bind to AsyncTCP/AsyncUDP, which is hardwired to the ESP32's lwIP. The W5500's hardware socket API is a parallel, second network stack that nothing in WLED's protocol layer knows how to talk to. Sending DDP to the v16 firmware's Ethernet IP does not light the strip.

This is not a shortcoming of the W5500. It is a precise statement of what hardware TCP/IP offload requires from the application above it: the application must be written against the offload engine's socket API. WLED, an lwIP-native codebase with tens of thousands of lines of AsyncTCP-bound networking, is not. The maintainer scoped what it would take β€” replacing WLED's web/socket layer and its realtime protocol receivers with code built on the W5500's socket API β€” and correctly identified it as a standing fork of WLED's networking core rather than a target overlay.

 

πŸ”· Mode 2 β€” MACRAW under native lwIP (the v17 line)

The v17 line takes the other road. ESP-IDF 5.5.4 / arduino-esp32 Core 3.3.8 ships a first-class ETH_PHY_W5500 driver that runs the chip in MACRAW mode β€” raw Ethernet frames in and out, with lwIP on the ESP32 doing all protocol processing. The W5500 becomes, in effect, a very well-behaved SPI-attached MAC/PHY, indistinguishable from an RMII PHY as far as the rest of the system is concerned.

The payoff is total. Because it is a real lwIP netif, DDP, E1.31, Art-Net, MQTT, the web UI, and OTA all work over Ethernet automatically, with zero per-protocol glue code. The trade is equally clear: the hardwired TCP/IP engine sits idle and the ESP32 CPU carries the stack.

That trade-off β€” offload versus stack compatibility β€” is the fundamental W5500 integration decision, and this project is the clearest real-world articulation of it available in an open repository.

 

πŸ”· The release pipeline is built around OTA safety

The maintainer's build system treats the update path as a first-class deliverable rather than a byproduct. Every release publishes exactly two normalized artifacts per target:

  • wled-<version>-<target>-<suffix>.app.bin β€” the OTA image, pushed through WLED's Settings β†’ Security & Updates β†’ Manual OTA page onto a healthy running device.
  • wled-<version>-<target>-<suffix>.full.bin β€” a merged bootloader + partition table + application image for first-time UART flashing and for recovery when OTA fails or the partition layout has changed.

The .full.bin is produced by an esptool.py merge_bin step that places the bootloader at offset 0x0 on the S3, the partition table at 0x8000, and the application at 0x10000 β€” and fails loudly if any of the three inputs is missing, so a half-formed recovery image can never reach a release page. That matters precisely because .full.bin is the artifact you reach for when a device is already in trouble.

The documented recovery rule is a single sentence, and it is the most useful sentence in the repository for a field technician: if OTA is rejected or the board won't boot afterward, flash the matching .full.bin over UART. Two failure modes make that rule load-bearing β€” a partition layout change that an .app.bin cannot survive, and the flash-mode header trap described below, which boot-loops in ROM with no serial output at all and is recoverable only by esptool.py erase_flash.

The v16 line also records honestly that repeated and long-term OTA behavior on its app partition layout remains untested, with the firmware occupying a comfortable fraction of the available app slot β€” the maintainer declines to claim what hasn't been exercised. (Partition sizing figures come from the v16 notes; confirm against the current .csv before relying on them for a specific build.)

πŸ”· Verified evidence βœ…

The v17 line's validation list is specific and hardware-backed across two physical boards:

  • Ethernet (LAN and PoE): pass
  • Wi-Fi: pass
  • xLights β†’ DDP over Ethernet: pass
  • xLights β†’ DDP over Wi-Fi: pass
  • Web UI over Ethernet: pass
  • Web UI over Wi-Fi: pass
  • Live LED bus reconfiguration at runtime β€” adding, removing, and reconfiguring buses with no reboot, including "skip first N LEDs" on both RMT- and I2S/LCD-driven buses, over both Ethernet and Wi-Fi: pass

MQTT is explicitly listed as not yet tested rather than quietly claimed. That honesty is worth as much as the passes.

05 β€” Key components

🌐 WIZnet W5500 β€” used in both TOE and MACRAW modes across two build lines

  • v16 line: hardwired TCP/IP socket engine (TOE), driven via a vendored, patched Ethernet_Generic. Hardware-validated to link-up and DHCP; documented as not carrying WLED application traffic.
  • v17 line (recommended): MACRAW mode via ESP-IDF's ETH_PHY_W5500, presented to the system as a native lwIP interface. All WLED traffic traverses it.
  • SPI pinout, identical on both lines: MISO=12 MOSI=11 SCLK=13 CS=14 INT=10 RST=9, confirmed against the Waveshare pinout diagram.
  • The v17 patch adds reserved-pin reporting in xml.cpp and dual Wi-Fi + Ethernet IP display in the info panel (json.cpp / data/index.js), so the W5500's pins and link state surface in WLED's own UI rather than being invisible to it.

🧠 Waveshare ESP32-S3-ETH

ESP32-S3 with 16 MB flash and 8 MB PSRAM, W5500 Ethernet with PoE. No internal EMAC β€” which is precisely why the W5500 is not a convenience here but a requirement.

πŸ’‘ 8 Γ— WS281x LED buses

Driven by four RMT hardware channels plus four I2S/LCD-parallel channels, handled generically at runtime by WLED's bus manager. On the v17 line the data pins were deliberately reordered to 18,17,16,15,3,2,1,21, moving GPIO0 out of the set β€” it is an S3 strapping pin that shares the BOOT button β€” and substituting GPIO21, which is free and clear of the W5500's SPI pins, the SD card, and USB.

πŸ—οΈ Target-layered build system

targets/<target>/shared/ holds the canonical per-board source of truth; targets/<target>/v15|v16|v17/ holds only version deltas. scripts/build-target.sh reads a manifest, resolves a WLED base (local checkout first, upstream fetch as fallback), applies the target overlay, and builds. Every run writes a dated log, a metadata JSON, and a summary under logs/<target>/<version>/<YYYYMMDD>/, with a latest/ copy of the newest successful run.

πŸš€ Token-gated CI release pipeline

GitHub Actions builds artifacts on every relevant push, but publishes a GitHub Release only when the commit message contains the token release β€” with release legacy publishing as a prerelease instead. Published firmware names are normalized to wled-<version>-<target>-<suffix>.app.bin for OTA and .full.bin for first-time UART flashing, the latter produced by an esptool.py merge_bin step that combines bootloader, partition table, and application into one image and fails loudly if any input is missing.

⚠️ A flash-mode trap worth documenting

The board's flash requires DIO, but the esp32s3 core ships no DIO bootloader ELF β€” so board_build.flash_mode must be qio (which bootloader PlatformIO links) while custom_merge_flash_mode must be dio (what the ROM actually honors at boot). Get this wrong and the board boot-loops in ROM before any application code runs, with no serial output at all, recoverable only by esptool.py erase_flash. This is the kind of hard-won detail that saves the next person a weekend.

06 β€” Application scenarios

01. Permanent architectural and holiday lighting installations

An xLights sequence driving thousands of pixels at high frame rates over DDP, on a controller that is wall-mounted, PoE-powered, and physically unreachable. The v17 line is exactly this product: one cable, deterministic latency, hardware-validated DDP over Ethernet.

02. Stage, venue, and event lighting

E1.31 (sACN) and Art-Net are the native languages of theatrical lighting control. A venue with hundreds of audience phones saturating the 2.4 GHz band is the worst possible environment for Wi-Fi pixel streaming and the best possible argument for a W5500 uplink.

03. A reference design for W5500 integration decisions

Any engineer facing "should I use the W5500's hardware TCP/IP stack or run it as a MACRAW PHY?" now has a documented, hardware-validated answer for both branches, including the specific conditions under which each wins. The short version: TOE when you control the application layer, MACRAW when you are integrating into an existing lwIP-native stack.

04. Remote fleet maintenance over a single PoE run

A venue with twenty controllers behind one managed switch. Because the v17 line carries OTA over Ethernet, the entire fleet updates from a laptop on the same network β€” no Wi-Fi credentials to provision, no per-device ladder trip, and a link that can be diagnosed from the switch port when a unit stops answering. The .app.bin / .full.bin split gives the technician a deterministic recovery story for the one device in twenty that doesn't take the update cleanly.

05. A template for maintaining board-specific firmware forks

The target/version overlay model, the manifest fallback chain, the token-gated release workflow, and the patch-drift checker (scripts/check-target-patches.sh) together form a reusable pattern for anyone maintaining custom builds of a fast-moving upstream β€” which is a large fraction of the embedded open-source world.

Conclusion

This project turned "does the W5500 work with WLED?" into something far more useful: a hardware-validated, side-by-side account of what the W5500's two integration modes actually deliver in a real application β€” and it did so honestly enough to publish the negative result.

  • βœ… Brought W5500 Ethernet up on an ESP32-S3, a chip with no internal EMAC, where WLED's stock RMII-only Ethernet table refuses to compile
  • βœ… Built and hardware-validated both W5500 integration models β€” TOE hardware sockets (v16) and MACRAW under native lwIP (v17) β€” on the same board
  • βœ… Documented, with reproduced evidence, exactly why TOE offload cannot carry an lwIP-native application's traffic without rewriting its networking core
  • βœ… Delivered a v17 line where DDP, E1.31, and the web UI are hardware-validated over Ethernet on two physical boards, with OTA and MQTT following the same lwIP path by construction
  • βœ… Surfaced the deployment-critical consequence that OTA follows whichever stack the application binds to β€” making Ethernet-borne firmware updates possible only on the lwIP line, and turning an architecture choice into a maintainability decision
  • βœ… Root-caused and fixed four real defects, three of them upstream bugs affecting all ESP32-S3 users regardless of Ethernet
  • βœ… Documented a ROM-level flash-mode trap (qio bootloader header vs. dio merge header) that otherwise presents as an unrecoverable boot loop
  • βœ… Surfaced the W5500 in WLED's own UI β€” reserved-pin reporting plus simultaneous Wi-Fi and Ethernet IP display in the info panel
  • βœ… Built a reproducible target/version overlay pipeline with dated logs, build metadata, token-gated releases, and normalized .app.bin / .full.bin artifacts
  • βœ… Stated openly what is not tested (MQTT, hot-plug detection, long-term OTA on the 3 MB layout) rather than overclaiming

Q&A

Q. Does the v17 line waste the W5500's hardware TCP/IP engine? In the strict sense, yes β€” MACRAW mode bypasses the hardwired stack and the ESP32 processes protocols in software. But the W5500 is still doing the work that matters for this application: it is the MAC/PHY that makes wired Ethernet possible at all on a chip with no EMAC, over a simple SPI bus, with a mature driver in ESP-IDF. The 32 KB internal buffer still absorbs bursts, and the chip still handles all the L1/L2 work. For an application whose entire networking layer is lwIP-bound, that is the correct engineering trade.

Q. When should I use the W5500's TOE mode instead? When you own the application layer. Greenfield firmware β€” an industrial Modbus TCP gateway, a data logger, a purpose-built HTTP or MQTT device β€” written directly against the W5500's socket API gets the full benefit: no software TCP/IP stack in flash, no CPU cycles spent on checksums and retransmission, and deterministic socket behavior. The v16 line's finding is not "TOE is worse"; it is "TOE requires that your application be written to it," which is a statement about WLED, not about the W5500.

Q. Why not use the ENC28J60, the other common SPI Ethernet option? Worth noting up front that the repository never poses this question β€” the board arrives with a W5500 soldered on, so no selection took place. As general background: the ENC28J60 is 10 Mbps only, it has no hardwired TCP/IP stack at all so the TOE option does not exist, and its driver ecosystem carries a long history of erratum workarounds. The W5500 is 10/100, has 8 hardware sockets and 32 KB of buffer, runs SPI up to 80 MHz, and has first-class driver support in ESP-IDF via ETH_PHY_W5500 β€” which is exactly what made the v17 line possible.

Q. Which build should I actually flash? The v17 line, unless you specifically want to study the hardware-socket approach. Use .app.bin for OTA onto a healthy existing install, and .full.bin over UART for a new board, a bricked board, or after a partition layout change.

Q. Can I update firmware over Ethernet? On the v17 line, per the maintainer's own description β€” though note that OTA is not itemized in that line's hardware-validation list, so treat it as architecturally sound rather than separately measured. WLED's OTA endpoint lives on lwIP/AsyncTCP along with everything else, so it reaches the device over whichever interface lwIP owns. On v17 the W5500 is an lwIP interface, so Ethernet OTA works with no extra code. On v16 the W5500 runs a separate hardware-socket stack that OTA has no path into β€” the Ethernet port has an IP you cannot push firmware to, and updates must go over Wi-Fi. If a deployment has no usable Wi-Fi, that difference is the difference between a remote update and a service call.

Q. What happens if an OTA update fails? Flash the matching .full.bin over UART β€” it carries bootloader, partition table, and application in one image, so it recovers a device regardless of what state the failed update left it in. Two situations make this necessary rather than optional: a build whose partition layout differs from what's on the device (an .app.bin alone cannot fix that), and a flash-mode header mismatch, which boot-loops inside ROM before any application code runs and produces no serial output at all. Keep a UART adapter on site for any installation you cannot afford to lose.

Q. Could a future WIZnet part change this trade-off? Plausibly. The W6300's QSPI host interface raises the SPI-side ceiling considerably, and the W55RP20 collapses the MCU and the W5500-class MAC/PHY into one package β€” a combination that is attractive precisely for greenfield controller designs where TOE mode is the natural choice from day one.



WLED Custom Builds β€” LED 컨트둀러λ₯Ό μœ„ν•œ W5500 이더넷: TOE와 MACRAWλ₯Ό μ‹€μΈ‘μœΌλ‘œ λΉ„κ΅ν•˜λ‹€

#W5500 #WIZnet #TOE #MACRAW #ESP32S3 #WLED #OTA #DDP #E131 #ArtNet #PoE #SPI

πŸ“š λ°°κ²½: μ˜€ν”ˆμ†ŒμŠ€ λ©”μΈν…Œμ΄λ„ˆκ°€ λ‹¨λ…μœΌλ‘œ μš΄μ˜ν•˜λŠ” ν”„λ‘œμ νŠΈ. μ»€μŠ€ν…€ WLED νŽŒμ›¨μ–΄ νƒ€κ²Ÿμ„ λΉŒλ“œΒ·λ°°ν¬ν•˜λŠ” νŒŒμ΄ν”„λΌμΈμ΄λ©°, 그쀑 Waveshare ESP32-S3-ETH(W5500) 라인이 기술적으둜 κ°€μž₯ 깊게 λ¬Έμ„œν™”λ˜μ–΄ μžˆλ‹€. βœ… 검증 μƒνƒœ: μ‹€λ¬Ό Waveshare ESP32-S3-ETH λ³΄λ“œ 2λŒ€μ—μ„œ ν•˜λ“œμ›¨μ–΄ 검증 μ™„λ£Œ. ꢌμž₯ 라인인 v17μ—μ„œ 이더넷/PoE 링크업, Wi-Fi, μ–‘μͺ½ 전솑 경둜의 DDP, μ–‘μͺ½ 전솑 경둜의 μ›Ή UI, λŸ°νƒ€μž„ LED λ²„μŠ€ μž¬κ΅¬μ„±κΉŒμ§€ λͺ¨λ‘ pass. MQTTλŠ” λ―Έκ²€μ¦μœΌλ‘œ λͺ…μ‹œλ˜μ–΄ 있으며, OTAλŠ” λ©”μΈν…Œμ΄λ„ˆκ°€ μ΄λ”λ„·μœΌλ‘œ μžλ™ λ™μž‘ν•œλ‹€κ³  μ„œμˆ ν–ˆμœΌλ‚˜ 검증 λͺ©λ‘μ—λŠ” ν•­λͺ©μœΌλ‘œ μ˜¬λΌμ™€ μžˆμ§€ μ•Šλ‹€. λŒ€μ²΄λœ v16 라인은 λ™μΌν•œ μˆ˜μ€€μ˜ μ—„λ°€ν•¨μœΌλ‘œ λΆ€μ • κ²°κ³Ό(negative result) κΉŒμ§€ κΈ°λ‘λ˜μ–΄ μžˆλ‹€.


01 β€” 이 ν”„λ‘œμ νŠΈλŠ” 무엇인가?

원본 λ ˆνŒŒμ§€ν† λ¦¬
원본 λ ˆνŒŒμ§€ν† λ¦¬

πŸ”· λ¨Όμ € λ°°κ²½λΆ€ν„°: WLEDκ°€ 무엇이고, μ™œ 일반적인 νŽŒμ›¨μ–΄μ™€ λ‹€λ₯΄κ²Œ λ™μž‘ν•˜λŠ”κ°€

λŒ€λΆ€λΆ„μ˜ μž„λ² λ””λ“œ νŽŒμ›¨μ–΄λŠ” ν•˜λ‚˜μ˜ μ œν’ˆμ„ μœ„ν•΄ μž‘μ„±λœλ‹€. κ°œλ°œμžκ°€ λ™μž‘μ„ μ •μ˜ν•˜κ³ , μ»΄νŒŒμΌν•˜κ³ , ν”Œλž˜μ‹±ν•˜λ©΄, κ·Έ λ°”μ΄λ„ˆλ¦¬λŠ” κ·Έ 기기의 것이닀. WLEDλŠ” κ·Έλ ‡κ²Œ λ™μž‘ν•˜μ§€ μ•ŠμœΌλ©°, κ·Έ 이유λ₯Ό μ΄ν•΄ν•˜λŠ” 것이 이 μ €μž₯μ†Œλ₯Ό μ΄ν•΄ν•˜λŠ” μ—΄μ‡ λ‹€.

WLEDλŠ” μ–΄λ“œλ ˆμ„œλΈ” LED μŠ€νŠΈλ¦½μ„ μ œμ–΄ν•˜λŠ” μ˜€ν”ˆμ†ŒμŠ€ νŽŒμ›¨μ–΄λ‹€. μ–΄λ“œλ ˆμ„œλΈ”μ΄λž€ WS2812 κ³„μ—΄μ²˜λŸΌ ν”½μ…€ ν•˜λ‚˜ν•˜λ‚˜κ°€ 각자의 색을 κ°–λŠ” 방식을 λ§ν•œλ‹€. 슀트립 전체가 ν•œ κ°€μ§€ μƒ‰μœΌλ‘œλ§Œ μΌœμ§€λŠ” 일반 LED 슀트립과 λ‹€λ₯΄λ‹€. ESP32에 WLEDλ₯Ό κ΅½κ³ , 데이터 핀에 μŠ€νŠΈλ¦½μ„ μ—°κ²°ν•˜λ©΄, λ³΄λ“œκ°€ λ„€νŠΈμ›Œν¬μ— 접속해 μ›Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ„μš΄λ‹€.

μ—¬κΈ°μ„œ 결정적인 뢀뢄은 정적인 λ™μž‘μ΄ 컴파일 λ˜μ–΄ λ“€μ–΄κ°€μ§€ μ•ŠλŠ”λ‹€λŠ” 점이닀. WLEDμ—λŠ” λ°©λŒ€ν•œ μ‘°λͺ… μ΄νŽ™νŠΈ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ λ‚΄μž₯λ˜μ–΄ μžˆλ‹€ β€” λ¬΄μ§€κ°œ 흐름, λΆˆκ½ƒ μΌλ μž„, μŒμ•… λ°˜μ‘ νŒ¨ν„΄, 단색 λ“± β€” 그리고 μ‚¬μš©μžλŠ” 이것을 μ‹€ν–‰ 쀑에 μ›Ή UIμ—μ„œ 골라 μ“΄λ‹€. 심지어 ν•˜λ“œμ›¨μ–΄ λ°°μ„  정보쑰차 같은 μ›Ή UIμ—μ„œ μ„€μ •ν•œλ‹€. LED 데이터λ₯Ό μ–΄λŠ GPIO둜 내보낼지, 픽셀이 λͺ‡ 개 λ‹¬λ ΈλŠ”μ§€, μ–΄λ–€ 칩셋인지. 이 값듀은 JSON으둜 ν”Œλž˜μ‹œμ— μ €μž₯되고 λΆ€νŒ… μ‹œ μ½νžŒλ‹€.

즉 λ°”μ΄λ„ˆλ¦¬ ν•˜λ‚˜κ°€ λ¬΄ν•œνžˆ λ§Žμ€ μ„œλ‘œ λ‹€λ₯Έ λ°°μ„  ꡬ성을 κ°λ‹Ήν•œλ‹€. μ •λ§λ‘œ λ‹€λ₯Έ λ°”μ΄λ„ˆλ¦¬κ°€ ν•„μš”ν•œ κ²½μš°λŠ” MCU 계열이 λ‹€λ₯Ό λ•ŒλΏμ΄λ‹€ β€” ESP32, ESP32-S3, ESP32-C3λŠ” μ„œλ‘œ ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” 기계어λ₯Ό λ§Œλ“ λ‹€ β€” κ·Έλž˜μ„œ WLED 곡식 λ¦΄λ¦¬μŠ€λ„ λ³΄λ“œλ³„μ΄ μ•„λ‹ˆλΌ MCUλ³„λ‘œ λ°œν–‰λœλ‹€. μ‚¬μš©μžλŠ” 자기 칩에 λ§žλŠ” 것 ν•˜λ‚˜λ₯Ό λ°›μ•„μ„œ, λ‚˜λ¨Έμ§€λŠ” 클릭으둜 μ„€μ •ν•œλ‹€.

λŒ€ν˜• μ„€μΉ˜λ¬Όμ„ μœ„ν•΄ WLEDλŠ” λ„€νŠΈμ›Œν¬λ‘œ λ“€μ–΄μ˜€λŠ” μ‹€μ‹œκ°„ ν”½μ…€ 데이터도 λ°›λŠ”λ‹€. 업계가 이미 μ“°κ³  μžˆλŠ” ν”„λ‘œν† μ½œ κ·ΈλŒ€λ‘œλ‹€ β€” DDP, E1.31(sACN), Art-Net. PCμ—μ„œ xLights 같은 μ‹œν€€μ‹± μ†Œν”„νŠΈμ›¨μ–΄κ°€ ν”„λ ˆμž„μ„ μ—°μ†μœΌλ‘œ 쏘면, μ»¨νŠΈλ‘€λŸ¬λŠ” 자율적으둜 λ™μž‘ν•˜λŠ” κΈ°κΈ°κ°€ μ•„λ‹ˆλΌ λ Œλ”λ§ 쒅단점이 λœλ‹€.

πŸ”· 이 λͺ¨λΈμ΄ κΉ¨μ§€λŠ” 지점 β€” 그리고 이 μ €μž₯μ†Œκ°€ μ‘΄μž¬ν•˜λŠ” 이유

μ›Ή UIλŠ” 컴파일된 λ°”μ΄λ„ˆλ¦¬ μ•ˆμ— μ‘΄μž¬ν•˜λŠ” κΈ°λŠ₯만 λ…ΈμΆœν•  수 μžˆλ‹€. μ½”λ“œμ— μ—†λŠ” 것은 아무리 섀정을 뒀져도 λ‚˜νƒ€λ‚˜μ§€ μ•ŠλŠ”λ‹€.

Waveshare ESP32-S3-ETH λ³΄λ“œμ—λŠ” SPI둜 μ—°κ²°λœ WIZnet W5500 이더넷 μ»¨νŠΈλ‘€λŸ¬κ°€ 달렀 μžˆλ‹€. 그런데 WLED μ—…μŠ€νŠΈλ¦Όμ˜ 이더넷 지원은 였직 ESP32 λ‚΄μž₯ EMAC에 λΆ™λŠ” RMII PHYλ§Œμ„ μ „μ œλ‘œ μ„€κ³„λ˜μ–΄ μžˆλ‹€. EMAC은 ESP32-S3에 물리적으둜 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” νŽ˜λ¦¬νŽ˜λŸ΄μ΄λ‹€. S3μ—μ„œ WLED κΈ°λ³Έ 이더넷 λ³΄λ“œ ν…Œμ΄λΈ”μ€ 이 λ³΄λ“œλ₯Ό λͺ©λ‘μ— μ—†λŠ” 정도가 μ•„λ‹ˆλΌ, λΉŒλ“œ μžμ²΄κ°€ μ»΄νŒŒμΌμ„ κ±°λΆ€ν•œλ‹€.

wled-custom-buildsλŠ” μ •ν™•νžˆ 이런 μ’…λ₯˜μ˜ 곡백을 λ©”μš°κΈ° μœ„ν•΄ μ‘΄μž¬ν•œλ‹€. ꡬ체적으둜 μ„Έ κ°€μ§€ 일을 ν•œλ‹€.

β‘  μ„€μ • 프리셋이 μ•„λ‹ˆλΌ, λ³΄λ“œλ³„ μ†ŒμŠ€ μˆ˜μ •λ³Έμ„ λ‹΄κ³  μžˆλ‹€. μ§€μ›ν•˜λŠ” λ³΄λ“œλ§ˆλ‹€ 폴더가 있고, κ·Έ μ•ˆμ—λŠ” μ—…μŠ€νŠΈλ¦Ό WLED μ†ŒμŠ€λ₯Ό 직접 μˆ˜μˆ ν•˜λŠ” .patch νŒŒμΌλ“€μ΄ λ“€μ–΄ μžˆλ‹€ β€” network.cpp λ“±. 여기에 더해 λ©”μΈν…Œμ΄λ„ˆκ°€ 직접 고쳐야 ν–ˆλ˜ 라이브러리의 벀더링 사본, μ»€μŠ€ν…€ νŒŒν‹°μ…˜ ν…Œμ΄λΈ” .csv, ν•€ λ°°μΉ˜μ™€ ν”Œλž˜μ‹œ λ™μž‘μ„ μ •μ˜ν•˜λŠ” PlatformIO ν™˜κ²½ 쑰각이 ν•¨κ»˜ λ“€μ–΄ μžˆλ‹€. W5500 이더넷 지원은 μƒˆλ‘œ μž‘μ„±λœ λ“œλΌμ΄λ²„ 톡합 μ½”λ“œμ΄μ§€, μžˆλŠ” μ˜΅μ…˜μ„ μΌ  것이 μ•„λ‹ˆλ‹€. μ—…μŠ€νŠΈλ¦Ό WLEDλŠ” λΉŒλ“œν•  λ•Œλ§ˆλ‹€ κΉ¨λ—ν•˜κ²Œ μƒˆλ‘œ λ°›μ•„μ˜€κ³  κ·Έ μœ„μ— μ˜€λ²„λ ˆμ΄λ₯Ό μ–ΉλŠ” ꡬ쑰라, μ—”μ§„ μ½”μ–΄λŠ” 항상 μ΅œμ‹ μ΄λ©΄μ„œ λ³΄λ“œ μž‘μ—…μ€ λΆ„λ¦¬λœ μ±„λ‘œ μœ μ§€λœλ‹€.

이 λ³΄λ“œλŠ” μ‹€μ œλ‘œ μ„Έ 개의 λΉŒλ“œ 라인을 κ°–κ³  μžˆλ‹€. v15(WLED 0.15.x, 보쑴·동결 μƒνƒœλ‘œ 더 이상 κ°œλ°œλ˜μ§€ μ•ŠμŒ), v16(WLED 16.0.1, W5500 ν•˜λ“œμ›¨μ–΄ μ†ŒμΌ“ 이더넷), v17(WLED main, λ„€μ΄ν‹°λΈŒ lwIP W5500 β€” ꢌμž₯ 라인). 이 νλ ˆμ΄μ…˜μ΄ λ‹€λ£¨λŠ” 것은 이더넷 μ•„ν‚€ν…μ²˜ μž‘μ—…μ΄ λ‹΄κΈ΄ v16κ³Ό v17이닀.

β‘‘ κ·Έ νƒ€κ²Ÿλ“€μ„ λΉŒλ“œν•΄μ„œ μ™„μ„±λœ λ°”μ΄λ„ˆλ¦¬λ₯Ό λ°°ν¬ν•œλ‹€. GitHub ActionsλŠ” targets/** λ˜λŠ” μ›Œν¬ν”Œλ‘œ 파일 자체λ₯Ό κ±΄λ“œλ¦¬λŠ” ν‘Έμ‹œΒ·PRμ—μ„œλ§Œ λΉŒλ“œν•œλ‹€. 트리거λ₯Ό μ˜λ„μ μœΌλ‘œ 쒁게 μž‘μ€ 것이닀. μ‹€ν–‰λ§ˆλ‹€ λ‚ μ§œλ³„ λ‘œκ·Έμ™€ λΉŒλ“œ 메타데이터 JSON을 남기며, GitHub Releases에 λ°œν–‰ν•œλ‹€ β€” 단, ν‘Έμ‹œ 컀밋 λ©”μ‹œμ§€μ— releaseλΌλŠ” 토큰이 μžˆμ„ λ•Œλ§Œ. 여기에 legacyλ₯Ό 덧뢙이면 μ΅œμ‹ μ΄ μ•„λ‹Œ ν”„λ¦¬λ¦΄λ¦¬μŠ€λ‘œ ν‘œμ‹œλœλ‹€. WLED μ‚¬μš©μž λŒ€λΆ€λΆ„μ€ 개발 ν™˜κ²½μ΄ μ—†μ–΄μ„œ μ†ŒμŠ€μ—μ„œ λΉŒλ“œν•  수 μ—†λ‹€. κ·Έλž˜μ„œ λ°”λ‘œ ꡬ울 수 μžˆλŠ” λ°”μ΄λ„ˆλ¦¬λ₯Ό μ œκ³΅ν•˜λŠ” 것이 배포 츑면의 쑴재 이유 μ „λΆ€λ‹€.

β‘’ λͺ¨λ“  릴리슀λ₯Ό 두 개의 μ‚°μΆœλ¬Όλ‘œ λ‚˜λˆˆλ‹€. νŽŒμ›¨μ–΄ μ—…λ°μ΄νŠΈκ°€ μ‹€νŒ¨ν•΄λ„ 살아남을 수 있게 ν•˜κΈ° μœ„ν•΄μ„œλ‹€. 이 뢀뢄이 μ €μž₯μ†Œ 자체 λ¬Έμ„œμ˜ λŒ€λΆ€λΆ„μ„ μ°¨μ§€ν•˜λ©°, λͺ…ν™•ν•œ μ„€λͺ…이 ν•„μš”ν•˜λ‹€.

πŸ”· OTA에 λŒ€ν•˜μ—¬: 무엇이 μ›λž˜ WLED의 것이고, 이 μ €μž₯μ†Œκ°€ μ‹€μ œλ‘œ λ§Œλ“  것은 무엇인가

OTA(무선 νŽŒμ›¨μ–΄ μ—…λ°μ΄νŠΈ)λŠ” WLED에 μ›λž˜ μžˆλŠ” κΈ°λ³Έ κΈ°λŠ₯이닀.WLEDμ—μ„œ OTAλŠ” μ΄λ ‡κ²Œ λ™μž‘ν•œλ‹€. λ³΄λ“œμ˜ μ›Ή UIλ₯Ό μ—΄κ³ , μ„€μ • β†’ Security & Updates둜 λ“€μ–΄κ°€μ„œ, λ‚΄ PC에 μžˆλŠ” νŽŒμ›¨μ–΄ νŒŒμΌμ„ μ—…λ‘œλ“œν•œλ‹€. λ³΄λ“œλŠ” 그것을 μ—¬λΆ„μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ νŒŒν‹°μ…˜μ— κΈ°λ‘ν•˜κ³  μƒˆ μ΄λ―Έμ§€λ‘œ μž¬λΆ€νŒ…ν•œλ‹€.

이것이 μ—¬κΈ°μ„œ 그토둝 μ€‘μš”ν•œ μ΄μœ λŠ” μ„€μΉ˜ ν™˜κ²½ λ•Œλ¬Έμ΄λ‹€. 이런 μ»¨νŠΈλ‘€λŸ¬λ“€μ€ 영ꡬ μ„€μΉ˜λœλ‹€ β€” νŒŒμ‚¬λ“œ 12λ―Έν„° 높이, λ¬΄λŒ€ 리그 λ‚΄λΆ€, λ²½ λ’€. μ‹œκ³΅μ΄ λλ‚œ λ’€ USB 케이블을 κ½‚μœΌλ €λ©΄ 사닀리와 좜μž₯이 ν•„μš”ν•˜λ‹€. OTAλŠ” λ…ΈνŠΈλΆμ—μ„œ 5λΆ„ λ§Œμ— λλ‚˜λŠλƒ, ν˜„μž₯에 μ‚¬λžŒμ΄ λ‚˜κ°€λŠλƒμ˜ 차이닀.

이 μ €μž₯μ†Œκ°€ κ·Έ κΈ°λŠ₯을 λ‘˜λŸ¬μ‹Έκ³  λ§Œλ“  것은 두 κ°€μ§€λ‹€.

첫째, 두 개의 μ‚°μΆœλ¬Όλ‘œ λ‚˜λˆˆ 릴리슀 ν˜•μ‹. λͺ¨λ“  λ¦΄λ¦¬μŠ€λŠ” λ‹€μŒμ„ λ°œν–‰ν•œλ‹€.

μ‚°μΆœλ¬Όμ „λ‹¬ λ°©μ‹μ–Έμ œ μ“°λŠ”κ°€
wled-<version>-<target>-<suffix>.app.binOTA β€” λ³΄λ“œ μ›Ή UI둜 μ—…λ‘œλ“œμ§€κΈˆ 정상 λ™μž‘ 쀑이고 접속 κ°€λŠ₯ν•œ λ³΄λ“œλ₯Ό μ—…λ°μ΄νŠΈν•  λ•Œ
wled-<version>-<target>-<suffix>.full.binUSB/UART β€” esptool둜 ν”Œλž˜μ‹±μƒˆ λ³΄λ“œ, 응닡 μ—†λŠ” λ³΄λ“œ, λ˜λŠ” νŒŒν‹°μ…˜ λ ˆμ΄μ•„μ›ƒμ΄ 바뀐 λ’€

.full.bin은 λΆ€νŠΈλ‘œλ”, νŒŒν‹°μ…˜ ν…Œμ΄λΈ”, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν•˜λ‚˜μ˜ μ΄λ―Έμ§€λ‘œ ν•©μΉœ 것이닀. λΆ€νŠΈλ‘œλ”λŠ” 전원이 λ“€μ–΄μ˜€λ©΄ κ°€μž₯ λ¨Όμ € μ‹€ν–‰λ˜μ–΄ μ–΄λŠ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ νŒŒν‹°μ…˜μœΌλ‘œ λΆ€νŒ…ν• μ§€ κ²°μ •ν•˜λŠ” μž‘μ€ ν”„λ‘œκ·Έλž¨μ΄κ³ , νŒŒν‹°μ…˜ ν…Œμ΄λΈ”μ€ ν”Œλž˜μ‹œ 어디에 무엇이 μžˆλŠ”μ§€ μ•Œλ €μ£ΌλŠ” 지도닀. 이것을 λ§Œλ“œλŠ” λΉŒλ“œ λ‹¨κ³„λŠ” μ„Έ μž…λ ₯ 쀑 ν•˜λ‚˜λΌλ„ μ—†μœΌλ©΄ μš”λž€ν•˜κ²Œ μ‹€νŒ¨ν•œλ‹€. 릴리슀 νŽ˜μ΄μ§€μ— 덜 λ§Œλ“€μ–΄μ§„ 볡ꡬ 이미지가 μ˜¬λΌκ°€λŠ” 것은 μ•„μ˜ˆ 이미지가 μ—†λŠ” 것보닀 λ‚˜μ˜κΈ° λ•Œλ¬Έμ΄λ‹€.

이 뢄리가 μ‘΄μž¬ν•˜λŠ” μ΄μœ λŠ”, OTA에 μ†Œν”„νŠΈμ›¨μ–΄μ μœΌλ‘œ λΉ μ Έλ‚˜κ°ˆ 수 μ—†λŠ” μ‹€νŒ¨ λͺ¨λ“œκ°€ μžˆμ–΄μ„œλ‹€. νŒŒν‹°μ…˜ λ ˆμ΄μ•„μ›ƒμ΄ 기기에 μ˜¬λΌκ°„ 것과 λ‹€λ₯Έ λΉŒλ“œλŠ” .app.bin으둜 전달할 수 μ—†λ‹€. 그리고 ν”Œλž˜μ‹œ λͺ¨λ“œ 헀더가 μ–΄κΈ‹λ‚˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œκ°€ ν•œ 쀄도 μ‹€ν–‰λ˜κΈ° 전에 ROM λ‚΄λΆ€μ—μ„œ λΆ€νŠΈλ£¨ν”„μ— λΉ μ§€λ©°, μ‹œλ¦¬μ–Ό 좜λ ₯이 μ „ν˜€ λ‚˜μ˜€μ§€ μ•ŠλŠ”λ‹€ β€” USB둜 칩을 μ§€μš°λŠ” 것 λ§κ³ λŠ” 볡ꡬ 방법이 μ—†λ‹€. λ¬Έμ„œν™”λœ κ·œμΉ™μ€ ν•œ λ¬Έμž₯이닀. OTAκ°€ κ±°λΆ€λ˜κ±°λ‚˜ 이후 λΆ€νŒ…μ΄ μ•ˆ 되면, λŒ€μ‘λ˜λŠ” .full.bin을 UART둜 ν”Œλž˜μ‹±ν•˜λΌ.

 

02 β€” μ™œ LED μ œμ–΄μ— 이더넷인가?

πŸ”· λ¦¬μ–Όνƒ€μž„ ν”½μ…€ ν”„λ‘œν† μ½œμ€ μž¬μ „μ†‘μ„ 봐주지 μ•ŠλŠ”λ‹€

DDP와 E1.31은 μž¬μ „μ†‘μ΄ μ—†κ³  λ°λ“œλΌμΈμ΄ λͺ…ν™•ν•œ UDP μŠ€νŠΈλ¦Όμ΄λ‹€. 늦게 λ„μ°©ν•œ ν”„λ ˆμž„μ€ μ“Έλͺ¨μ—†λŠ” 정도가 μ•„λ‹ˆλΌ λ°©ν•΄κ°€ λœλ‹€ β€” λ Œλ”λŸ¬λŠ” 이미 λ‹€μŒ ν”„λ ˆμž„μœΌλ‘œ λ„˜μ–΄κ°”κΈ° λ•Œλ¬Έμ΄λ‹€. μ›Ή λΈŒλΌμš°μ§•μ—μ„œ Wi-Fiλ₯Ό μ“Έ λ§Œν•˜κ²Œ λ§Œλ“€μ–΄μ£ΌλŠ” μž¬μ‹œλ„μ™€ λ°±μ˜€ν”„ λ™μž‘μ΄, ν”½μ…€ μŠ€νŠΈλ¦¬λ°μ—μ„œλŠ” μ •ν™•νžˆ κ·Έ λ°˜λŒ€λ‘œ μž‘λ™ν•œλ‹€. μ „λ¬Έ μ‘°λͺ…이 μœ μ„  이더넷 μœ„μ—μ„œ λ„λŠ” μ΄μœ κ°€ 이 결정둠적 μ§€μ—° νŠΉμ„±μ΄λ‹€.

πŸ”· 상섀 μ„€μΉ˜μ—λŠ” 상섀 링크가 ν•„μš”ν•˜λ‹€

μ„€μΉ˜ν˜• μ»¨νŠΈλ‘€λŸ¬λŠ” μ‹œκ³΅μ΄ λλ‚˜λ©΄ 물리적으둜 접근이 μ–΄λ €μš΄ κ²½μš°κ°€ λŒ€λΆ€λΆ„μ΄λ‹€. 이더넷 + PoEλŠ” 케이블 ν•˜λ‚˜λ‘œ 전원과 데이터λ₯Ό λͺ¨λ‘ κ³΅κΈ‰ν•˜κ³ , μˆ˜λ…„κ°„ μœ μ§€λ˜λ©°, λ¬Έμ œκ°€ 생기면 μŠ€μœ„μΉ˜ 포트 μͺ½μ—μ„œ 진단할 수 μžˆλŠ” 링크λ₯Ό μ€€λ‹€.

πŸ”· ESP32-S3μ—λŠ” EMAC이 μ—†λ‹€ β€” κ·Έλž˜μ„œ PHYλŠ” SPI에 λΆ™μ–΄μ•Ό ν•œλ‹€

이 μ œμ•½μ΄ 이 ν”„λ‘œμ νŠΈλ₯Ό WIZnet μ΄μ•ΌκΈ°λ‘œ λ§Œλ“ λ‹€. κ΅¬ν˜• ESP32λŠ” LAN8720 같은 RMII PHYλ₯Ό 직접 ꡬ동할 수 μžˆμ—ˆλ‹€. S3λŠ” λͺ» ν•œλ‹€. S3μ—μ„œμ˜ 이더넷은 λ°˜λ“œμ‹œ SPIλ₯Ό 거쳐야 ν•˜κ³ , SPI 이더넷 μ„ νƒμ§€λŠ” 사싀상 ENC28J60, W5500, 그리고 WIZnet의 ν˜•μ œ 칩듀뿐이닀.

πŸ”· WIZnet λΌμΈμ—…μ—μ„œ W5500의 μœ„μΉ˜

(이 μ†Œμ ˆμ˜ μΉ© κ°„ λΉ„κ΅λŠ” 일반적인 λ°°κ²½ μ„€λͺ…이며 μ €μž₯μ†Œκ°€ μ£Όμž₯ν•œ λ‚΄μš©μ΄ μ•„λ‹ˆλ‹€. λ³΄λ“œμ— W5500이 이미 μ‹€μž₯λ˜μ–΄ μΆœν•˜λ˜λ―€λ‘œ λ©”μΈν…Œμ΄λ„ˆκ°€ λŒ€μ•ˆμ„ ν‰κ°€ν•œ 적은 μ—†λ‹€.) W5500은 이 κΈ‰μ˜ μ„€κ³„μ—μ„œ WIZnet의 μ£Όλ ₯ 선택지닀. ν•˜λ“œμ›¨μ–΄ μ†ŒμΌ“ 8개, λ‚΄μž₯ TX/RX 버퍼 32KB, μ΅œλŒ€ 80MHz SPI, 10/100 이더넷. μƒνƒœκ³„κ°€ λΉ„μŠ·ν•˜κ²Œ κ°–μΆ°μ§„ μœ μΌν•œ λŒ€μ•ˆμΈ ENC28J60κ³Ό λΉ„κ΅ν•˜λ©΄ μ—¬κΈ°μ„œ μ€‘μš”ν•œ μΆ• μ „λΆ€μ—μ„œ W5500이 μ•žμ„ λ‹€ β€” ENC28J60은 10Mbps μ „μš©μ΄κ³ , ν•˜λ“œμ™€μ΄μ–΄λ“œ TCP/IP μŠ€νƒμ΄ μ•„μ˜ˆ μ—†μœΌλ©°, 에라타 λŒ€μ‘μœΌλ‘œ λ“œλΌμ΄λ²„κ°€ λ³΅μž‘ν•΄μ§€κΈ°λ‘œ 유λͺ…ν•˜λ‹€. WIZnet λ‚΄λΆ€μ—μ„œ 보면 W6100은 IPv6 λ“€μ–ΌμŠ€νƒμ„ λ”ν•˜κ³ , W6300은 QSPI 호슀트 μΈν„°νŽ˜μ΄μŠ€λ‘œ μ²˜λ¦¬λŸ‰ μƒν•œμ„ 올리며, W55RP20은 W5500κΈ‰ MAC/PHY와 RP2040을 ν•œ νŒ¨ν‚€μ§€μ— ν†΅ν•©ν•œλ‹€. 연산을 λ‹΄λ‹Ήν•  ESP32-S3κ°€ 이미 μžˆλŠ” λ³΄λ“œλΌλ©΄, W5500의 ν‰λ²”ν•œ SPI μΈν„°νŽ˜μ΄μŠ€μ™€ μ„±μˆ™ν•œ λ“œλΌμ΄λ²„ μƒνƒœκ³„κ°€ μ •ν™•νžˆ μ•Œλ§žμ€ 선택이닀.

03 β€” μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

 

03 β€” μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

04 β€” μ™œ WIZnet W5500인가? ⭐

πŸ”· μ•„ν‚€ν…μ²˜ 선택지λ₯Ό μ‹€μ œλ‘œ μ œκ³΅ν•˜λŠ” μœ μΌν•œ SPI 이더넷 μΉ©

이 ν”„λ‘œμ νŠΈλ₯Ό 연ꡬ할 κ°€μΉ˜κ°€ μžˆλŠ” 핡심이 μ—¬κΈ° μžˆλ‹€. λŒ€λΆ€λΆ„μ˜ 이더넷 μ»¨νŠΈλ‘€λŸ¬λŠ” 톡합 λͺ¨λΈμ΄ ν•˜λ‚˜λΏμ΄λ‹€. W5500은 두 개λ₯Ό μ œκ³΅ν•˜κ³ , 이 ν”„λ‘œμ νŠΈλŠ” ν•œ μ—”μ§€λ‹ˆμ–΄κ°€ 같은 ν•˜λ“œμ›¨μ–΄μ—μ„œ 두 κ°€μ§€λ₯Ό λͺ¨λ‘ κ΅¬ν˜„ν•˜κ³  각각의 μ‹€μΈ‘ κ²°κ³Όλ₯Ό κ³΅κ°œν•œ λ“œλ¬Έ 사둀닀.

πŸ”· λͺ¨λ“œ 1 β€” TOE ν•˜λ“œμ›¨μ–΄ μ†ŒμΌ“ (v16 라인)

v16 라인은 W5500을 WIZnet이 μ„€κ³„ν•œ κ·ΈλŒ€λ‘œ, 자쑱적인 ν•˜λ“œμ›¨μ–΄ TCP/IP μ†ŒμΌ“ μ—”μ§„μœΌλ‘œ μ‚¬μš©ν•œλ‹€. ν˜ΈμŠ€νŠΈλŠ” μ΅œμ†Œ 패치λ₯Ό μ μš©ν•΄ λ²€λ”λ§ν•œ Ethernet_Generic 라이브러리λ₯Ό 톡해 W5500κ³Ό ν†΅μ‹ ν•˜λ©°, ESP32의 lwIPκ°€ μ•„λ‹ˆλΌ μΉ© 자체의 ν•˜λ“œμ™€μ΄μ–΄λ“œ μŠ€νƒ μœ„μ— μ†ŒμΌ“μ„ μ—°λ‹€. λ©”μΈν…Œμ΄λ„ˆ 본인의 정리에 λ”°λ₯΄λ©΄ μ΄κ²ƒμ΄μ•Όλ§λ‘œ W5500의 μ§„μ§œ 차별화 ν•˜λ“œμ›¨μ–΄ β€” μ‹€λ¦¬μ½˜ μ†ŒμΌ“ μ—”μ§„ β€” 이고, 이λ₯Ό μ“΄λ‹€λŠ” 건 μ‹€μ œ ν”„λ‘œν† μ½œ μ˜€ν”„λ‘œλ“œλ₯Ό μ˜λ―Έν•œλ‹€. ESP32 CPUλŠ” TCP μƒνƒœ 머신도, 체크섬도, μž¬μ „μ†‘ 타이머도 κ±΄λ“œλ¦¬μ§€ μ•ŠλŠ”λ‹€.

ν•˜λ“œμ›¨μ–΄ 검증 κ²°κ³Ό: SPI둜 μΉ© 인식(hardwareStatus=3), 링크 감지(linkStatus=1), DHCP μž„λŒ€ νšλ“, 그리고 Wi-Fi와 이더넷이 μ„œλ‘œ λ‹€λ₯Έ IP둜 λ™μ‹œμ— λ™μž‘ν•˜λ©° WLED 정보 νŒ¨λ„μ— λ‚˜λž€νžˆ ν‘œμ‹œλ˜λŠ” κ²ƒκΉŒμ§€ 확인.

그리고 두 번 μž¬ν˜„λœ, λ¬Έμ„œν™”λœ ν•œκ³„: WLED의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ νŠΈλž˜ν”½μ€ 단 ν•˜λ‚˜λ„ 이 경둜λ₯Ό μ§€λ‚˜κ°€μ§€ μ•ŠλŠ”λ‹€. WLED의 DDP, E1.31, μ›Ή UI, MQTT ν•Έλ“€λŸ¬λŠ” μ „λΆ€ AsyncTCP/AsyncUDP에 λ°”μΈλ”©λ˜μ–΄ 있고, 그건 ESP32의 lwIP에 ν•˜λ“œμ™€μ΄μ–΄λ˜μ–΄ μžˆλ‹€. W5500의 ν•˜λ“œμ›¨μ–΄ μ†ŒμΌ“ APIλŠ” λ³‘λ ¬λ‘œ μ‘΄μž¬ν•˜λŠ” 두 번째 λ„€νŠΈμ›Œν¬ μŠ€νƒμ΄λ©°, WLED ν”„λ‘œν† μ½œ κ³„μΈ΅μ˜ μ–΄λ–€ μ½”λ“œλ„ κ·Έ APIλ₯Ό μ“Έ 쀄 λͺ¨λ₯Έλ‹€. v16 νŽŒμ›¨μ–΄μ˜ 이더넷 IP둜 DDPλ₯Ό 보내도 μŠ€νŠΈλ¦½μ€ μΌœμ§€μ§€ μ•ŠλŠ”λ‹€.

이건 W5500의 결함이 μ•„λ‹ˆλ‹€. ν•˜λ“œμ›¨μ–΄ TCP/IP μ˜€ν”„λ‘œλ“œκ°€ μƒμœ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μš”κ΅¬ν•˜λŠ” 쑰건을 μ •ν™•νžˆ μ§„μˆ ν•œ 것이닀 β€” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ˜€ν”„λ‘œλ“œ μ—”μ§„μ˜ μ†ŒμΌ“ APIλ₯Ό ν–₯ν•΄ μž‘μ„±λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€. AsyncTCP에 묢인 λ„€νŠΈμ›Œν‚Ή μ½”λ“œκ°€ 수만 쀄인 lwIP λ„€μ΄ν‹°λΈŒ μ½”λ“œλ² μ΄μŠ€ WLEDλŠ” κ·Έλ ‡μ§€ μ•Šλ‹€. λ©”μΈν…Œμ΄λ„ˆλŠ” 이걸 ν•΄κ²°ν•˜λ €λ©΄ 무엇이 ν•„μš”ν•œμ§€κΉŒμ§€ μ‚°μ •ν–ˆλ‹€ β€” WLED의 μ›Ή/μ†ŒμΌ“ 계측 κ³Ό λ¦¬μ–Όνƒ€μž„ ν”„λ‘œν† μ½œ μˆ˜μ‹ λΆ€λ₯Ό W5500 μ†ŒμΌ“ API 기반 μ½”λ“œλ‘œ ꡐ체해야 ν•˜λ©°, 이건 νƒ€κ²Ÿ μ˜€λ²„λ ˆμ΄κ°€ μ•„λ‹ˆλΌ WLED λ„€νŠΈμ›Œν‚Ή μ½”μ–΄μ˜ μƒμ‹œ μœ μ§€ 포크(standing fork)λΌλŠ” 결둠이닀.

πŸ”· λͺ¨λ“œ 2 β€” λ„€μ΄ν‹°λΈŒ lwIP ν•˜μœ„μ˜ MACRAW (v17 라인)

v17 라인은 λ°˜λŒ€ 길을 νƒν•œλ‹€. ESP-IDF 5.5.4 / arduino-esp32 Core 3.3.8μ—λŠ” W5500을 MACRAW λͺ¨λ“œλ‘œ κ΅¬λ™ν•˜λŠ” 일급 ETH_PHY_W5500 λ“œλΌμ΄λ²„κ°€ λ“€μ–΄ μžˆλ‹€. 생 이더넷 ν”„λ ˆμž„μ΄ κ·ΈλŒ€λ‘œ μ˜€κ°€κ³ , ν”„λ‘œν† μ½œ μ²˜λ¦¬λŠ” μ „λΆ€ ESP32의 lwIPκ°€ λ‹΄λ‹Ήν•œλ‹€. W5500은 사싀상 맀우 μ–Œμ „ν•œ SPI λΆ€μ°©ν˜• MAC/PHYκ°€ 되며, μ‹œμŠ€ν…œμ˜ λ‚˜λ¨Έμ§€ λΆ€λΆ„ μž…μž₯μ—μ„œλŠ” RMII PHY와 κ΅¬λΆ„λ˜μ§€ μ•ŠλŠ”λ‹€.

νš¨κ³ΌλŠ” μ™„μ „ν•˜λ‹€. μ§„μ§œ lwIP netif이기 λ•Œλ¬Έμ— DDP, E1.31, Art-Net, MQTT, μ›Ή UI, OTAκ°€ ν”„λ‘œν† μ½œλ³„ 글루 μ½”λ“œ ν•œ 쀄 없이 μžλ™μœΌλ‘œ 이더넷을 타고 λ™μž‘ν•œλ‹€. λŒ€κ°€λ„ 그만큼 λΆ„λͺ…ν•˜λ‹€. ν•˜λ“œμ™€μ΄μ–΄λ“œ TCP/IP 엔진은 놀고, ESP32 CPUκ°€ μŠ€νƒμ„ μ§Šμ–΄μ§„λ‹€.

이 μ˜€ν”„λ‘œλ“œ λŒ€ μŠ€νƒ ν˜Έν™˜μ„±μ˜ λ§žκ΅ν™˜μ΄ W5500 ν†΅ν•©μ˜ 근본적인 μ˜μ‚¬κ²°μ •μ΄λ©°, 이 ν”„λ‘œμ νŠΈλŠ” 곡개 μ €μž₯μ†Œμ—μ„œ λ³Ό 수 μžˆλŠ” κ·Έ λ§žκ΅ν™˜μ˜ κ°€μž₯ λͺ…ν™•ν•œ 싀세계 μ„œμˆ μ΄λ‹€.

 

πŸ”· 릴리슀 νŒŒμ΄ν”„λΌμΈ μžμ²΄κ°€ OTA μ•ˆμ „μ„±μ„ μ€‘μ‹¬μœΌλ‘œ 섀계됨

λ©”μΈν…Œμ΄λ„ˆμ˜ λΉŒλ“œ μ‹œμŠ€ν…œμ€ μ—…λ°μ΄νŠΈ 경둜λ₯Ό 뢀산물이 μ•„λ‹ˆλΌ 일급 μ‚°μΆœλ¬Όλ‘œ μ·¨κΈ‰ν•œλ‹€. λͺ¨λ“  λ¦΄λ¦¬μŠ€λŠ” νƒ€κ²Ÿλ‹Ή μ •ν™•νžˆ 두 개의 μ •κ·œν™”λœ μ•„ν‹°νŒ©νŠΈλ₯Ό λ°œν–‰ν•œλ‹€:

  • wled-<version>-<target>-<suffix>.app.bin β€” OTA 이미지. 정상 λ™μž‘ 쀑인 기기에 WLED μ„€μ • β†’ Security & Updates β†’ Manual OTA νŽ˜μ΄μ§€λ‘œ μ˜¬λ¦°λ‹€.
  • wled-<version>-<target>-<suffix>.full.bin β€” λΆ€νŠΈλ‘œλ” + νŒŒν‹°μ…˜ ν…Œμ΄λΈ” + μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν•©μΉœ 이미지. 졜초 UART ν”Œλž˜μ‹±μš©μ΄μž, OTAκ°€ μ‹€νŒ¨ν–ˆκ±°λ‚˜ νŒŒν‹°μ…˜ λ ˆμ΄μ•„μ›ƒμ΄ 바뀐 경우의 볡ꡬ용.

.full.bin은 esptool.py merge_bin λ‹¨κ³„λ‘œ λ§Œλ“€μ–΄μ§„λ‹€. S3 κΈ°μ€€ λΆ€νŠΈλ‘œλ”λ₯Ό 0x0, νŒŒν‹°μ…˜ ν…Œμ΄λΈ”μ„ 0x8000, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 0x10000에 λ°°μΉ˜ν•˜λ©°, μ„Έ μž…λ ₯ 쀑 ν•˜λ‚˜λΌλ„ μ—†μœΌλ©΄ μš”λž€ν•˜κ²Œ μ‹€νŒ¨ν•œλ‹€. 덜 λ§Œλ“€μ–΄μ§„ 볡ꡬ 이미지가 릴리슀 νŽ˜μ΄μ§€μ— μ˜¬λΌκ°€λŠ” 일이 μ›μ²œμ μœΌλ‘œ λΆˆκ°€λŠ₯ν•˜λ‹€λŠ” λœ»μ΄λ‹€. .full.bin은 μ• μ΄ˆμ— κΈ°κΈ°κ°€ 이미 κ³€λž€ν•œ μƒνƒœμΌ λ•Œ 손을 λ»—λŠ” μ•„ν‹°νŒ©νŠΈμ΄κΈ° λ•Œλ¬Έμ— 이 섀계가 μ€‘μš”ν•˜λ‹€.

λ¬Έμ„œν™”λœ 볡ꡬ κ·œμΉ™μ€ ν•œ λ¬Έμž₯이고, ν˜„μž₯ 기술자 μž…μž₯μ—μ„œλŠ” 이 μ €μž₯μ†Œ μ „μ²΄μ—μ„œ κ°€μž₯ μ“Έλͺ¨ μžˆλŠ” λ¬Έμž₯이닀. OTAκ°€ κ±°λΆ€λ˜κ±°λ‚˜ 이후 λΆ€νŒ…μ΄ μ•ˆ 되면, λŒ€μ‘λ˜λŠ” .full.bin을 UART둜 ν”Œλž˜μ‹±ν•˜λΌ. 이 κ·œμΉ™μ„ ν•„μˆ˜λ‘œ λ§Œλ“œλŠ” μ‹€νŒ¨ λͺ¨λ“œκ°€ λ‘˜ μžˆλ‹€ β€” .app.binλ§ŒμœΌλ‘œλŠ” λ„˜μ–΄κ°ˆ 수 μ—†λŠ” νŒŒν‹°μ…˜ λ ˆμ΄μ•„μ›ƒ λ³€κ²½, 그리고 μ•„λž˜μ— μ„€λͺ…ν•œ ν”Œλž˜μ‹œ λͺ¨λ“œ 헀더 함정. ν›„μžλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œκ°€ 돌기 μ „ ROM λ‹¨κ³„μ—μ„œ λΆ€νŠΈλ£¨ν”„μ— λΉ μ Έ μ‹œλ¦¬μ–Ό 좜λ ₯이 μ „ν˜€ μ—†λ‹€.

v16 라인은 μ•± νŒŒν‹°μ…˜ λ ˆμ΄μ•„μ›ƒμ—μ„œμ˜ 반볡 OTA 및 μž₯κΈ° OTA λ™μž‘μ΄ μ—¬μ „νžˆ λ―Έκ²€μ¦μ΄λΌλŠ” 점도 μ •μ§ν•˜κ²Œ 기둝해 λ‘μ—ˆλ‹€. νŽŒμ›¨μ–΄κ°€ μ‚¬μš© κ°€λŠ₯ν•œ μ•± 슬둯 쀑 μ—¬μœ  μžˆλŠ” λΉ„μœ¨λ§Œ μ°¨μ§€ν•˜κ³  μžˆμ§€λ§Œ, λ©”μΈν…Œμ΄λ„ˆλŠ” μ‹€μ œλ‘œ 해보지 μ•Šμ€ 것을 μ£Όμž₯ν•˜μ§€ μ•ŠλŠ”λ‹€. (νŒŒν‹°μ…˜ μš©λŸ‰ μˆ˜μΉ˜λŠ” v16 λ…ΈνŠΈ κΈ°μ€€μ΄λ―€λ‘œ, νŠΉμ • λΉŒλ“œμ— μ μš©ν•˜κΈ° 전에 ν˜„μž¬ .csv둜 λŒ€μ‘° ν™•μΈν•˜λŠ” 것이 μ’‹λ‹€.)

πŸ”· κ²€μ¦λœ 증거 βœ…

v17 라인의 검증 λͺ©λ‘μ€ μ‹€λ¬Ό λ³΄λ“œ 2λŒ€ κΈ°μ€€μœΌλ‘œ ꡬ체적이닀:

  • 이더넷 (LAN 및 PoE): pass
  • Wi-Fi: pass
  • xLights β†’ 이더넷 경유 DDP: pass
  • xLights β†’ Wi-Fi 경유 DDP: pass
  • 이더넷 경유 μ›Ή UI: pass
  • Wi-Fi 경유 μ›Ή UI: pass
  • λŸ°νƒ€μž„ LED λ²„μŠ€ μž¬κ΅¬μ„± β€” μž¬λΆ€νŒ… 없이 λ²„μŠ€ μΆ”κ°€/제거/μž¬μ„€μ •, RMT ꡬ동 λ²„μŠ€μ™€ I2S/LCD ꡬ동 λ²„μŠ€ μ–‘μͺ½μ—μ„œ "μ•žμ˜ N개 LED κ±΄λ„ˆλ›°κΈ°" 포함, 이더넷과 Wi-Fi μ–‘μͺ½μ—μ„œ: pass

MQTTλŠ” 슬쩍 λ„˜μ–΄κ°€μ§€ μ•Šκ³  "아직 미검증"이라고 λͺ…μ‹œλ˜μ–΄ μžˆλ‹€. 이 정직함은 pass λͺ©λ‘λ§ŒνΌμ˜ κ°€μΉ˜κ°€ μžˆλ‹€.

05 β€” 핡심 ꡬ성 μš”μ†Œ

🌐 WIZnet W5500 β€” 두 λΉŒλ“œ λΌμΈμ—μ„œ TOE와 MACRAW μ–‘μͺ½ λͺ¨λ“œ λͺ¨λ‘ μ‚¬μš©

  • v16 라인: ν•˜λ“œμ™€μ΄μ–΄λ“œ TCP/IP μ†ŒμΌ“ μ—”μ§„(TOE). νŒ¨μΉ˜ν•œ Ethernet_Generic을 벀더링해 ꡬ동. 링크업과 DHCPκΉŒμ§€ ν•˜λ“œμ›¨μ–΄ 검증됨. WLED μ• ν”Œλ¦¬μΌ€μ΄μ…˜ νŠΈλž˜ν”½μ€ μ‹£μ§€ μ•ŠλŠ”λ‹€λŠ” 점이 ν•¨κ»˜ λ¬Έμ„œν™”λ¨.
  • v17 라인 (ꢌμž₯): ESP-IDF의 ETH_PHY_W5500을 ν†΅ν•œ MACRAW λͺ¨λ“œ. μ‹œμŠ€ν…œμ—λŠ” λ„€μ΄ν‹°λΈŒ lwIP μΈν„°νŽ˜μ΄μŠ€λ‘œ λ…ΈμΆœλ˜λ©°, WLED의 λͺ¨λ“  νŠΈλž˜ν”½μ΄ 이 경둜λ₯Ό μ§€λ‚˜κ°„λ‹€.
  • SPI 핀맡은 두 라인 동일: MISO=12 MOSI=11 SCLK=13 CS=14 INT=10 RST=9. Waveshare 핀아웃 λ‹€μ΄μ–΄κ·Έλž¨κ³Ό λŒ€μ‘° 확인됨.
  • v17 νŒ¨μΉ˜λŠ” xml.cpp에 μ˜ˆμ•½ ν•€ 보고λ₯Ό, 정보 νŒ¨λ„(json.cpp / data/index.js)에 Wi-Fi와 이더넷 IP λ™μ‹œ ν‘œμ‹œλ₯Ό μΆ”κ°€ν•œλ‹€. 덕뢄에 W5500의 ν•€κ³Ό 링크 μƒνƒœκ°€ WLED 자체 UI에 λ“œλŸ¬λ‚œλ‹€.

🧠 Waveshare ESP32-S3-ETH

ESP32-S3, ν”Œλž˜μ‹œ 16MB, PSRAM 8MB, PoE 지원 W5500 이더넷. λ‚΄μž₯ EMAC이 μ—†λ‹€ β€” κ·Έλž˜μ„œ μ—¬κΈ°μ„œ W5500은 편의 사양이 μ•„λ‹ˆλΌ ν•„μˆ˜ 쑰건이닀.

πŸ’‘ 8 Γ— WS281x LED λ²„μŠ€

RMT ν•˜λ“œμ›¨μ–΄ 채널 4κ°œμ™€ I2S/LCD 병렬 채널 4개둜 κ΅¬λ™λ˜λ©°, WLED의 λ²„μŠ€ λ§€λ‹ˆμ €κ°€ λŸ°νƒ€μž„μ— λ²”μš©μ μœΌλ‘œ μ²˜λ¦¬ν•œλ‹€. v17 λΌμΈμ—μ„œλŠ” 데이터 ν•€ μˆœμ„œλ₯Ό μ˜λ„μ μœΌλ‘œ 18,17,16,15,3,2,1,21둜 μž¬λ°°μΉ˜ν–ˆλ‹€. GPIO0을 μ„ΈνŠΈμ—μ„œ λΉΌκ³  β€” S3 μŠ€νŠΈλž˜ν•‘ ν•€μ΄μž BOOT λ²„νŠΌκ³Ό κ³΅μœ λ˜λŠ” ν•€ β€” W5500 SPI ν•€, SD μΉ΄λ“œ, USB와 κ²ΉμΉ˜μ§€ μ•ŠλŠ” μ—¬μœ  ν•€ GPIO21둜 λŒ€μ²΄ν–ˆλ‹€.

πŸ—οΈ νƒ€κ²Ÿ κ³„μΈ΅ν˜• λΉŒλ“œ μ‹œμŠ€ν…œ

targets/<target>/shared/κ°€ λ³΄λ“œλ³„ 단일 μ§„μ‹€ μ†ŒμŠ€μ΄κ³ , targets/<target>/v15|v16|v17/은 버전 λΈνƒ€λ§Œ λ‹΄λŠ”λ‹€. scripts/build-target.shκ°€ λ§€λ‹ˆνŽ˜μŠ€νŠΈλ₯Ό 읽고, WLED 베이슀λ₯Ό ν•΄μ„ν•˜κ³ (둜컬 체크아웃 μš°μ„ , μ—†μœΌλ©΄ μ—…μŠ€νŠΈλ¦Ό fetch), νƒ€κ²Ÿ μ˜€λ²„λ ˆμ΄λ₯Ό μ μš©ν•œ λ’€ λΉŒλ“œν•œλ‹€. μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ logs/<target>/<version>/<YYYYMMDD>/ μ•„λž˜μ— λ‚ μ§œλ³„ 둜그, 메타데이터 JSON, μš”μ•½λ³Έμ„ κΈ°λ‘ν•˜κ³ , μ΅œμ‹  성곡 싀행본을 latest/에 λ³΅μ‚¬ν•œλ‹€.

πŸš€ 토큰 게이트 λ°©μ‹μ˜ CI 릴리슀 νŒŒμ΄ν”„λΌμΈ

GitHub Actionsκ°€ κ΄€λ ¨ ν‘Έμ‹œλ§ˆλ‹€ μ•„ν‹°νŒ©νŠΈλ₯Ό λΉŒλ“œν•˜μ§€λ§Œ, GitHub ReleaseλŠ” 컀밋 λ©”μ‹œμ§€μ— release 토큰이 λ“€μ–΄ μžˆμ„ λ•Œλ§Œ λ°œν–‰λœλ‹€. release legacyλ©΄ ν”„λ¦¬λ¦΄λ¦¬μŠ€λ‘œ λ°œν–‰λœλ‹€. 배포 νŽŒμ›¨μ–΄ 이름은 OTA용 wled-<version>-<target>-<suffix>.app.binκ³Ό 졜초 UART ν”Œλž˜μ‹±μš© .full.bin으둜 μ •κ·œν™”λ˜λ©°, ν›„μžλŠ” λΆ€νŠΈλ‘œλ”Β·νŒŒν‹°μ…˜ ν…Œμ΄λΈ”Β·μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν•˜λ‚˜μ˜ μ΄λ―Έμ§€λ‘œ ν•©μΉ˜λŠ” esptool.py merge_bin λ‹¨κ³„μ—μ„œ μƒμ„±λ˜κ³  μž…λ ₯이 ν•˜λ‚˜λΌλ„ μ—†μœΌλ©΄ μš”λž€ν•˜κ²Œ μ‹€νŒ¨ν•œλ‹€.

⚠️ κΈ°λ‘ν•΄λ‘˜ κ°€μΉ˜κ°€ μžˆλŠ” ν”Œλž˜μ‹œ λͺ¨λ“œ 함정

이 λ³΄λ“œμ˜ ν”Œλž˜μ‹œλŠ” DIOλ₯Ό μš”κ΅¬ν•˜λŠ”λ°, esp32s3 μ½”μ–΄μ—λŠ” DIO λΆ€νŠΈλ‘œλ” ELFκ°€ λ“€μ–΄ μžˆμ§€ μ•Šλ‹€. κ·Έλž˜μ„œ board_build.flash_modeλŠ” qioμ—¬μ•Ό ν•˜κ³ (PlatformIOκ°€ μ–΄λ–€ λΆ€νŠΈλ‘œλ”λ₯Ό 링크할지 κ²°μ •), custom_merge_flash_modeλŠ” dioμ—¬μ•Ό ν•œλ‹€(ROM이 λΆ€νŒ… μ‹œ μ‹€μ œλ‘œ μ°Έμ‘°ν•˜λŠ” κ°’). 이걸 틀리면 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œκ°€ ν•œ 쀄도 돌기 전에 ROM λ‹¨κ³„μ—μ„œ λΆ€νŠΈλ£¨ν”„μ— λΉ μ§€κ³ , μ‹œλ¦¬μ–Ό 좜λ ₯이 μ „ν˜€ μ—†μœΌλ©°, esptool.py erase_flash둜만 λ³΅κ΅¬λœλ‹€. λ‹€μŒ μ‚¬λžŒμ˜ 주말을 κ΅¬ν•΄μ£ΌλŠ” μ’…λ₯˜μ˜ 정보닀.

06 β€” 적용 μ‹œλ‚˜λ¦¬μ˜€

01. 상섀 건좕 μ‘°λͺ… 및 홀리데이 λΌμ΄νŒ…

xLights μ‹œν€€μŠ€κ°€ 수천 픽셀을 높은 ν”„λ ˆμž„ 레이트둜 DDPλ₯Ό 톡해 κ΅¬λ™ν•˜κ³ , μ»¨νŠΈλ‘€λŸ¬λŠ” 벽에 κ³ μ •λ˜μ–΄ PoE둜 전원을 λ°›μœΌλ©° 물리적으둜 손이 λ‹Ώμ§€ μ•ŠλŠ” ν™˜κ²½. v17 라인이 μ •ν™•νžˆ 이 μ œν’ˆμ΄λ‹€ β€” 케이블 ν•˜λ‚˜, 결정둠적 μ§€μ—°, ν•˜λ“œμ›¨μ–΄ κ²€μ¦λœ 이더넷 경유 DDP.

02. λ¬΄λŒ€Β·κ³΅μ—°μž₯·이벀트 μ‘°λͺ…

E1.31(sACN)κ³Ό Art-Net은 곡연 μ‘°λͺ… μ œμ–΄μ˜ λͺ¨κ΅­μ–΄λ‹€. 관객 수백 λͺ…μ˜ νœ΄λŒ€ν°μ΄ 2.4GHz λŒ€μ—­μ„ ν¬ν™”μ‹œν‚€λŠ” 곡연μž₯은 Wi-Fi ν”½μ…€ μŠ€νŠΈλ¦¬λ°μ— μ΅œμ•…μ˜ ν™˜κ²½μ΄μž, W5500 업링크λ₯Ό μ •λ‹Ήν™”ν•˜λŠ” μ΅œμ„ μ˜ κ·Όκ±°λ‹€.

03. W5500 톡합 μ˜μ‚¬κ²°μ •μ„ μœ„ν•œ 레퍼런슀 섀계

"W5500의 ν•˜λ“œμ›¨μ–΄ TCP/IP μŠ€νƒμ„ μ“ΈκΉŒ, μ•„λ‹ˆλ©΄ MACRAW PHY둜 μ“ΈκΉŒ?"λΌλŠ” 질문 μ•žμ— μ„  μ—”μ§€λ‹ˆμ–΄λΌλ©΄, 이제 μ–‘μͺ½ 뢄기에 λŒ€ν•΄ λ¬Έμ„œν™”λ˜κ³  ν•˜λ“œμ›¨μ–΄λ‘œ κ²€μ¦λœ 닡을 각각 μ–΄λ–€ μ‘°κ±΄μ—μ„œ μœ λ¦¬ν•œμ§€κΉŒμ§€ 포함해 얻을 수 μžˆλ‹€. μš”μ•½ν•˜λ©΄ 이렇닀: μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측을 λ‚΄κ°€ ν†΅μ œν•˜λ©΄ TOE, κΈ°μ‘΄ lwIP λ„€μ΄ν‹°λΈŒ μŠ€νƒμ— ν†΅ν•©ν•˜λŠ” 상황이면 MACRAW.

04. PoE ν•œ κ°€λ‹₯으둜 μ΄λ£¨μ–΄μ§€λŠ” 원격 ν”Œλ¦Ώ μœ μ§€λ³΄μˆ˜

κ΄€λ¦¬ν˜• μŠ€μœ„μΉ˜ ν•˜λ‚˜ 뒀에 컨트둀러 20λŒ€κ°€ κ±Έλ¦° 곡연μž₯. v17 라인은 OTAλ₯Ό μ΄λ”λ„·μœΌλ‘œ μ‹€μ–΄ λ‚˜λ₯΄λ―€λ‘œ, 같은 λ„€νŠΈμ›Œν¬μ— 뢙은 λ…ΈνŠΈλΆ ν•˜λ‚˜λ‘œ 전체 ν”Œλ¦Ώμ„ μ—…λ°μ΄νŠΈν•  수 μžˆλ‹€. Wi-Fi 자격 증λͺ…을 κΈ°κΈ°λ§ˆλ‹€ 넣을 ν•„μš”λ„ μ—†κ³ , μž₯λΉ„λ§ˆλ‹€ 사닀리λ₯Ό νƒˆ 일도 μ—†μœΌλ©°, 응닡이 μ—†λŠ” μœ λ‹›μ€ μŠ€μœ„μΉ˜ 포트 μͺ½μ—μ„œ 링크 μƒνƒœλ₯Ό 진단할 수 μžˆλ‹€. 20λŒ€ 쀑 ν•œ λŒ€κ°€ μ—…λ°μ΄νŠΈλ₯Ό κΉ”λ”ν•˜κ²Œ λ°›μ§€ λͺ»ν–ˆμ„ λ•Œλ₯Ό μœ„ν•΄ .app.bin / .full.bin 이뢄법이 결정둠적인 볡ꡬ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ œκ³΅ν•œλ‹€.

05. λ³΄λ“œλ³„ νŽŒμ›¨μ–΄ 포크 μœ μ§€λ³΄μˆ˜μ˜ ν…œν”Œλ¦Ώ

νƒ€κ²Ÿ/버전 μ˜€λ²„λ ˆμ΄ λͺ¨λΈ, λ§€λ‹ˆνŽ˜μŠ€νŠΈ 폴백 체인, 토큰 게이트 릴리슀 μ›Œν¬ν”Œλ‘œ, 패치 λ“œλ¦¬ν”„νŠΈ 검사기(scripts/check-target-patches.sh)λŠ” λΉ λ₯΄κ²Œ μ›€μ§μ΄λŠ” μ—…μŠ€νŠΈλ¦Όμ˜ μ»€μŠ€ν…€ λΉŒλ“œλ₯Ό μœ μ§€λ³΄μˆ˜ν•˜λŠ” λͺ¨λ“  μ‚¬λžŒμ—κ²Œ μž¬μ‚¬μš© κ°€λŠ₯ν•œ νŒ¨ν„΄μ„ 이룬닀. μž„λ² λ””λ“œ μ˜€ν”ˆμ†ŒμŠ€ μ„Έκ³„μ˜ 상당 뢀뢄이 여기에 ν•΄λ‹Ήν•œλ‹€.

κ²°λ‘ 

이 ν”„λ‘œμ νŠΈλŠ” "W5500이 WLED와 λ˜λ‚˜?"λΌλŠ” μ§ˆλ¬Έμ„, 훨씬 μœ μš©ν•œ λ¬΄μ–Έκ°€λ‘œ λ°”κΏ”λ†“μ•˜λ‹€ β€” μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ W5500의 두 κ°€μ§€ 톡합 λͺ¨λ“œκ°€ 각각 무엇을 μ œκ³΅ν•˜λŠ”μ§€μ— λŒ€ν•œ ν•˜λ“œμ›¨μ–΄ κ²€μ¦λœ λ‚˜λž€ν•œ 비ꡐ이며, λΆ€μ • κ²°κ³ΌκΉŒμ§€ κ³΅κ°œν•  만큼 μ •μ§ν•˜λ‹€.

  • βœ… λ‚΄μž₯ EMAC이 μ—†λŠ” ESP32-S3μ—μ„œ, RMII μ „μš©μΈ WLED κΈ°λ³Έ 이더넷 ν…Œμ΄λΈ”μ΄ 컴파일쑰차 κ±°λΆ€ν•˜λŠ” 상황을 뚫고 W5500 이더넷을 λ™μž‘μ‹œν‚΄
  • βœ… 동일 λ³΄λ“œμ—μ„œ W5500 톡합 λͺ¨λΈ 두 κ°€μ§€ β€” TOE ν•˜λ“œμ›¨μ–΄ μ†ŒμΌ“(v16)κ³Ό λ„€μ΄ν‹°λΈŒ lwIP ν•˜μœ„ MACRAW(v17) β€” λ₯Ό λͺ¨λ‘ κ΅¬ν˜„ν•˜κ³  ν•˜λ“œμ›¨μ–΄ 검증
  • βœ… TOE μ˜€ν”„λ‘œλ“œκ°€ μ™œ lwIP λ„€μ΄ν‹°λΈŒ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ νŠΈλž˜ν”½μ„ λ„€νŠΈμ›Œν‚Ή μ½”μ–΄ μž¬μž‘μ„± μ—†μ΄λŠ” μ‹€μ–΄ λ‚˜λ₯Ό 수 μ—†λŠ”μ§€λ₯Ό, μž¬ν˜„λœ 증거와 ν•¨κ»˜ λ¬Έμ„œν™”
  • βœ… DDP, E1.31, μ›Ή UIκ°€ 이더넷 μœ„μ—μ„œ λ™μž‘ν•¨μ„ μ‹€λ¬Ό λ³΄λ“œ 2λŒ€λ‘œ κ²€μ¦ν•œ v17 라인을 제곡. OTA와 MQTTλŠ” 같은 lwIP 경둜λ₯Ό ꡬ쑰적으둜 따라감
  • βœ… OTAλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ°”μΈλ”©λœ μŠ€νƒμ„ λ”°λΌκ°„λ‹€λŠ”, 배포에 결정적인 귀결을 λ“œλŸ¬λƒ„ β€” 이더넷 경유 νŽŒμ›¨μ–΄ μ—…λ°μ΄νŠΈκ°€ lwIP λΌμΈμ—μ„œλ§Œ κ°€λŠ₯ν•˜λ‹€λŠ” 사싀이, μ•„ν‚€ν…μ²˜ 선택을 κ³§ μœ μ§€λ³΄μˆ˜ κ°€λŠ₯μ„±μ˜ 문제둜 λ°”κΏ”λ†“λŠ”λ‹€
  • βœ… μ‹€μ œ 결함 4건의 κ·Όλ³Έ 원인 규λͺ… 및 μˆ˜μ •. 그쀑 3건은 이더넷과 λ¬΄κ΄€ν•˜κ²Œ λͺ¨λ“  ESP32-S3 μ‚¬μš©μžμ—κ²Œ 영ν–₯을 주던 μ—…μŠ€νŠΈλ¦Ό 버그
  • βœ… 볡ꡬ λΆˆκ°€λŠ₯ν•œ λΆ€νŠΈλ£¨ν”„λ‘œ λ‚˜νƒ€λ‚˜λŠ” ROM 단계 ν”Œλž˜μ‹œ λͺ¨λ“œ 함정(qio λΆ€νŠΈλ‘œλ” 헀더 vs dio 병합 헀더)을 λ¬Έμ„œν™”
  • βœ… W5500을 WLED 자체 UI에 λ…ΈμΆœ β€” μ˜ˆμ•½ ν•€ 보고 및 정보 νŒ¨λ„μ˜ Wi-Fi/이더넷 IP λ™μ‹œ ν‘œμ‹œ
  • βœ… λ‚ μ§œλ³„ 둜그, λΉŒλ“œ 메타데이터, 토큰 게이트 릴리슀, μ •κ·œν™”λœ .app.bin / .full.bin μ•„ν‹°νŒ©νŠΈλ₯Ό κ°–μΆ˜ μž¬ν˜„ κ°€λŠ₯ν•œ νƒ€κ²Ÿ/버전 μ˜€λ²„λ ˆμ΄ νŒŒμ΄ν”„λΌμΈ ꡬ좕
  • βœ… κ²€μ¦λ˜μ§€ μ•Šμ€ ν•­λͺ©(MQTT, ν•«ν”ŒλŸ¬κ·Έ 감지, 3MB λ ˆμ΄μ•„μ›ƒμ—μ„œμ˜ μž₯κΈ° OTA)을 κ³ΌλŒ€ μ£Όμž₯ 없이 λͺ…μ‹œ

Q&A

Q. v17 라인은 W5500의 ν•˜λ“œμ›¨μ–΄ TCP/IP 엔진을 λ‚­λΉ„ν•˜λŠ” 것 μ•„λ‹Œκ°€? μ—„λ°€νžˆ λ§ν•˜λ©΄ κ·Έλ ‡λ‹€ β€” MACRAW λͺ¨λ“œλŠ” ν•˜λ“œμ™€μ΄μ–΄λ“œ μŠ€νƒμ„ μš°νšŒν•˜κ³  ESP32κ°€ μ†Œν”„νŠΈμ›¨μ–΄λ‘œ ν”„λ‘œν† μ½œμ„ μ²˜λ¦¬ν•œλ‹€. ν•˜μ§€λ§Œ 이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ€‘μš”ν•œ 일은 μ—¬μ „νžˆ W5500이 ν•œλ‹€. EMAC이 μ—†λŠ” μΉ©μ—μ„œ μœ μ„  이더넷 자체λ₯Ό κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” MAC/PHY이고, 연결은 λ‹¨μˆœν•œ SPI λ²„μŠ€μ΄λ©°, ESP-IDF에 μ„±μˆ™ν•œ λ“œλΌμ΄λ²„κ°€ μžˆλ‹€. 32KB λ‚΄μž₯ λ²„νΌλŠ” μ—¬μ „νžˆ λ²„μŠ€νŠΈλ₯Ό ν‘μˆ˜ν•˜κ³ , L1/L2 μ²˜λ¦¬λŠ” μ „λΆ€ 칩이 λ‹΄λ‹Ήν•œλ‹€. λ„€νŠΈμ›Œν‚Ή 계측 전체가 lwIP에 묢인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λΌλ©΄ 이건 μ˜¬λ°”λ₯Έ μ—”μ§€λ‹ˆμ–΄λ§ λ§žκ΅ν™˜μ΄λ‹€.

Q. 그러면 W5500의 TOE λͺ¨λ“œλŠ” μ–Έμ œ 써야 ν•˜λ‚˜? μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측을 λ‚΄κ°€ μ†Œμœ ν•  λ•Œλ‹€. μ‹ κ·œ 개발 νŽŒμ›¨μ–΄ β€” μ‚°μ—…μš© Modbus TCP κ²Œμ΄νŠΈμ›¨μ΄, 데이터 둜거, λͺ©μ  νŠΉν™” HTTP/MQTT λ””λ°”μ΄μŠ€ β€” λ₯Ό W5500 μ†ŒμΌ“ API에 맞좰 직접 μž‘μ„±ν•˜λ©΄ 이점을 μ „λΆ€ κ°€μ Έκ°„λ‹€. ν”Œλž˜μ‹œμ— μ†Œν”„νŠΈμ›¨μ–΄ TCP/IP μŠ€νƒμ΄ μ—†κ³ , 체크섬과 μž¬μ „μ†‘μ— CPU 사이클을 μ“°μ§€ μ•ŠμœΌλ©°, μ†ŒμΌ“ λ™μž‘μ΄ 결정둠적이닀. v16 라인의 λ°œκ²¬μ€ "TOEκ°€ μ—΄λ“±ν•˜λ‹€"κ°€ μ•„λ‹ˆλΌ "TOEλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 그것을 ν–₯ν•΄ μž‘μ„±λ˜μ–΄ 있기λ₯Ό μš”κ΅¬ν•œλ‹€"이며, 이건 W5500이 μ•„λ‹ˆλΌ WLED에 λŒ€ν•œ μ§„μˆ μ΄λ‹€.

Q. 또 λ‹€λ₯Έ ν”ν•œ SPI 이더넷 선택지인 ENC28J60은 μ™œ μ•ˆ λ˜λ‚˜? λ¨Όμ € μ§šμ–΄λ‘˜ 것은 μ €μž₯μ†Œκ°€ 이 μ§ˆλ¬Έμ„ λ˜μ§„ 적이 μ—†λ‹€λŠ” 점이닀. λ³΄λ“œμ— W5500이 μ‹€μž₯된 μ±„λ‘œ μΆœν•˜λ˜λ―€λ‘œ 선택 κ³Όμ • μžμ²΄κ°€ μ—†μ—ˆλ‹€. 일반적인 배경으둜 λ‹΅ν•˜λ©΄, ENC28J60은 10Mbps μ „μš©μ΄κ³ , ν•˜λ“œμ™€μ΄μ–΄λ“œ TCP/IP μŠ€νƒμ΄ μ•„μ˜ˆ μ—†μ–΄μ„œ TOEλΌλŠ” 선택지 μžμ²΄κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©°, λ“œλΌμ΄λ²„ μƒνƒœκ³„μ— 에라타 우회의 역사가 κΈΈλ‹€. W5500은 10/100이고, ν•˜λ“œμ›¨μ–΄ μ†ŒμΌ“ 8κ°œμ™€ 32KB 버퍼λ₯Ό κ°–μ·„κ³ , SPIλ₯Ό μ΅œλŒ€ 80MHzκΉŒμ§€ μ“°λ©°, ESP-IDF에 ETH_PHY_W5500μ΄λΌλŠ” 일급 λ“œλΌμ΄λ²„ 지원이 μžˆλ‹€ β€” λ°”λ‘œ κ·Έ 지원이 v17 라인을 κ°€λŠ₯ν•˜κ²Œ λ§Œλ“€μ—ˆλ‹€.

Q. μ‹€μ œλ‘œλŠ” μ–΄λ–€ λΉŒλ“œλ₯Ό ν”Œλž˜μ‹±ν•΄μ•Ό ν•˜λ‚˜? ν•˜λ“œμ›¨μ–΄ μ†ŒμΌ“ 방식 자체λ₯Ό 연ꡬ할 λͺ©μ μ΄ μ•„λ‹ˆλΌλ©΄ v17 라인이닀. 정상 λ™μž‘ 쀑인 κΈ°μ‘΄ μ„€μΉ˜μ— OTA둜 올릴 λ•ŒλŠ” .app.bin, μƒˆ λ³΄λ“œΒ·λ²½λŒ μƒνƒœΒ·νŒŒν‹°μ…˜ λ ˆμ΄μ•„μ›ƒ λ³€κ²½ ν›„μ—λŠ” UART둜 .full.bin을 μ“΄λ‹€.

Q. μ΄λ”λ„·μœΌλ‘œ νŽŒμ›¨μ–΄ μ—…λ°μ΄νŠΈκ°€ κ°€λŠ₯ν•œκ°€? λ©”μΈν…Œμ΄λ„ˆ 본인의 μ„œμˆ μ— λ”°λ₯΄λ©΄ v17 λΌμΈμ—μ„œ κ°€λŠ₯ν•˜λ‹€. λ‹€λ§Œ ν•΄λ‹Ή 라인의 ν•˜λ“œμ›¨μ–΄ 검증 λͺ©λ‘μ— OTAκ°€ ν•­λͺ©μœΌλ‘œ μ˜¬λΌμ™€ μžˆμ§€λŠ” μ•ŠμœΌλ―€λ‘œ, λ³„λ„λ‘œ μΈ‘μ •λœ 결과라기보닀 ꡬ쑰적으둜 νƒ€λ‹Ήν•œ μƒνƒœλ‘œ λ°›μ•„λ“€μ΄λŠ” 것이 λ§žλ‹€. WLED의 OTA μ—”λ“œν¬μΈνŠΈλŠ” λ‚˜λ¨Έμ§€ κΈ°λŠ₯κ³Ό ν•¨κ»˜ lwIP/AsyncTCP μœ„μ— μžˆμ–΄μ„œ, lwIPκ°€ μ†Œμœ ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν†΅ν•΄μ„œλ§Œ 기기에 λ„λ‹¬ν•œλ‹€. v17μ—μ„œλŠ” W5500 μžμ²΄κ°€ lwIP μΈν„°νŽ˜μ΄μŠ€μ΄λ―€λ‘œ μΆ”κ°€ μ½”λ“œ 없이 이더넷 OTAκ°€ λ™μž‘ν•œλ‹€. v16μ—μ„œλŠ” W5500이 λ³„λ„μ˜ ν•˜λ“œμ›¨μ–΄ μ†ŒμΌ“ μŠ€νƒμ„ 돌리고 OTAλŠ” κ·Έμͺ½μœΌλ‘œ λ“€μ–΄κ°ˆ κ²½λ‘œκ°€ μ—†λ‹€ β€” 이더넷 ν¬νŠΈμ— IPλŠ” μžˆμ§€λ§Œ κ·Έ μ£Όμ†Œλ‘œ νŽŒμ›¨μ–΄λ₯Ό λ°€μ–΄ 넣을 수 μ—†κ³ , μ—…λ°μ΄νŠΈλŠ” Wi-Fi둜 κ°€μ•Ό ν•œλ‹€. μ“Έ λ§Œν•œ Wi-Fiκ°€ μ—†λŠ” μ„€μΉ˜ ν˜„μž₯이라면 이 차이가 κ³§ 원격 μ—…λ°μ΄νŠΈλƒ 좜μž₯μ΄λƒμ˜ 차이닀.

Q. OTA μ—…λ°μ΄νŠΈκ°€ μ‹€νŒ¨ν•˜λ©΄ μ–΄λ–»κ²Œ λ˜λ‚˜? λŒ€μ‘λ˜λŠ” .full.bin을 UART둜 ν”Œλž˜μ‹±ν•˜λ©΄ λœλ‹€. λΆ€νŠΈλ‘œλ”Β·νŒŒν‹°μ…˜ ν…Œμ΄λΈ”Β·μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν•œ 이미지에 λ“€μ–΄ μžˆμ–΄μ„œ, μ‹€νŒ¨ν•œ μ—…λ°μ΄νŠΈκ°€ κΈ°κΈ°λ₯Ό μ–΄λ–€ μƒνƒœλ‘œ λ§Œλ“€μ–΄λ†¨λ“  λ³΅κ΅¬λœλ‹€. 이걸 선택이 μ•„λ‹ˆλΌ ν•„μˆ˜λ‘œ λ§Œλ“œλŠ” 상황이 λ‘˜ μžˆλ‹€. 기기에 μ˜¬λΌκ°„ 것과 νŒŒν‹°μ…˜ λ ˆμ΄μ•„μ›ƒμ΄ λ‹€λ₯Έ λΉŒλ“œ(이건 .app.binλ§ŒμœΌλ‘œλŠ” 해결이 μ•ˆ λœλ‹€), 그리고 ν”Œλž˜μ‹œ λͺ¨λ“œ 헀더 뢈일치(μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œκ°€ 돌기 μ „ ROM λ‚΄λΆ€μ—μ„œ λΆ€νŠΈλ£¨ν”„μ— λΉ μ§€κ³  μ‹œλ¦¬μ–Ό 좜λ ₯이 μ „ν˜€ μ—†λ‹€). μžƒμœΌλ©΄ μ•ˆ λ˜λŠ” μ„€μΉ˜ ν˜„μž₯이라면 UART μ–΄λŒ‘ν„°λ₯Ό ν˜„μž₯에 λΉ„μΉ˜ν•΄ λ‘λŠ” 게 μ’‹λ‹€.

Q. μ•žμœΌλ‘œ λ‚˜μ˜¬ WIZnet 칩이 이 λ§žκ΅ν™˜μ„ λ°”κΏ€ 수 μžˆμ„κΉŒ? 개인적인 μƒκ°μœΌλ‘œλŠ” μΆ©λΆ„νžˆ κ°€λŠ₯ν•˜λ‹€. W6300의 QSPI 호슀트 μΈν„°νŽ˜μ΄μŠ€λŠ” SPI μΈ‘ μƒν•œμ„ 크게 λŒμ–΄μ˜¬λ¦¬κ³ , W55RP20은 MCU와 W5500κΈ‰ MAC/PHYλ₯Ό ν•œ νŒ¨ν‚€μ§€λ‘œ ν†΅ν•©ν•œλ‹€ β€” μ²˜μŒλΆ€ν„° TOE λͺ¨λ“œκ°€ μžμ—°μŠ€λŸ¬μš΄ 선택인 μ‹ κ·œ 컨트둀러 섀계에 특히 λ§€λ ₯적인 쑰합이닀.


Original Link: https://github.com/johnvoipguy/wled-custom-builds

Target detail: targets/waveshare-esp32s3-eth/README.md Β· v17 notes Β· v16 notes

License: EUPL-1.2

Comments

Comments