esp-now-mqtt-gateway
A Gateway that bridges between MQTT and ESP-NOW
PROJECT DESCRIPTION
이 프로젝트는 ESP-NOW 무선 장치와 MQTT 기반 IoT 시스템을 연결하는 브리지 프로젝트입니다. ESP32-S3와 WIZnet W5500을 이용해 저전력 센서 데이터를 유선 MQTT 네트워크로 전달하고, MQTT 명령을 다시 ESP-NOW 장치로 중계합니다.
ESP-NOW는 ESP32 계열 디바이스끼리 Wi-Fi 라우터 없이 직접 데이터를 주고받을 수 있는 무선 통신 방식입니다. 센서 노드, 배터리 기반 장치, 간단한 원격 제어 장치처럼 가볍고 빠른 무선 통신이 필요한 환경에서 활용하기 좋습니다. 하지만 ESP-NOW만으로는 MQTT Broker, Grafana, Web Dashboard, Home Assistant 같은 IP 기반 IoT 시스템과 직접 연동하기 어렵습니다.
이 프로젝트는 그 사이를 연결하는 게이트웨이 역할을 합니다. ESP32-S3가 ESP-NOW 디바이스들과 무선으로 통신하고, WIZnet W5500 Ethernet 모듈을 통해 MQTT Broker와 유선 네트워크로 연결됩니다. 즉, ESP-NOW 센서망의 데이터를 MQTT 네트워크로 전달하고, 반대로 MQTT 명령을 ESP-NOW 디바이스로 전달하는 구조입니다.
특히 이 프로젝트는 단순히 ESP32가 MQTT에 접속하는 예제가 아니라, 일반 기기와 절전 모드 기기를 구분해 동작하는 게이트웨이 구조를 제공합니다. 일반 기기는 일반 MQTT 클라이언트처럼 게이트웨이를 통해 직접 메시지를 주고받고, 절전 모드 기기는 주기적으로 깨어나 데이터를 보내거나 명령을 받아가는 방식으로 동작합니다.
이를 통해 배터리 기반 센서 노드와 상시 연결이 필요한 IoT 서버 시스템을 함께 운영할 수 있습니다.
How WIZnet W5500 is Used
이 프로젝트에서 WIZnet W5500은 MQTT Broker와 안정적으로 연결하기 위한 Ethernet 인터페이스로 사용됩니다.
일반적인 ESP32 IoT 프로젝트는 Wi-Fi를 통해 MQTT Broker에 접속하는 경우가 많습니다. 하지만 게이트웨이 장치는 여러 ESP-NOW 디바이스의 데이터를 모아서 서버로 전달하는 중심 노드이기 때문에, 네트워크 연결 안정성이 중요합니다. 이때 W5500 기반 유선 Ethernet을 사용하면 Wi-Fi 신호 품질, 무선 간섭, 공유기 거리 문제에 덜 영향을 받는 게이트웨이 구성이 가능합니다.
W5500은 Hardwired TCP/IP Stack을 내장한 Ethernet Controller로, SPI 인터페이스를 통해 외부 MCU에 Ethernet 연결을 제공할 수 있습니다. 또한 10/100 Ethernet MAC과 PHY가 포함되어 있어 소형 MCU 기반 시스템에서도 유선 네트워크 기능을 비교적 간단하게 구현할 수 있습니다.
즉, 이 프로젝트에서 ESP32-S3는 ESP-NOW 무선 네트워크를 처리하고, W5500은 MQTT Broker와 연결되는 유선 IP 네트워크를 담당합니다. 두 통신 영역을 분리함으로써 ESP-NOW 기반 로컬 센서망과 MQTT 기반 서버 시스템을 안정적으로 연결할 수 있습니다.
Key Features
1. ESP-NOW to MQTT Bridge
이 프로젝트의 핵심 기능은 ESP-NOW 메시지와 MQTT 메시지를 서로 변환하는 것입니다.
ESP-NOW 디바이스가 센서 데이터를 보내면 게이트웨이는 해당 데이터를 MQTT Topic으로 전달합니다. 반대로 MQTT Broker에서 특정 Topic으로 명령이 들어오면, 게이트웨이는 이를 ESP-NOW 디바이스로 전달합니다.
이를 통해 ESP-NOW 디바이스를 일반적인 MQTT IoT 시스템 안에 포함시킬 수 있습니다.
2. Normal Device and Sleepy Device Support
프로젝트는 ESP-NOW 디바이스를 Normal Device와 Sleepy Device로 구분합니다.
Normal Device는 항상 깨어 있는 장치에 적합합니다. 이 장치는 게이트웨이를 통해 MQTT 클라이언트처럼 직접 데이터를 주고받을 수 있습니다.
Sleepy Device는 배터리 기반 저전력 장치에 적합합니다. 이 장치는 주기적으로 깨어나 데이터를 전송하고, 필요한 경우 게이트웨이에 저장된 명령을 받아갑니다. Sleepy Device가 보낸 데이터는 MQTT의 Retained Message 형태로 저장될 수 있고, 명령 역시 디바이스가 요청할 때까지 게이트웨이에 보관되는 구조입니다.
이 방식은 배터리 센서 노드나 저전력 IoT 장치에 유리합니다.
3. MQTT Broker Integration
게이트웨이는 MQTT Broker에 연결되어 ESP-NOW 디바이스의 데이터를 Topic 기반으로 전달합니다.
MQTT를 사용하면 Home Assistant, Node-RED, Grafana, Prometheus, 자체 서버, 클라우드 IoT 플랫폼 등 다양한 시스템과 쉽게 연동할 수 있습니다.
특히 이 프로젝트는 ESP-NOW 장치를 단순 독립형 무선 장치로 두는 것이 아니라, 기존 MQTT 기반 IoT 인프라 안으로 편입시키는 역할을 합니다.
4. Admin Dashboard Web App
https://esp-commander.netlify.app/
이 프로젝트는 게이트웨이를 설정하기 위한 Admin Dashboard Web App을 제공합니다.
이를 통해 사용자는 게이트웨이 설정, 디바이스 관리, MQTT 관련 설정 등을 웹 기반으로 다룰 수 있습니다. 단순 펌웨어 프로젝트가 아니라, 실제 운영을 고려한 관리 인터페이스가 포함되어 있다는 점에서 완성도가 높습니다.
5. Push Notification and Dashboard Extension
ESP-NOW 디바이스는 게이트웨이를 통해 PushNotifier를 사용해 알림을 보낼 수 있습니다. 또한 UI Dashboard로 EspCommander를 사용할 수 있도록 안내되어 있습니다.
센서값 수집뿐만 아니라 알림, 원격 명령, 대시보드 표시까지 연결할 수 있기 때문에 스마트홈, 설비 모니터링, 원격 센서 관리 시스템으로 확장하기 좋습니다.
6. Grafana Cloud Prometheus and OpenTelemetry Support
프로젝트 설명에는 디바이스가 OpenTelemetry 형식으로 Grafana Cloud Prometheus 인스턴스에 readings를 저장할 수 있다고 되어 있습니다.
이는 단순 MQTT 메시지 송수신을 넘어, 센서 데이터를 모니터링 시스템과 연결할 수 있다는 의미입니다. 온도, 습도, 전력, 장비 상태, 배터리 상태 같은 데이터를 수집해 장기적으로 시각화하거나 분석하는 데 활용할 수 있습니다.
7. Wake-on-LAN Packet Support
ESP-NOW 디바이스는 특정 MAC 주소로 Wake-on-LAN 패킷을 보낼 수도 있습니다.
이 기능을 활용하면 ESP-NOW 기반 버튼이나 센서 이벤트를 통해 PC, 서버, NAS, 네트워크 장비를 깨우는 자동화 시나리오를 만들 수 있습니다.
System Architecture
전체 시스템 구조는 다음과 같이 볼 수 있습니다.
ESP-NOW 디바이스가 센서 데이터 또는 명령 요청을 게이트웨이로 전송합니다.
ESP32-S3 기반 게이트웨이는 ESP-NOW 메시지를 수신합니다.
게이트웨이는 W5500 Ethernet을 통해 MQTT Broker에 연결됩니다.
ESP-NOW에서 받은 데이터는 MQTT Topic으로 발행됩니다.
MQTT Broker에서 들어온 명령은 게이트웨이에 의해 ESP-NOW 디바이스로 전달됩니다.
Sleepy Device의 경우 명령이 즉시 전달되지 않고, 디바이스가 깨어나 요청할 때까지 게이트웨이에 저장됩니다.
Web App을 통해 게이트웨이 설정과 장치 관리를 수행할 수 있습니다.
이 구조는 “무선 저전력 센서망”과 “유선 MQTT 네트워크”를 연결하는 하이브리드 IoT 게이트웨이라고 볼 수 있습니다.
Web App
Application Scenarios
Smart Home Sensor Gateway
ESP-NOW 기반 온도, 습도, 조도, 모션 센서 데이터를 MQTT로 전달하여 Home Assistant나 Node-RED와 연동할 수 있습니다.
Wi-Fi에 직접 접속하기 어려운 저전력 센서 노드는 ESP-NOW로 데이터를 보내고, 게이트웨이는 W5500 Ethernet을 통해 안정적으로 MQTT Broker에 데이터를 전달합니다.
Industrial Monitoring
공장이나 설비 환경에서는 센서 노드가 분산되어 있는 경우가 많습니다. 각 센서 노드는 ESP-NOW로 데이터를 전송하고, 게이트웨이는 Ethernet으로 중앙 서버에 데이터를 전달할 수 있습니다.
W5500 기반 유선 Ethernet을 사용하면 게이트웨이의 네트워크 안정성을 높일 수 있어, 설비 상태 모니터링이나 경보 시스템에 활용하기 좋습니다.
Battery-Powered Sensor Network
Sleepy Device 구조는 배터리 기반 센서에 적합합니다.
센서 노드는 대부분의 시간 동안 절전 상태로 있다가, 일정 주기마다 깨어나 데이터를 전송하고 다시 절전 상태로 들어갈 수 있습니다. 게이트웨이는 이 데이터를 MQTT Retained Message로 유지하거나, 디바이스가 요청할 때 명령을 전달할 수 있습니다.
Remote Control and Automation
MQTT 명령을 ESP-NOW 디바이스로 전달할 수 있기 때문에 릴레이, LED, 모터, 알림 장치 같은 원격 제어 시스템을 구성할 수 있습니다.
또한 Wake-on-LAN 기능을 활용하면 ESP-NOW 기반 버튼이나 이벤트를 통해 NAS, PC, 서버를 원격으로 켜는 자동화도 가능합니다.
Local IoT Infrastructure
이 프로젝트는 Wi-Fi 기반 IoT 장치가 많아질 때 발생하는 네트워크 혼잡 문제를 줄이는 데도 활용할 수 있습니다.
개별 센서 노드는 ESP-NOW로 게이트웨이에만 연결하고, 게이트웨이 하나만 Ethernet으로 MQTT Broker에 연결되기 때문에 네트워크 구조가 단순해집니다.
Why This Project Matters
ESP-NOW MQTT Gateway는 W5500을 단순한 Ethernet 예제용 모듈로 사용하는 것이 아니라, ESP-NOW 무선 센서망과 MQTT 서버 인프라를 연결하는 핵심 네트워크 인터페이스로 사용한다는 점에서 의미가 있습니다.
ESP-NOW는 빠르고 가벼운 로컬 무선 통신에 강점이 있지만, MQTT나 클라우드 시스템과 직접 연결하려면 별도의 브리지 장치가 필요합니다. 이 프로젝트는 ESP32-S3와 W5500을 이용해 그 브리지 역할을 구현합니다.
특히 W5500 Ethernet을 사용함으로써 게이트웨이의 외부 네트워크 연결을 Wi-Fi에 의존하지 않게 만들 수 있습니다. 이는 스마트홈, 산업용 센서망, 창고 모니터링, 농업 자동화, 설비 경보 시스템처럼 장기간 안정적으로 동작해야 하는 환경에서 장점이 됩니다.
또한 Normal Device와 Sleepy Device를 모두 고려한 구조는 실제 IoT 환경에 가깝습니다. 항상 켜져 있는 장치와 배터리 기반 저전력 장치를 함께 다룰 수 있기 때문에, 다양한 센서 네트워크 구성에 적용할 수 있습니다.
Conclusion
ESP-NOW MQTT Gateway는 ESP-NOW 기반 무선 디바이스와 MQTT 기반 IoT 네트워크를 연결하는 오픈소스 게이트웨이 프로젝트입니다.
이 프로젝트에서 WIZnet W5500은 ESP32-S3 게이트웨이에 안정적인 유선 Ethernet 연결을 제공하며, MQTT Broker와의 통신을 담당합니다. ESP-NOW는 로컬 무선 디바이스 통신을 담당하고, W5500은 외부 IP 네트워크 연결을 담당하는 구조입니다.
이를 통해 저전력 무선 센서망, 스마트홈 자동화, 산업용 모니터링, 원격 제어 시스템을 MQTT 기반 인프라와 연결할 수 있습니다. 특히 Wi-Fi 대신 유선 Ethernet을 사용하는 게이트웨이 구조는 장시간 안정적으로 운영되는 IoT 시스템에 적합합니다.
ESP-NOW MQTT Gateway는 WIZnet W5500이 단순 네트워크 연결 부품을 넘어, 무선 센서망과 유선 IoT 인프라를 연결하는 하이브리드 게이트웨이의 핵심 요소로 활용될 수 있음을 보여주는 좋은 사례입니다.
