REMS-RTA
REMS-RTA
Smart Home Environment Control System with ESP32 + W5500 (REMS-RTA)
A remote environment monitoring and control system using the W5500 web server
Overview
REMS-RTA is a smart home system for remotely monitoring and controlling a living environment — temperature, heating, cooling, and more.
It consists of two boards:
- REMS board (Remote Environment Management System) — the main controller that monitors the environment and issues commands. The ESP32 + W5500 combination has proven to be the most stable configuration.
- RTA board (REMS Testing Application) — an Arduino Nano-based test board that simulates real household loads such as a furnace and air conditioner.
GitHub: damhahlat/REMS-RTA
System Architecture
Why W5500? — The Key Hardware Choice
Testing several microcontroller combinations showed that ESP32 + W5500 was the most reliable. Here's why.
Limitations of ESP32's built-in Wi-Fi alone
- Reconnection instability — dropped connections require complex recovery logic, risking missed commands
- Software TCP/IP overhead — the ESP32 CPU must handle both application logic and the network stack simultaneously
- 2.4 GHz interference — shared with Wi-Fi, Bluetooth, and other household devices
How the W5500 solves this
The W5500 uses a Hardwired TCP/IP architecture. The entire TCP/IP stack is implemented in dedicated hardware (iMCU), so the ESP32 only needs to issue socket-level commands — no stack management required.
| ESP32 Wi-Fi only | ESP32 + W5500 | |
|---|---|---|
| TCP/IP processing | Software (CPU load) | Hardwired (no CPU load) |
| Connection stability | Wireless, reconnect risk | Wired, physically stable |
| Simultaneous sockets | Limited | 8 independent sockets |
| MCU compatibility | Built-in only | SPI — works with any MCU |
In practice, when a browser sends a heating or cooling command, the W5500 independently receives and processes the HTTP request. The ESP32 is free to focus entirely on sensing and control logic — no network overhead. And because it's wired Ethernet, the system works regardless of Wi-Fi congestion in the home.
How It Works
The REMS board detects environmental changes and outputs command strings over serial:
"HEAT ON" / "HEAT OFF" → heating control
"COOL ON" / "COOL OFF" → cooling controlThe RTA board receives these and activates the corresponding load:
A → Heat ON B → Heat OFF
C → Cool ON D → Cool OFFThe Python Bridge
Direct pin-to-pin communication between the REMS and RTA boards had signal recognition issues, so a Python script currently acts as the bridge.
It does three things: auto-compile and upload firmware to both boards via arduino-cli, read serial messages from the REMS board, and forward translated commands to the RTA board.
rems2Command = str(REMS2.readline()) if "HEAT ON" in rems2Command: RTA2.write(bytes("A", "utf-8")) elif "HEAT OFF" in rems2Command: RTA2.write(bytes("B", "utf-8")) if "COOL ON" in rems2Command: RTA2.write(bytes("C", "utf-8")) elif "COOL OFF" in rems2Command: RTA2.write(bytes("D", "utf-8"))This adds some latency and is a temporary workaround, but it keeps the system functional while a direct hardware solution is developed.
Hardware
| Board | Role | Notes |
|---|---|---|
| ESP32 + W5500 | REMS main controller | Most stable combination |
| Arduino Mega | Alternative REMS board | Tested |
| Arduino Nano | RTA test board | Load simulation |
Use Cases
Smart home HVAC automation, home environment monitoring, IoT control system prototyping, and W5500-based web server reference implementations.
Current Status
This project is under active development. The W5500 web server interface is already stable. The next goal is replacing the Python bridge with direct board-to-board communication — making it a fully self-contained embedded system.
