---
title: "Modbus_server_slave_ESP32"
url: "https://maker.wiznet.io/Lihan__/projects/modbus-server-slave-esp32/"
markdown_url: "https://maker.wiznet.io/Lihan__/projects/modbus-server-slave-esp32/md"
type: "UCC: User Created Content"
author: "Jangreenlarsen"
author_url: "https://github.com/Jangreenlarsen/Modbus_server_slave_ESP32"
editor: "WIZnet"
editor_url: "https://maker.wiznet.io/"
original_author: "Jangreenlarsen"
original_url: "https://github.com/Jangreenlarsen/Modbus_server_slave_ESP32"
published: "2026-02-26"
language: "en"
likes: 0
views: 413
comments: 0
source: "WIZnet Makers (https://maker.wiznet.io/)"
---

# Modbus_server_slave_ESP32

> ESP32'en fungerer som en dual-mode Modbus gateway med to separate RS-485 interfaces:

Original author: Jangreenlarsen (source: https://github.com/Jangreenlarsen/Modbus_server_slave_ESP32)

## Article

---

### 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까지 갖춘 상당히 완성도 높은 시스템입니다.

```plaintext
SCADA / HMI / PLC
    ↕  UART0 (Modbus Slave — 명령 수신)
  ESP32 게이트웨이
    ↕  UART1 (Modbus Master — 현장 장치 제어)
온도센서 / 릴레이보드 / 아날로그 I/O 모듈
```

v6.0까지는 이 모든 통신이 **Wi-Fi**를 통해 이뤄졌습니다.

---

### 02 — 왜 Wi-Fi만으로는 부족했나?

![](https://maker.wiznet.io/upload/ckeditor5/806164635%5F1772526355%2Epng)

## 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 명령

```plaintext
# 이더넷 설정
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 설정 그대로 유지 (스키마 마이그레이션)

---

Source: https://maker.wiznet.io/Lihan__/projects/modbus-server-slave-esp32/
