Hardware Setup
DWIN Display
Node-RED Dashboard
ESP32 + MAX485 + Energy Meter
Live HMI Display
Live Gauges
Block Diagram
Circuit Diagram
System Architecture
Complete Wiring
The Energy Monitoring System (EMS) is a complete Industrial IoT solution that monitors electrical parameters of loads in real-time. The system reads data from a Modbus RTU energy meter using an ESP32 microcontroller , transmits data wirelessly via WiFi + MQTT , and visualizes it on a Node-RED dashboard . A local DWIN HMI display shows live readings on-site.
๐ 5 Parameters | ๐ 10s Update Rate | ๐ก WiFi + MQTT | ๐ฅ๏ธ Local HMI | ๐จ Smart Alerts
โ
Modbus RTU over RS485
โ
5 electrical parameters
โ
10-second update rate
โ
IEEE 754 float conversion
โ
DWIN HMI Touch Screen
โ
Real-time value updates
โ
UART @ 115200 baud
โ
5 VP address mapping
โ
WiFi 2.4GHz (STA mode)
โ
MQTT publish/subscribe
โ
Aedes local broker
โ
Auto reconnect
โ
Live circular gauges
โ
Historical line charts
โ
Numeric text display
โ
2-tab layout
โ
Voltage range check
โ
Current overload
โ
Frequency instability
โ
Low power factor
โ
REST GET endpoint
โ
JSON response
โ
CORS enabled
โ
Latest data access
๐๏ธ System Architecture
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ EMS SYSTEM ARCHITECTURE โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโ RS485 โโโโโโโโโโโโโโโโ UART โโโโโโโโโโ โ
โ โ ENERGY METER โโโโโโโโโโโโโโโบโ MAX485 โโโโโโโโโโโโโโบโ ESP32 โ โ
โ โ Modbus Slave โ A+ / B- โ RS485โTTL โ GPIO32,27 โDevKit โ โ
โ โ Slave ID:1 โ โ GPIO33(DE) โ โ โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโ UART1 โ โ โ
โ โ DWIN โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโบโ โ โ
โ โ Display โ GPIO16(RX) GPIO17(TX) @ 115200 โ โ โ
โ โ HMI Touch โ โโโโโฌโโโโโ โ
โ โโโโโโโโโโโโโโโโ โ โ
โ WiFi โ โ
โ 2.4GHz โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโ MQTT:1883 โโโโโโโโโโโโโโโโ LAN โโโโโโโโโโโโ โ
โ โ NODE-RED โโโโโโโโโโโโโโโ AEDES BROKER โโโโโโโโโโ ROUTER โ โ
โ โ Dashboard โ Topic: โ 192.168.1.8 โ โ192.168. โ โ
โ โ :1880/ui โ EMS/UCT โ Port:1883 โ โ 1.1 โ โ
โ โโโโโโโโฌโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โผ โผ โผ โ
โ โโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โGauge โ โ Charts โ โ Alerts โ โ
โ โ UI โ โ Tab View โ โ Popup โ โ
โ โโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
#
Component
Model
Qty
Purpose
1
๐ง ESP32 DevKit
ESP32-WROOM-32
1
Main IoT Controller
2
โก Energy Meter
Modbus RTU Type
1
Measure Electrical Parameters
3
๐ MAX485 Module
RS485 to TTL
1
RS485 Interface
4
๐ฅ๏ธ DWIN Display
HMI Touch Screen
1
Local Real-time Display
5
๐ถ WiFi Router
2.4GHz Router
1
Wireless Network
6
โ๏ธ Power Supply
5V DC Adapter
1
Power for ESP32
7
๐ป PC / Laptop
Linux/Windows
1
Node-RED Host
8
๐ Jumper Wires
M-F Set
Set
Connections
๐ฅ๏ธ DWIN Display โ ESP32
DWIN Pin
ESP32 Pin
GPIO
Signal
TX
RX1 (U1RXD)
GPIO 16
DWIN โ ESP32
RX
TX1 (U1TXD)
GPIO 17
ESP32 โ DWIN
VCC
5V
5V
Power
GND
GND
GND
Ground
๐ MAX485 Module โ ESP32
MAX485 Pin
ESP32 Pin
GPIO
Signal
RO (Receive Out)
Custom RX
GPIO 32
RS485 โ ESP32
DI (Data Input)
Custom TX
GPIO 27
ESP32 โ RS485
DE (Driver Enable)
Control
GPIO 33
TX Enable
RE (Receiver Enable)
Control
GPIO 33
RX Enable (tied to DE)
VCC
5V
5V
Power
GND
GND
GND
Ground
โก MAX485 โ Energy Meter
MAX485
Energy Meter
Description
A+
A+
RS485 Positive Line
B-
B-
RS485 Negative Line
ESP32 DevKit
โโโ GPIO 16 (RX1) โโโโโโโโโโโโโโโ DWIN Display TX
โโโ GPIO 17 (TX1) โโโโโโโโโโโโโโโ DWIN Display RX
โโโ GPIO 32 โโโโโโโโโโโโโโโ MAX485 RO
โโโ GPIO 27 โโโโโโโโโโโโโโโ MAX485 DI
โโโ GPIO 33 โโโโโโโโโโโโโโโ MAX485 DE + RE (tied)
โโโ 5V โโโโโโโโโโโโโโโ DWIN VCC + MAX485 VCC
โโโ GND โโโโโโโโโโโโโโโ DWIN GND + MAX485 GND
MAX485
โโโ A+ โโโโโโโโโโโโโโโโโโโโโโโ Energy Meter A+
โโโ B- โโโโโโโโโโโโโโโโโโโโโโโ Energy Meter B-
Layer
Technology
Version
Purpose
Firmware
Arduino IDE (C++)
2.x
ESP32 Programming
IoT Protocol
MQTT (PubSubClient)
2.8+
Data Publishing
Serial Protocol
Modbus RTU (ModbusMaster)
2.0.1
Meter Reading
Data Format
ArduinoJson
6.x
JSON Serialization
Dashboard
Node-RED
3.x
Visualization
MQTT Broker
Aedes (Node-RED)
Latest
Local Broker
UI Framework
node-red-dashboard
3.x
Gauges & Charts
#include < WiFi.h> // WiFi connection
#include < PubSubClient.h> // MQTT client
#include < ModbusMaster.h> // Modbus RTU master
#include < ArduinoJson.h> // JSON v6+
#include < SoftwareSerial.h> // Modbus UART
#include < HardwareSerial.h> // DWIN UART
๐ก Communication Protocols
1๏ธโฃ Modbus RTU (RS485)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MODBUS RTU CONFIG โ
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโค
โ Baud Rate โ 9600 bps โ
โ Data Bits โ 8 โ
โ Parity โ None โ
โ Stop Bits โ 1 (8N1) โ
โ Slave ID โ 1 โ
โ Function Code โ 0x04 (Read Input) โ
โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MQTT CONFIG โ
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโค
โ Broker โ Aedes (Local) โ
โ Host โ 192.168.1.8 โ
โ Port โ 1883 โ
โ Topic โ EMS/UCT โ
โ QoS โ 0 โ
โ Publish Rate โ Every 10 seconds โ
โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโ
3๏ธโฃ MQTT JSON Payload
{
"Voltage" : 230.5 ,
"Current" : 1.25 ,
"Frequency" : 49.98 ,
"PowerFactor" : 0.95 ,
"Energy" : 0.52
}
๐บ๏ธ Modbus Register Map
Parameter
Register (Hex)
Register (Dec)
Data Type
Unit
โก Voltage
0x15
21
32-bit IEEE Float
V
๐ Current
0x17
23
32-bit IEEE Float
A
ใฐ๏ธ Frequency
0x1B
27
32-bit IEEE Float
Hz
๐ Power Factor
0x19
25
32-bit IEEE Float
PF
๐ Active Energy
0x0E
14
32-bit Float (Swapped)
kWh
๐ฅ๏ธ DWIN VP Address Map
Parameter
VP Address
Unit
Voltage
0x64
V
Frequency
0x65
Hz
Energy
0x66
kWh
Current
0x67
A
Power Factor
0x68
PF
Tab 1 โ โก Live Dashboard
Gauge
Min
Max
Yellow
Red
Unit
Voltage
0
300
200
260
V
Current
0
100
50
80
A
Frequency
45
55
49
51
Hz
Power Factor
0
1
0.7
0.9
PF
Active Power
0
50
20
40
kW
Tab 2 โ ๐ Historical Charts
Chart
Y-Min
Y-Max
Color
Points
Voltage (V)
200
260
#00d4ff ๐ต
60
Current (A)
0
50
#ff6b35 ๐
60
Frequency (Hz)
49
51
#a8ff3e ๐ข
60
Power Factor
0
1
#ff3ecc ๐ฃ
60
Active Power (kW)
0
50
#ffd700 ๐ก
60
Dashboard URL : http://127.0.0.1:1880/ui
HTTP API : http://192.168.1.8:1880/api/ems
Node-RED : http://127.0.0.1:1880
Parameter
Condition
Alert Message
โก Voltage
< 200V or > 260V
Voltage OUT OF RANGE: xxV
๐ Current
> 80A
Current HIGH: xxA
ใฐ๏ธ Frequency
< 49.5Hz or > 50.5Hz
Frequency UNSTABLE: xxHz
๐ Power Factor
< 0.8
Low Power Factor: x.xx
๐ Alerts appear as popup notifications on the dashboard in real-time!
๐ Network Configuration
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ NETWORK TOPOLOGY โ
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโค
โ Device โ IP Address โ Port โ
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
โ WiFi Router โ 192.168.1.1 โ โ โ
โ PC (WiFi) โ 192.168.1.8 โ 1883, 1880 โ
โ ESP32 โ 192.168.1.x โ โ (DHCP) โ
โ MQTT Broker โ 192.168.1.8 โ 1883 โ
โ Node-RED โ 127.0.0.1 โ 1880 โ
โโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโ
โ ๏ธ Important: ESP32 supports 2.4GHz WiFi only โ 5GHz will NOT work!
# Arduino IDE Libraries (Install via Library Manager)
โ
PubSubClient by Nick O' Leary
โ
ModbusMaster by Doc Walker
โ
ArduinoJson v6+ by Benoit Blanchon
# Node-RED Packages
โ
node-red-dashboard
โ
node-red-contrib-aedes
// Update WiFi credentials in code
const char * ssid = " YOUR_WIFI_SSID" ;
const char * password = " YOUR_WIFI_PASSWORD" ;
const char * mqtt_server = " YOUR_PC_IP" ; // e.g. 192.168.1.8
# Upload via Arduino IDE
Board : ESP32 Dev Module
Port : COMx (Windows) or /dev/ttyUSB0 (Linux)
Upload Speed : 115200
Step 2 โ Node-RED Setup
# Install Node-RED (if not installed)
npm install -g node-red
# Start Node-RED
node-red
# Open browser
http://127.0.0.1:1880
โฐ Menu โ Import โ Select file โ Node Red JSON file/nodered_aedes_flow.json โ Import โ Deploy
Step 4 โ View Dashboard
๐ Open browser: http://127.0.0.1:1880/ui
Step 5 โ Verify Serial Monitor
โ
WiFi Connected!
โ
IP Address: 192.168.1.x
โ
MQTT Connected!
โ
Active Power (kW): xx.xx
โ
Publish message: {"Voltage":230.5,...}
๐ฆ Energy Monitoring System/
โโโ ๐ Code/
โ โโโ ๐ EMS_Final_Code.ino # ESP32 Arduino Firmware
โ
โโโ ๐ Document/
โ โโโ ๐ EMS_Documentation.docx # Full Technical Documentation
โ โโโ ๐ EMS_Full_Documentation.docx # English Detailed Doc
โ
โโโ ๐ image/
โ โโโ ๐ผ๏ธ EMS_Block_Diagram.png # System Block Diagram
โ โโโ ๐ผ๏ธ EMS_Circuit_Diagram.jpg # Circuit Wiring Diagram
โ โโโ ๐ผ๏ธ image1.jpg # Node-RED Dashboard
โ โโโ ๐ผ๏ธ image2.jpg # Live Gauges
โ โโโ ๐ผ๏ธ image3.jpg # DWIN Display
โ โโโ ๐ผ๏ธ image4.jpg # Hardware Setup
โ โโโ ๐ผ๏ธ image5.jpg # Energy Meter
โ
โโโ ๐ Node Red JSON file/
โ โโโ ๐ nodered_aedes_flow.json # Node-RED Flow Export
โ
โโโ ๐ README.md # This File โ You are here!
Problem
Cause
Solution
WiFi not connecting
Wrong SSID or 5GHz router
Use 2.4GHz, check credentials
MQTT failed (rc=-2)
Wrong broker IP
Check mqtt_server IP
Modbus no data
Wrong A+/B- wiring
Swap RS485 wires
DWIN blank
Wrong GPIO or baud
Check GPIO 16/17, 115200
Dashboard empty
MQTT disconnected
Redeploy Node-RED flow
Embedded Systems & IoT Engineer
B.Tech ECE โ AKTU Lucknow (2025) | CGPA: 7.4
UniConverge Technologies, Noida (Intern)
Skills: C C++ ESP32 STM32 FreeRTOS MQTT BLE Modbus IoT
๐ RoboRace 1st Prize ย |ย ๐ Published Researcher ย |ย ๐ข Open to Work
MIT License โ Free to use, modify, and distribute with attribution.
Copyright (c) 2025 Ramsudarshan Maurya
โญ If this project helped you, please give it a star!
Made with โค๏ธ by Ramsudarshan Maurya
ESP32 + Modbus RTU + MQTT + Node-RED = Complete EMS Solution โก