Modbus_server_slave_ESP32
ESP32'en fungerer som en dual-mode Modbus gateway med to separate RS-485 interfaces:
01 — 이 프로젝트는 무엇인가?
이 프로젝트는 ESP32-WROOM-32로 만든 산업용 Modbus RTU 게이트웨이입니다. 단순한 센서 읽기 장치가 아닙니다.
RS-485 포트를 두 개 가지고 있어, 한쪽(UART0)으로는 SCADA/HMI에서 명령을 받는 Modbus Slave, 다른 쪽(UART1)으로는 현장 센서와 I/O 모듈을 직접 읽고 쓰는 Modbus Master 역할을 동시에 합니다. 여기에 IEC 61131-3 ST(Structured Text) 로직 프로그래밍, HTTP REST API, Telnet CLI까지 갖춘 상당히 완성도 높은 시스템입니다.
SCADA / HMI / PLC
↕ UART0 (Modbus Slave — 명령 수신)
ESP32 게이트웨이
↕ UART1 (Modbus Master — 현장 장치 제어)
온도센서 / 릴레이보드 / 아날로그 I/O 모듈v6.0까지는 이 모든 통신이 Wi-Fi를 통해 이뤄졌습니다.
02 — 왜 Wi-Fi만으로는 부족했나?
Wi-Fi만으로는 부족했다 — ESP32 Modbus 게이트웨이에 W5500 유선 이더넷을 추가한 이유
태그: Modbus RTU ESP32 W5500 Ethernet 산업자동화 SCADA IEC 61131-3 듀얼 네트워크
Wi-Fi 기반으로 잘 동작하던 산업용 Modbus 게이트웨이.
그런데 공장 현장에 실제로 설치하려고 보니 — Wi-Fi만으로는 신뢰할 수 없었다.
W5500 유선 이더넷을 두 번째 네트워크 인터페이스로 추가하면서 무엇이 달라졌나?
💡 이 커밋이 나온 배경입니다.
공장, 창고, 자동화 설비는 Wi-Fi에게 가혹한 환경입니다.
인버터와 모터에서 나오는 전자기 노이즈가 2.4GHz 대역을 방해하고, 금속 프레임과 배전반이 전파를 차단합니다. Wi-Fi 클라이언트는 주기적으로 재연결이 필요하고, 슬립 상태에서 복귀할 때 지연이 생깁니다. SCADA 시스템이 폴링하는 사이 연결이 끊기면 데이터가 유실됩니다.
산업 현장에서 "가끔 끊기는" 통신은 허용되지 않습니다.
이 문제를 해결하기 위해 v6.1.0에서 WIZnet W5500 SPI 이더넷을 두 번째 네트워크 인터페이스로 추가했습니다. 핵심은 Wi-Fi를 제거한 게 아니라는 점입니다 — 둘을 동시에 운영합니다.
03 — 무엇이 달라졌나? (커밋 핵심 변경사항)
이 커밋(0694f9c) 하나로 변경된 내용의 규모: 20개 파일, +1,382줄 추가
응용 관점에서 중요한 변화만 정리하면 이렇습니다.
듀얼 네트워크 인터페이스 — 동시 운영
이전까지 이 게이트웨이의 네트워크 접속 경로는 Wi-Fi 하나뿐이었습니다. 이제 Wi-Fi와 W5500 이더넷이 동시에 살아있습니다. ESP32의 TCP/IP 스택(lwIP)이 INADDR_ANY로 두 인터페이스를 모두 바인딩하기 때문에, SCADA가 이더넷으로 접속하든 Wi-Fi로 접속하든 같은 HTTP REST API와 Telnet CLI에 도달합니다.
실제 운영 시나리오: 이더넷 케이블이 연결된 환경에서는 이더넷으로 안정적으로 통신하고, 케이블 없는 환경이나 설정 중에는 Wi-Fi로 접근합니다. 두 경로가 백업 역할을 합니다.
새로운 CLI 명령
# 이더넷 설정
set ethernet enable
set ethernet dhcp on
set ethernet ip 192.168.1.101
set ethernet gateway 192.168.1.1
set ethernet netmask 255.255.255.0
# 상태 확인 (링크 속도, 듀플렉스, IP, MAC 주소)
show ethernet설정 스키마 업그레이드 (v10 → v11)
기존 Wi-Fi 설정을 손대지 않고 EthernetConfig 구조체를 NetworkConfig 안에 추가했습니다. 기존 장치에서 펌웨어를 업데이트해도 Wi-Fi 설정이 그대로 유지되는 이유입니다.
부팅 안전성 처리
ESP32의 GPIO 12는 부팅 시 플래시 전압을 결정하는 스트래핑 핀입니다. W5500의 SPI MISO가 GPIO 12에 연결되는데, 부팅 중 W5500이 MISO를 HIGH로 끌어올리면 플래시가 손상될 수 있습니다. 이를 막기 위해 W5500의 RST 핀(GPIO 33)을 부팅 중 LOW로 유지해 W5500을 리셋 상태로 잡아둡니다. 코드 한 줄이 아닌, 하드웨어 안전성까지 설계에 반영한 부분입니다.
04 — 핵심 컴포넌트와 선택 이유
🔷 ESP32-WROOM-32 — 듀얼코어 산업용 MCU
240MHz 듀얼코어로 RS-485 통신 두 채널, ST 로직 실행, Wi-Fi, 이더넷을 동시에 처리합니다. FreeRTOS 기반으로 각 기능이 독립적인 태스크로 분리되어 있어 서로 간섭하지 않습니다.
🌐 WIZnet W5500 — SPI 하드웨어 이더넷
TCP/IP 스택이 칩 내부에 하드와이어드(hardwired)로 구현되어 있습니다. ESP32는 SPI로 소켓 명령만 내리면 됩니다. Wi-Fi와 달리 재연결 로직이 필요 없고, 전자기 노이즈에 영향을 받지 않습니다. GPIO 12/13/14/23(SPI) + GPIO 33(RST) + GPIO 34(INT) 핀 구성으로 연결됩니다.
📡 RS-485 듀얼 인터페이스 — Modbus RTU 현장 버스
UART0(Slave)과 UART1(Master)이 완전히 분리된 물리 채널로 동작합니다. 두 포트를 동시에 운영해도 서로 간섭이 없습니다. 최대 1,200m 거리, 32개 장치(리피터 사용 시 247개)를 지원합니다.
🧠 ST Logic (IEC 61131-3) — 온보드 PLC 로직
ESP32 안에 구조화 텍스트(Structured Text) 프로그램 4개를 올릴 수 있습니다. 10ms 고정 주기로 실행되며, Modbus 레지스터를 읽어 판단하고 릴레이를 제어하는 로직을 별도 PLC 없이 ESP32 안에서 처리합니다. 외부 SCADA가 없어도 자율적으로 동작할 수 있는 이유입니다.
05 — Wi-Fi vs W5500 이더넷 : 산업 현장에서의 실질적 차이
| 비교 항목 | W5500 유선 이더넷 ✅ | ESP32 내장 Wi-Fi |
|---|---|---|
| 연결 안정성 | 24/7 끊김 없음 | 재연결 오버헤드 발생 |
| 전자기 노이즈 영향 | 없음 (케이블 통신) | 인버터/모터 간섭 취약 |
| 금속 배전반 환경 | 정상 동작 | 전파 차단 문제 |
| TCP/IP 처리 | W5500 하드웨어에서 | ESP32 MCU가 직접 처리 |
| SCADA 폴링 신뢰성 | 폴링 누락 없음 | 재연결 중 폴링 누락 가능 |
| 설치 복잡도 | 케이블 배선 필요 ⚠️ | 케이블 불필요 |
| 공장 표준 | 산업 이더넷 표준 | 일반적이지 않음 |
이 프로젝트가 Wi-Fi를 제거하지 않고 두 인터페이스를 동시에 유지한 것은 실용적인 선택입니다. 이더넷 케이블이 있는 환경에서는 이더넷으로, 없는 환경(이동 장비, 설정 접근)에서는 Wi-Fi로 — 상황에 맞게 씁니다.
06 — 이 시스템으로 무엇을 할 수 있나? (응용 시나리오 5가지)
01. 스마트 공장 — SCADA ↔ 현장 센서 게이트웨이
SCADA는 이더넷을 통해 ESP32에 Modbus 명령을 보내고, ESP32는 RS-485로 연결된 온도·압력·유량 센서를 폴링해 SCADA에 돌려줍니다. ST 로직이 임계값을 넘으면 현장 릴레이를 자동으로 동작시킵니다. SCADA가 명령하기 전에 이미 대응이 완료됩니다. #스마트공장 #SCADA #RS-485 #자동대응
02. 빌딩 자동화 — 멀티존 공조·조명 제어
RS-485 버스에 여러 층의 VAV(가변 풍량) 제어기, 조명 디머, 에너지 미터를 연결합니다. ESP32가 Modbus Master로 각 장치를 폴링하고, HTTP REST API로 BMS(빌딩 관리 시스템)에 데이터를 전달합니다. Node-RED나 Home Assistant와 직접 연동이 가능합니다. #빌딩자동화 #BMS #에너지관리 #Node-RED
03. 에너지 관리 — 전력 미터 데이터 집계
RS-485로 연결된 복수의 전력 미터(전압, 전류, 전력, 역률)를 ESP32가 주기적으로 폴링합니다. ST 로직에서 합산·평균을 계산하고, Modbus Slave 인터페이스로 상위 에너지 관리 시스템에 집계 데이터를 제공합니다. 현장에 별도 PC 없이도 완성됩니다. #에너지관리 #전력모니터링 #Modbus집계
04. 물류·냉동 창고 — 다점 온도 로깅 + 원격 알람
RS-485 버스에 복수의 온도 센서 모듈을 연결하고, ST 로직이 임계값 초과 시 릴레이로 경보를 울립니다. 이더넷으로 연결된 사무실 PC에서 실시간 온도 데이터를 HTTP REST API로 받아 대시보드에 표시합니다. HACCP 기록용 데이터도 자동 생성됩니다. #냉동창고 #HACCP #다점온도 #원격알람
05. 레거시 장비 현대화 — 구형 PLC → 클라우드 연결 브리지
RS-485 Modbus만 지원하는 구형 PLC나 인버터는 직접 클라우드 연결이 불가능합니다. ESP32가 Modbus Master로 구형 장비의 데이터를 읽고, HTTP REST API나 MQTT로 현대적인 클라우드 플랫폼에 전달하는 프로토콜 변환 브리지 역할을 합니다. 구형 장비 교체 없이 스마트화가 가능합니다. #레거시현대화 #프로토콜변환 #구형PLC #IoT브리지
07 — 듀얼 네트워크가 가능하게 하는 것들
Wi-Fi + W5500 이더넷이 동시에 살아있다는 것은 단순히 "두 가지 방법으로 접속 가능"이 아닙니다. 운영 방식 자체가 달라집니다.
| 시나리오 | 이더넷 역할 | Wi-Fi 역할 |
|---|---|---|
| 공장 운영 중 | SCADA 폴링 전용 (안정적) | 엔지니어 노트북 접속용 |
| 현장 설치 시 | 케이블 연결 전 | 스마트폰으로 초기 설정 |
| 케이블 장애 시 | — | 백업 통신 경로 |
| 멀티 VLAN 환경 | 공장 네트워크 VLAN | 관리 네트워크 VLAN |
08 — 확장 경로
| 단계 | 확장 내용 | 방법 |
|---|---|---|
| STEP 01 | 더 많은 현장 장치 | UART1에 추가 Modbus Slave 연결 (최대 247개) |
| STEP 02 | 클라우드 연동 | HTTP REST API → Node-RED → MQTT 브로커 |
| STEP 03 | 이중화 전원 모니터링 | ST 로직에 전력 미터 폴링 + 이상 감지 추가 |
| STEP 04 | OPC-UA 변환 | Modbus → OPC-UA 게이트웨이로 확장 |
| STEP 05 | 다중 게이트웨이 | 여러 ESP32 유닛을 중앙 SCADA에 이더넷 스타 구조로 연결 |
| STEP 06 | 엣지 컴퓨팅 | ST 로직 프로그램 4개로 현장에서 1차 데이터 처리 후 집계 전송 |
결론
Wi-Fi는 충분히 편리하지만, 산업 현장은 "편리함"보다 "신뢰성"을 요구합니다.
이 커밋이 말하는 것은 기술적 업그레이드 그 이상입니다. Wi-Fi로 개발하고 검증한 시스템을 실제 현장에 배포하기 위해 필요한 변화 — 바로 유선 이더넷의 추가입니다.
W5500 덕분에 이 게이트웨이는 이제 개발자의 사무실 Wi-Fi 환경을 벗어나, 전자기 노이즈와 금속 환경이 가득한 공장 현장에서도 동일하게 동작합니다.
- ✅ Wi-Fi + 이더넷 동시 운영 (백업 경로 확보)
- ✅ 24/7 끊김 없는 SCADA 연결
- ✅ 전자기 노이즈 환경 대응
- ✅ 부팅 안전성까지 설계에 반영
- ✅ 기존 Wi-Fi 설정 그대로 유지 (스키마 마이그레이션)
