Wiznet makers

scott

Published July 20, 2026 ©

140 UCC

20 WCC

48 VAR

0 Contests

0 Followers

0 Following

Original Link

platform-jwplc

JWPLC Basic: An Open-Source Industrial PLC Board Package Built on ESP32 and W5500

COMPONENTS Hardware components

WIZnet - W5500

x 1


PROJECT DESCRIPTION

요약

JWPLC Basic은 ESP32-WROOM-32E 기반 산업용 컨트롤러를 Arduino IDE에서 프로그래밍할 수 있게 해주는 커스텀 보드 패키지입니다. WIZnet W5500이 유선 이더넷 오프로딩을 전담하고, RS-485/Modbus RTU·TFT 디스플레이·산업용 I/O 익스팬더가 런타임 레벨에서 통합돼 있습니다. 무엇보다 이 저장소는 개인 취미 프로젝트가 아니라, 페루 기업 JW Control이 실제로 판매하는 산업 자동화 제품의 기반 코드라는 점에서 주목할 만합니다.

개요

범용 ESP32 Arduino core는 패키지 용량이 5.72GB에 달하고, 산업 현장에서 반복적으로 필요한 I2C 익스팬더·SPI 버스 공유·Modbus 초기화 코드를 매번 손으로 작성해야 합니다. JWPLC는 이런 반복 작업을 pinMode(I0_0, INPUT)처럼 표준 Arduino 문법JWPLC_Ethernet, JWPLC_Display 같은 전역 객체로 추상화해 해결합니다.

제작 주체는 JW Control, 페루에 소재한 산업 자동화 하드웨어·펌웨어 기업입니다. 공동창업자 Jeykco Wilfredo Villavicencio Huanila(UNI 메카트로닉스 엔지니어 출신)가 이끄는 이 회사는 세탁 설비 자동화를 대표 실적으로 내세우지만, 자사 FAQ에서 시스템이 세탁업뿐 아니라 다양한 산업 응용에 구현 가능하다고 직접 명시하고 있어 "세탁 전용"으로 단정하기는 어렵습니다.

Controlador industrial JWPLC Basic 2.0.0 basado en ESP32

도입 배경 / 왜 필요한가

  • 저장소 자체 도입: 확인됨. JW Control은 전자보드가 페루에서 조립되는 국내 생산품이며 설치 후 1년 보증을 제공한다고 밝히고, JWPLC-Laundry라는 명명된 상용 제품 라인이 존재합니다. 공동창업자가 "CAS LEGACY 2025 – Automatización Industrial con JWPLC y Ladder" 발표를 진행한 이력도 실사용의 방증입니다. → 출처: jw-control.com
  • 산업적·규제적 필요성: 확인 불가. 특정 법규나 표준이 이 프로젝트를 촉발했다는 근거는 찾지 못했습니다. 다만 회사가 반복해서 강조하는 시장 동인은 상용 PLC 라이선스 비용 없이 오픈소스 소프트웨어를 사용한다는 점입니다 — 이는 규제가 아닌 비용 절감이라는 상업적 동기입니다.

아키텍처

TFT·W5500·FRAM·microSD가 하나의 SPI 버스를 공유하는 구조가 핵심 제약입니다. 문서 자체가 "디스플레이 콜백 안에서 SPI 페리페럴을 직접 조회하지 말고, loop()에서 값을 캐싱한 뒤 그리라"는 규칙을 명시할 정도로, 이 공유 버스 경합을 설계 단계에서부터 인지하고 대응하고 있습니다.

기술 배경

하드웨어 TCP/IP 소켓 구조 (W5500)

W5500은 TCP/IP 스택 전체를 칩 내부 하드웨어로 처리해, MCU가 패킷 처리 부담 없이 애플리케이션 로직에만 집중하게 합니다. 최대 8개 소켓과 32KB 내장 버퍼를 제공하며, SPI 인터페이스 하나로 MCU와 연결됩니다. JWPLC에서는 이 오프로딩 덕분에 ESP32의 코어 자원을 I/O 스캔·Modbus 처리·디스플레이 갱신에 더 배분할 수 있습니다. → 참고: WIZnet W5500 데이터시트

Modbus RTU/TCP 이중 스택

Modbus는 홀딩 레지스터·코일 등 단순한 메모리 맵을 마스터/슬레이브 구조로 주고받는 산업 표준 프로토콜입니다. JWPLC는 RS-485 위의 RTU와 **W5500 위의 TCP(포트 502)**를 모두 지원해, 필드버스와 이더넷 두 계층을 한 보드가 커버하려 시도합니다. 다만 두 프로토콜을 동시에 쓰는 조합은 아직 완전히 검증되지 않았다는 점이 이 프로젝트의 현재 위치를 잘 보여줍니다.

OpenPLC / IEC 61131-3 Ladder Logic

IEC 61131-3은 PLC 프로그래밍 언어(래더 다이어그램 포함)를 정의한 국제 표준이며, OpenPLC는 이를 구현한 오픈소스 런타임/에디터입니다. JWPLC Basic은 OpenPLC Editor v4의 외부 patch 대상으로 검증되어, Arduino 문법 대신 래더 로직으로도 이 보드를 프로그래밍할 수 있습니다 — 산업 현장의 비전문 개발자에게는 이 경로가 더 익숙할 수 있습니다. → 참고: OpenPLC 공식 사이트

기술 특징

  • 산업 I/O의 Arduino화: TCA6424A I2C 익스팬더를 I0_x/Q0_x라는 이름으로 감춰, digitalRead()/digitalWrite()만으로 산업용 입출력을 다룸
  • HMI 상태 체계: TFT는 자동 IDLE 화면과 사용자 정의 USER 화면을 오가며, **ETH·BUS LED가 4단계(회색=미사용/꺼짐=대기/초록=정상/빨강=에러)**로 네트워크·필드버스 상태를 실시간 시각화
  • 패키지 경량화: 범용 ESP32 core 대비 약 72.6% 용량 절감(1.57GB vs 5.72GB), 빌드 시간·bootloader 프리컴파일 채택 여부까지 실측 데이터로 문서화

WIZnet 적용 구조

  • 실제 사용: W5500
  • 역할: JWPLC_Ethernet 라이브러리가 DHCP 유지, RJ45 미연결 시 블로킹 회피, 재연결, SPI 공유 버스 보호를 자동 처리
  • 위치: OpenPLC 연동 시 Modbus TCP 서버(포트 502) 역할을 수행하며, DHCP·FC01(Read Coils)·FC02(Read Discrete Inputs)까지 검증 완료
  • 한계: RS-485(RTU)와 동시 운용 시 TCP는 정상이나 RTU 쪽은 "검토 대기" 상태로 README에 명시돼 있어, 완전한 이중 프로토콜 안정성은 아직 확보되지 않음

📷 [이미지 필요: ETH/BUS LED 상태별 디스플레이 화면] → 원본 이미지 URL: 공식 이미지 미확인

WIZnet Makers 유사 사례

세 사례 모두 MCU 플랫폼(Arduino/ESP32/STM32)과 목적(교육용 데모/통신 노드/보안 게이트웨이)이 제각각인데도 W5500이 "산업용 유선 이더넷 오프로더"라는 동일한 역할로 반복 채택된다는 공통점이 있습니다.

항목본 프로젝트 (JWPLC Basic)openPLC with W5500Modbus TCP ESP32-Siemens 가이드Securing Industrial PLCs
MCUESP32-WROOM-32EArduino UNO / R4ESP32STM32F411RE 외 다수
WIZnet 칩W5500W5500 / W5100W5500W5500
프로토콜Modbus RTU + TCPModbus TCPModbus TCPApache PLC4X / gRPC / TLS
용도완제품 PLC용 BSP교육용 데모통신 노드 튜토리얼보안 게이트웨이
실사용 검증상용 판매 + 버전별 QA 매트릭스미상(개인 교육 채널)미상(유튜브 튜토리얼 재구성)Apache 재단 기여자 프로젝트

표에서 보듯 JWPLC Basic만이 유일하게 실제 판매되는 완제품에 W5500이 통합된 사례이며, 나머지는 데모·튜토리얼·오픈소스 실험 단계에 머물러 있습니다.

비즈니스 가치

외부 고객 관점에서는 상용 PLC 대비 라이선스 비용이 없고, Arduino라는 친숙한 개발 환경에 OpenPLC 래더 로직 경로까지 열려 있어 비전문 개발자도 접근할 수 있습니다. 내부(WIZnet) 관점에서는 ESP32+W5500 조합이 실제 상업 제품(세탁 자동화 설비)에 채택된 레퍼런스라는 점, 그리고 alpha31부터 v2.1.0-alpha.2까지 이어지는 버전별 검증 매트릭스가 QA 성숙도를 보여준다는 점이 눈에 띕니다.

시장 경쟁 구도: "ESP32 PLC" 카테고리에는 이미 Industrial Shields(스페인), NORVI IIOT/NORVI X, Erqos EQSP32CE 같은 기성 완제품 벤더가 존재합니다. 이들은 하드웨어+인클로저를 완제품으로 판매하는 반면, JWPLC Basic은 하드웨어에 오픈소스 Arduino BSP를 결합하고 세탁 산업을 앵커 레퍼런스로 내세우는 방식으로 차별화를 시도합니다.

적용 시나리오: 세탁 설비 자동화(실적 확인됨), Modbus 게이트웨이형 원격 모니터링, OpenPLC 기반 소규모 공정 제어, RS-485 레거시 설비와 이더넷 상위 시스템을 잇는 브리지.

한계 및 개선 방향

JWPLC Basic은 SPI 공유·Modbus 이중 스택 같은 어려운 문제를 정면으로 문서화하고 있다는 점에서 이미 성숙한 엔지니어링 태도를 보여줍니다. 다만 몇 가지 개선 기회가 남아 있습니다.

  • 현재 한계
    • SPI 버스(TFT/W5500/FRAM/SD 공유)로 인한 실시간성 제약이 코드 레벨 규칙으로 남아 있음
    • RS-485(RTU)와 W5500(TCP) 동시 운용은 아직 미해결(RTU 쪽 검토 대기)
    • OTA 미지원 — 현장 배포 후 원격 펌웨어 갱신 불가
    • Flash 4MB + huge_app 파티션으로 앱 최대 3MB 제한, 8/16MB 하드웨어 지원은 로드맵 상 "평가 예정"일 뿐
    • GitHub Star 1 / Fork 0 — 외부 커뮤니티의 코드 리뷰·포크 기반 검증은 확인 불가
  • 개선 방향
    • RTU+TCP 동시 처리 검증을 완료해 필드버스-이더넷 브리지 시나리오를 온전히 지원
    • OTA를 우선순위 있는 다음 목표로 설정해 현장 유지보수 비용 절감
    • 8MB/16MB 하드웨어 지원과 recovery 파티션으로 앱 용량 여유 확보

FAQ

Q1. Arduino를 다뤄본 적 없어도 도입할 수 있나요? 표준 Arduino API(pinMode, digitalRead 등)로 산업 I/O를 다루므로 Arduino 경험이 있으면 진입장벽이 낮습니다. 다만 OpenPLC 래더 로직 경로를 쓰면 Arduino 코드 없이도 프로그래밍이 가능합니다.

Q2. 세탁 산업 외 다른 분야에도 쓸 수 있나요? 네. JW Control 자체가 세탁업뿐 아니라 다양한 산업 응용에 구현 가능하다고 명시하고 있어, 세탁 전용 설계는 아닙니다.

Q3. Modbus RTU와 TCP를 동시에 쓸 수 있나요? 현재는 TCP만 완전히 검증됐고, RTU와의 동시 운용은 README에 "검토 대기"로 남아 있습니다. 둘 중 하나만 쓰는 구성을 우선 고려해야 합니다.

Q4. OTA가 없는데 현장 유지보수는 어떻게 하나요? 현재는 USB 유선 업로드만 지원됩니다. 원격지 배포가 많다면 OTA 로드맵이 확정되기 전까지는 방문 유지보수 계획을 세워야 합니다.

Q5. 상용 PLC(Siemens 등) 대비 총소유비용은 어떤가요? 소프트웨어 라이선스 비용은 없지만, 정량적 BOM·TCO 비교 수치는 이번 리서치에서 확인하지 못했습니다 — 임의 수치를 제시하지 않습니다.


Summary

JWPLC Basic is a custom Arduino board package that lets developers program an ESP32-WROOM-32E-based industrial controller using the Arduino IDE. WIZnet's W5500 handles wired Ethernet offloading, while RS-485/Modbus RTU, a TFT display, and an industrial I/O expander are integrated at the runtime level. What makes this repository notable is that it isn't a hobby project — it's the source code behind a real industrial automation product sold by JW Control, a Peru-based company.

Overview

The generic ESP32 Arduino core weighs in at 5.72GB and forces developers to hand-write the same boilerplate — I2C expander setup, shared SPI bus management, Modbus initialization — every time. JWPLC abstracts all of this behind standard Arduino syntax like pinMode(I0_0, INPUT) and global objects such as JWPLC_Ethernet and JWPLC_Display.

The company behind it is JW Control, a Peru-based industrial automation hardware and firmware company. Co-founder Jeykco Wilfredo Villavicencio Huanila (a mechatronics engineer) leads the effort. Laundry equipment automation is the company's flagship showcase, but its own FAQ page explicitly states the system is implementable across multiple industrial applications, not just laundries, so it isn't a laundry-only design.

Controlador industrial JWPLC Basic 2.0.0 basado en ESP32

Why This Matters

  • Real-world adoption of the repository: Confirmed. JW Control states its boards are assembled in Peru as a domestic product, which keeps spare parts available and backs installations with a one-year warranty. A named commercial product line, JWPLC-Laundry, exists. The co-founder also delivered a talk titled "CAS LEGACY 2025 – Automatización Industrial con JWPLC y Ladder," further evidence of real-world use. → Source: jw-control.com
  • Industry or regulatory necessity: Not confirmed. No specific law or standard appears to have driven this project. The recurring market driver the company cites is avoiding additional licensing costs by using free software — a commercial motive rather than a regulatory one.

Architecture

TFT, W5500, FRAM, and microSD all share a single SPI bus — the core constraint of this design. The documentation is explicit enough to set a rule: don't query SPI peripherals directly inside display callbacks; cache values in loop() and draw from those instead. The team clearly designed around this bottleneck rather than discovering it later.

Technology Background

Hardware TCP/IP Socket Architecture (W5500)

The W5500 handles the entire TCP/IP stack in dedicated hardware, freeing the MCU from packet-processing overhead so it can focus on application logic. It provides up to 8 sockets and a 32KB internal buffer, connecting to the host MCU over a single SPI interface. In JWPLC, this offloading frees ESP32 core cycles for I/O scanning, Modbus handling, and display refreshes. → Reference: WIZnet W5500 Datasheet

Dual Modbus RTU/TCP Stack

Modbus is an industrial-standard protocol that exchanges simple memory maps — holding registers, coils — between master and slave devices. JWPLC supports both RTU over RS-485 and TCP over W5500 (port 502), attempting to cover both fieldbus and Ethernet layers on a single board. That said, running both protocols simultaneously isn't fully validated yet, which says a lot about where this project currently stands.

OpenPLC / IEC 61131-3 Ladder Logic

IEC 61131-3 is the international standard defining PLC programming languages, including ladder diagrams. OpenPLC is an open-source runtime and editor implementing that standard. JWPLC Basic has been validated as an external patch target for OpenPLC Editor v4, letting developers program the board with ladder logic instead of Arduino code — a path that may feel more familiar to non-software industrial engineers. → Reference: OpenPLC Project

Technical Highlights

  • Arduino-ified industrial I/O: The TCA6424A I2C expander is hidden behind names like I0_x/Q0_x, so industrial input/output is just digitalRead()/digitalWrite()
  • HMI state system: The TFT toggles between an automatic IDLE screen and a custom USER screen. ETH and BUS LEDs use four visual states (gray = unavailable, off = idle, green = OK, red = error) to show network and fieldbus health in real time
  • Package footprint optimization: About 72.6% smaller than the generic ESP32 core (1.57GB vs. 5.72GB), with build times and the bootloader precompilation decision both backed by measured data

Where WIZnet Fits

  • Chip used: W5500
  • Role: The JWPLC_Ethernet library automatically handles DHCP maintenance, avoids blocking when no RJ45 cable is connected, manages reconnection, and protects the shared SPI bus
  • Position: When paired with OpenPLC, it acts as a Modbus TCP server (port 502) — validated alongside DHCP, FC01 (Read Coils), and FC02 (Read Discrete Inputs)
  • Limitation: When running alongside RS-485 (RTU) simultaneously, TCP works but RTU is flagged in the README as "pending review," so full dual-protocol stability isn't confirmed yet

📷 [Image needed: Display screen showing ETH/BUS LED states] → Original image URL: Official image not confirmed

Similar Projects on WIZnet Makers

Despite differing MCU platforms (Arduino/ESP32/STM32) and purposes (educational demo/communication node/security gateway), all three share one pattern: W5500 repeatedly gets chosen for the same role — industrial-grade wired Ethernet offloading.

ItemThis Project (JWPLC Basic)openPLC with W5500Modbus TCP ESP32-Siemens GuideSecuring Industrial PLCs
MCUESP32-WROOM-32EArduino UNO / R4ESP32STM32F411RE and others
WIZnet ChipW5500W5500 / W5100W5500W5500
ProtocolModbus RTU + TCPModbus TCPModbus TCPApache PLC4X / gRPC / TLS
PurposeBSP for a commercial PLC productEducational demoCommunication node tutorialSecurity gateway
Real-world validationCommercial sales + version-by-version QA matrixUnconfirmed (individual education channel)Unconfirmed (reconstructed from a YouTube tutorial)Apache Foundation contributor project

As the table shows, JWPLC Basic is the only case here where W5500 is integrated into an actual, commercially sold product — the others remain at the demo, tutorial, or open-source experiment stage.

Business Value

From an external customer's perspective, there's no PLC licensing fee, the Arduino environment is familiar, and the OpenPLC ladder-logic path opens the door to non-specialist developers. From an internal (WIZnet) perspective, the ESP32+W5500 pairing shows up here as a reference case adopted in an actual commercial product (laundry automation equipment), and the version-by-version validation matrix, running from alpha31 through v2.1.0-alpha.2, reflects a mature QA process.

Competitive landscape: The "ESP32 PLC" category already has established commercial vendors — Industrial Shields (Spain), NORVI IIOT/NORVI X, and Erqos EQSP32CE. These sell complete hardware-plus-enclosure products, while JWPLC Basic differentiates by pairing its hardware with an open-source Arduino BSP and anchoring its story around laundry automation as a proven reference deployment.

Use cases: Laundry equipment automation (confirmed in production), Modbus gateway-style remote monitoring, small-scale process control via OpenPLC, and bridging legacy RS-485 equipment to Ethernet-based upstream systems.

Limitations and Future Improvements

JWPLC Basic already shows engineering maturity by documenting hard problems — shared SPI, dual Modbus stacks — head-on rather than glossing over them. Still, a few opportunities for improvement stand out.

  • Current limitations
    • Real-time constraints from the shared SPI bus (TFT/W5500/FRAM/SD) remain a code-level rule rather than a solved problem
    • Simultaneous RS-485 (RTU) and W5500 (TCP) operation is unresolved — RTU is still pending review
    • No OTA support — firmware can't be updated remotely once deployed in the field
    • 4MB flash with the huge_app partition caps applications at 3MB; 8MB/16MB hardware support is only listed as a future evaluation item
    • GitHub shows 1 star / 0 forks — external code review or fork-based validation isn't confirmed
  • Suggested improvements
    • Complete simultaneous RTU+TCP validation to fully support fieldbus-to-Ethernet bridging scenarios
    • Prioritize OTA to reduce field maintenance costs
    • Support 8MB/16MB hardware and a recovery partition to free up application space

FAQ

Q1. Can I adopt this without prior Arduino experience? Since industrial I/O is handled through standard Arduino APIs (pinMode, digitalRead, etc.), some Arduino familiarity lowers the barrier. The OpenPLC ladder-logic path is also available without writing any Arduino code.

Q2. Is this limited to the laundry industry? No. JW Control itself states the system can be implemented across multiple industrial applications, not just laundries, so it isn't a laundry-exclusive design.

Q3. Can I run Modbus RTU and TCP at the same time? Only TCP is fully validated today. Simultaneous operation with RTU is listed as "pending review" in the README, so plan around using one protocol at a time for now.

Q4. Without OTA, how is field maintenance handled? Currently only wired USB upload is supported. If your deployments are remote, plan for on-site maintenance visits until OTA lands on the roadmap.

Q5. How does total cost of ownership compare to commercial PLCs (Siemens, etc.)? There's no software licensing fee, but this research didn't turn up quantified BOM/TCO comparisons — no figures are presented here to avoid speculation.


Documents
  • https://github.com/JW-Control/platform-jwplc

Comments Write