Noureddine RAMDI / EnergyMe-Home: Open-Source ESP32-S3 Home Energy Monitoring with Multi-Protocol IoT Integration

Created Sat, 23 May 2026 20:41:14 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

jibrilsharafi/EnergyMe-Home

EnergyMe-Home is a fully open-source home energy monitoring system designed for DIY enthusiasts and embedded developers who want detailed, multi-circuit insights into their household power consumption. Built around the ESP32-S3 microcontroller and the ADE7953 energy measurement IC, this project combines custom hardware and robust firmware to deliver high-resolution data for up to 16 electrical circuits.

Hardware and firmware architecture of EnergyMe-Home

At the core of the hardware is the ESP32-S3, a powerful Wi-Fi and Bluetooth-enabled SoC known for its DSP capabilities and dual-core processor, coupled with the ADE7953 energy measurement IC. The PCB design (version 6.1) supports monitoring one main circuit sampled at high frequency and 15 branch circuits measured through multiplexing. This setup uses 333mV current transformers (CTs) with 3.5mm jack connectors, which simplifies sensor attachment and replacement.

The voltage sensing is handled by a ZMPT107-1 voltage transformer providing galvanic isolation, a critical design choice for safety and measurement accuracy. The hardware design, including PCB layouts, schematics, and BOMs, is fully open and licensed under CERN-OHL-S-2.0, encouraging builders to fabricate and modify their own boards.

On the firmware side, the system runs on FreeRTOS with the Arduino 3.x framework and is developed in C++ using PlatformIO. Its architecture is task-based, allowing concurrent handling of sensor data acquisition, network communication, and web interface updates without blocking the microcontroller.

The firmware features a web dashboard accessible over the local network that offers real-time monitoring, including a waveform analyzer that captures high-resolution voltage and current waveforms per channel. This oscilloscope-like functionality is impressive on a modest embedded platform. The system also supports token-based authentication, OTA firmware updates with MD5 verification and rollback capability, and crash recovery to enhance reliability in production.

Multi-protocol IoT integration and design tradeoffs

EnergyMe-Home supports a broad range of integration protocols, which is notable for a resource-constrained device like the ESP32-S3. It offers a REST API documented with Swagger for ease of integration, MQTT for lightweight pub/sub telemetry, Modbus TCP for industrial compatibility, and InfluxDB clients compatible with both v1.x and v2.x including SSL/TLS support. Additionally, there is integration with AWS IoT Core and a custom Home Assistant component, making it flexible for various smart home setups.

This multi-protocol approach shows a tradeoff between feature richness and firmware complexity. Supporting so many protocols on a single embedded system demands careful resource management and prioritization. The task-based FreeRTOS design helps mitigate this by isolating protocol handling and sensor reading into separate tasks.

The firmware’s codebase is surprisingly clean and well-structured for its scope. It includes mechanisms for OTA with rollback, which is not always standard in DIY projects but critical for long-term maintenance. The captive portal for WiFi setup improves DX by simplifying the initial configuration for end users who may not be comfortable editing configuration files or using serial interfaces.

The waveform analyzer is a standout feature, enabling users to see detailed electrical waveforms through the web UI. This capability typically requires expensive oscilloscopes or specialized hardware, so providing it on an ESP32-S3 platform is a technical accomplishment. The tradeoff here is that continuously high-frequency sampling and waveform processing can be demanding, so it is limited to the main circuit channel, with branch circuits sampled multiplexedly at lower frequency.

Getting started with EnergyMe-Home

The project provides detailed instructions for building and deploying the system:

  1. Order the PCB: Download the design files from the Schematics folder and order from your preferred PCB manufacturer
  2. Populate the board: Solder all components using the BOMs in documentation/pcb/main_board/, documentation/pcb/top_board_1/, and documentation/pcb/top_board_2/
  3. Flash the firmware: Connect a USB-to-UART adapter to the UART pins and flash using PlatformIO
  4. Configure WiFi: Power on the device and connect to the captive portal to set up WiFi credentials
  5. Start monitoring: Access the web interface at http://energyme.local (default credentials: admin/energyme)

The documentation also covers troubleshooting and detailed build instructions, which is essential given the hardware assembly requirements.

Verdict

EnergyMe-Home is a technically solid and thoughtfully designed open-source home energy monitoring system. It offers a rare combination of multi-circuit measurement, multi-protocol IoT integration, and rich features like waveform analysis on a modest embedded platform.

It’s best suited for practitioners comfortable with DIY electronics assembly, embedded firmware flashing, and network configuration. While the hardware assembly and initial setup may present a learning curve, the project’s comprehensive documentation and open licensing make it accessible for hobbyists and professionals alike.

Limitations include the complexity of the hardware build, the resource constraints of the ESP32-S3 that necessitate multiplexing branch circuits at lower sampling rates, and the potential challenges in maintaining and extending the firmware given its feature-rich design.

Overall, for those looking to build a robust, open, and extensible home energy monitor with insights down to waveform level, EnergyMe-Home is worth exploring.


→ GitHub Repo: jibrilsharafi/EnergyMe-Home ⭐ 248 · C++