
ESP32 Mesh Gateway v1D
atechofficials/espnow-mesh-system
Lightweight ESP-NOW mesh network for smart home automation — ESP32-S3 gateway with live web dashboard, button-press node pairing, and extensible per-node settings.

Lightweight ESP-NOW mesh network for smart home automation — ESP32-S3 gateway with live web dashboard, button-press node pairing, and extensible per-node settings.
ESP32 Mesh Gateway v1C is an open-source printed circuit board by atechofficials, from the atechofficials/espnow-mesh-system repository on GitHub, published under the MIT licence. It is a 2-layer board of 70 × 50 mm with 32 parts on 25 nets, routed with 83 tracks and 0 vias.
It is built around the BME280. Its parts include 4 capacitors, 3 ICs, 2 resistors, 2 connectors and 1 switch. It belongs with the home automation and IoT boards and the ESP32 and RISC-V boards of this library.
A local-first ESP32 smart-home system for wireless sensing and control.
This project lets you build a small home mesh using ESP32-based nodes and a central ESP32-S3 gateway.
The gateway connects to your Wi-Fi, hosts a browser-based dashboard, can optionally expose its own built-in SPI room sensor with runtime BMP280/BME280 auto-detection, communicates with nearby nodes over ESP-NOW, can fall back to its own Offline Mode AP when your router is unavailable, optionally bridges the system to a local MQTT broker, publishes Home Assistant MQTT auto-discovery, and uses a companion ESP32-C3 coprocessor to handle gateway-managed Node OTA updates and future helper tasks.
That means you can:
No cloud account. No subscription. No internet dependency for normal use.
Open the gateway's IP address in your browser to view live sensor readings from all paired nodes.
Turn relays on and off directly from the dashboard.
Put a node into pairing mode and the gateway can discover and register it automatically. Fresh, unrenamed nodes now advertise with the last 4 characters of their MAC address appended to the default node name, making it easier to tell identical boards apart before you rename them from the dashboard. The current release line also tightens beacon/discovery timing so pairing candidates appear faster and stale "available to pair" entries clear sooner after a node powers down.
Change node settings such as:
Upload compatible sensor-node, actuator-node, or hybrid-node firmware from the gateway web interface and let the gateway update the selected node without connecting that node to your home Wi-Fi. The gateway now validates both the node role and the node hardware configuration ID before delivery begins.
If your router is unavailable, the gateway can now switch to an ESP32-S3-hosted Offline Mode AP so the dashboard stays reachable without internet or home-network access. You can also choose manual offline mode during setup and edit the offline AP credentials later from the dashboard.
If you enable MQTT in the gateway settings, the gateway publishes Home Assistant MQTT discovery for itself, its optional built-in sensor, and supported paired nodes. Relay controls, supported node settings, reboot/unpair actions, and gateway reboot/factory-reset actions can then be used from Home Assistant while staying synchronized with the gateway dashboard.
For temperature reporting, the gateway publishes MQTT temperatures in degrees Celsius only for both the built-in sensor and paired sensor nodes. Temperature-unit controls are intentionally not exposed to Home Assistant because Home Assistant already handles user-side Celsius/Fahrenheit conversion.
If the gateway or node reboots, the system reconnects automatically and restores state where supported.
The project already supports sensor nodes, actuator nodes, and hybrid nodes.
| Type | Device | Status |
|---|---|---|
| Gateway | ESP32-S3 Gateway | Working |
| Gateway Helper | ESP32-C3 Coprocessor | Working |
| Sensor Node | Envo Mini v1 | Working |
| Actuator Node | ESP32 Relay Node v1 | Working |
| Hybrid Node | ESP32 Hybrid Relay Node v1 | Working |
Envo Mini v1
ESP32 Relay Node v1
ESP32 Hybrid Relay Node v1
Most DIY smart-home systems put every device directly on Wi-Fi.
This project takes a different approach:
This makes the setup especially useful for small ESP32 devices that only need to talk to one central controller.
Browser
|
| Dashboard
|
ESP32-S3 Gateway
|
| ESP-NOW
|-- Sensor Nodes
|-- Actuator NodesThe gateway acts as the bridge between:
For Node OTA, the gateway temporarily hands firmware delivery to the on-board ESP32-C3 coprocessor, which stages the selected node firmware, starts a temporary helper access point, and serves the firmware image to the target node while the main gateway continues managing the mesh and dashboard. Incompatible uploads are blocked up front if the firmware markers do not match the selected node role or hardware configuration. While that helper session is active, the dashboard now blocks conflicting Gateway OTA or coprocessor OTA actions and shows a clear Coprocessor Busy state until the helper is free again.
If the gateway loses its router Wi-Fi connection, the ESP32-S3 can now host an operator-facing Offline Mode AP directly while keeping ESP-NOW active on the last known mesh channel. When the router comes back, the gateway scans for the saved SSID, reconnects automatically, and returns the dashboard to the router-assigned IP.
The current gateway hardware release line now consists of four single-layer, thick-trace, THT-friendly PCB variants intended to be easy to hand-fabricate at home:
| Variant | Main MCU board | Helper MCU board |
|---|---|---|
ESP32_Mesh_Gateway_v1A | Seeed Studio XIAO ESP32-S3 | ESP32-C3 Super Mini |
ESP32_Mesh_Gateway_v1B | Seeed Studio XIAO ESP32-S3 | Seeed Studio XIAO ESP32-C3 |
ESP32_Mesh_Gateway_v1C | Seeed Studio XIAO ESP32-S3 | DFRobot Beetle ESP32-C3 |
ESP32_Mesh_Gateway_v1D | Waveshare ESP32-S3-DevKit-C-N8R8 | ESP32-C3 Super Mini |
Shared board-level notes for all four variants:
Board and wiring selection for the current release line are handled through the documented PlatformIO environments for each firmware target, with guarded defaults and invalid-define correction in each project's include/user_config.h.
Start with the gateway firmware:
esp32-gateway/gateway_v1/README.md
For Node OTA support, also flash the ESP32-C3 gateway coprocessor once from:
esp32-gateway/gateway_v1/coprocessor_esp32c3/
The Gateway Firmware Update section in the dashboard can now target either the ESP32-S3 Main MCU or the ESP32-C3 Coprocessor.
Choose one:
Sensor node:
esp32-nodes/sensor_nodes/envo_mini_v1/README.md
Actuator node:
esp32-nodes/actuator_nodes/esp32_relay_node_v1/README.md
Hybrid node:
esp32-nodes/hybrid_nodes/esp32_hybrid_relay_node_v1/README.md
On first boot, the gateway opens the setup portal so you can either connect it to your home Wi-Fi or choose manual offline mode with the built-in Offline Mode AP credentials.
Put a node into pairing mode and let the gateway detect it.
Visit the gateway IP in your browser and start using the system. If the gateway is running in Offline Mode, open:
http://192.168.8.1/If you want Home Assistant integration, open the gateway dashboard, go to the MQTT settings section, enter your broker details, and enable the MQTT bridge. The gateway will publish Home Assistant discovery automatically once it connects to the broker.
The current dashboard supports:
Home Assistant intentionally does not expose:
The dashboard is served directly by the gateway itself.
This project is useful if you are:
You want a local smart-home system without cloud dependency.
You want to explore ESP32 networking, embedded firmware, and browser-based control panels.
You want a modular ESP32 project with:
The project is already structured for further development.
If you want to:
start here:
More detailed documentation is available in the subproject README files.
espnow-mesh-system/
|-- README.md
|-- CONTRIBUTING.md
|-- esp32-gateway/
|-- esp32-nodes/
|-- docs/esp32-gateway/
Gateway documentation and firmware
esp32-gateway/gateway_v1/hardware/
Gateway v1A-v1D PCB resources, schematic PDFs, and development references
esp32-nodes/
Sensor, actuator, and hybrid node firmware
If you're just exploring:
esp32-gateway/README.mdesp32-nodes/README.mdIf you're building hardware:
esp32-gateway/gateway_v1/README.mdesp32-gateway/gateway_v1/hardware/esp32-nodes/sensor_nodes/envo_mini_v1/README.mdesp32-nodes/actuator_nodes/esp32_relay_node_v1/README.mdesp32-nodes/hybrid_nodes/esp32_hybrid_relay_node_v1/README.mddocs/esp32_c3_supermini_wifi_tests/README.mdIf you're contributing code:
CONTRIBUTING.mdThe project currently supports:
user_config.h release line for gateway and node firmwarePlanned future growth may include:
MIT License
See LICENSE
| Qty | Value | Footprint | References |
|---|---|---|---|
| 5 | 2H_Jumper_P5.08mm | Jumpers:2H_Jumper_P5.08 | JP1, JP3, JP5, JP6, JP7 |
| 4 | MountingHole | MountingHole:MountingHole_3.2mm_M3_DIN965 | H1, H2, H3, H4 |
| 2 | 100nF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mm | C1, C3 |
| 2 | 100uF | Capacitor_THT:CP_Radial_D6.3mm_P2.50mm | C2, C4 |
| 2 | 2H_Jumper_P7.62mm | Jumpers:2H_Jumper_P7.62mm | JP2, JP4 |
| 1 | 100R | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1 |
| 1 | 10K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R2 |
| 1 | BME280 | Sensor_Modules:BME280_Module | U3 |
| 1 | DFRobot Beetle ESP32-C3 | Development_Boards:DFRobot_Beetle_ESP32-C3 | U2 |
| 1 | Ext Power | B2B-XH-A_LF__SN_:B2B-XH-A__LF__SN_ | J1 |
| 1 | G*** | kibuzzard-69C036F1 | kibuzzard-69C036F1 |
| 1 | G*** | kibuzzard-69C035C1 | kibuzzard-69C035C1 |
| 1 | G*** | kibuzzard-69C03701 | kibuzzard-69C03701 |
| 1 | G*** | kibuzzard-69CC23E0 | kibuzzard-69CC23E0 |
| 1 | LOGO | esp32-mesh-system:esp32-mesh-system_10mm | G*** |
| 1 | LOGO | A-Tech_Officials:A-Tech_Officials_Logo_2025_10mm | G*** |
| 1 | LOGO | esp32-mesh-system:esp32-mesh-system_Silk_10mm | G*** |
| 1 | LOGO | esp32-mesh-system:esp32-mesh-system_Mask_10mm | G*** |
| 1 | LOGO | A-Tech_Officials:A-Tech_Officials_Logo_2025_10mm_mask | G*** |
| 1 | RGB LED | TSW-103-07-G-S:SAMTEC_TSW-103-07-G-S | J2 |
| 1 | RST BTN | FSM10JH:FSM4JH | S1 |
| 1 | XIAO-ESP32-S3-DIP | XIAO_Series_Boards:Xiao ESP32-S3 THT | U1 |

atechofficials/espnow-mesh-system
Lightweight ESP-NOW mesh network for smart home automation — ESP32-S3 gateway with live web dashboard, button-press node pairing, and extensible per-node settings.

atechofficials/espnow-mesh-system
Lightweight ESP-NOW mesh network for smart home automation — ESP32-S3 gateway with live web dashboard, button-press node pairing, and extensible per-node settings.

nkitanov/iaq_board
IAQ Board is a DIY (Do-It-Yourself) device for measuring internal air quality


New-England-Weather-Balloon-Society/Tiny4FSK
Horus Binary v2 HAB Tracker


kbx81/ClimateSprinklerController
ESP32-based climate and sprinkler controller for use with ESPHome

crnicholson/StratoSoar-MK3
StratoSoar MK3, an autonomous glider meant for high-altitudes, accessible to everyone


CCHS-Melbourne/ESPlant
Environmental Sensor Plant - solar WiFi gardening/meteorological sensor using ESP8266
It measures 70 × 50 mm and has 2 copper layers, 1.2 mm thick.
32 parts, built around the BME280. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the atechofficials/espnow-mesh-system repository on GitHub, at the commit this page was made from: the board is esp32-gateway/gateway_v1/hardware/ESP32_Mesh_Gateway_v1C/ESP32_Mesh_Gateway_v1C.kicad_pcb and its schematic esp32-gateway/gateway_v1/hardware/ESP32_Mesh_Gateway_v1A/ESP32_Mesh_Gateway_v1A.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).