Open-source project
CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter avatar
CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter

The CircuitSetup six channel ESP32 energy meter, from browser flash to Home Assistant

Hardware & Software documentation for the CircuitSetup Expandable 6 Channel ESP32 Energy Meter. Works with ESPHome and Home Assistant.

699 stars136 forksC++MIT

At a glance

What is it?
The CircuitSetup Expandable 6 Channel ESP32 Energy Meter is a real-time power and energy monitor built around two ATM90E32AS metering ICs, with six current channels on the main board and room to stack add-on boards up to 42 channels. The documentation covers firmware flashing from a browser, ESPHome configuration, current transformer selection and the pin compatibility rules that decide whether your ESP32 board fits.
Who is it for?
This board suits a homeowner who wants per-circuit and per-panel measurement in Home Assistant without running mains voltage into an ESP board, and it does not suit an installer who needs a pre-certified product or a 3-phase setup without a correct voltage reference on every measured phase.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 27 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Two metering ICs, six current channels, one voltage reference

The CircuitSetup Expandable 6 Channel ESP32 Energy Meter is a real-time power and energy monitor built around two ATM90E32AS metering ICs. The main board measures six current transformer channels and one voltage reference by default.

From those two ICs the board derives active power, reactive power, apparent power, power factor, frequency and temperature, at 16-bit measurement resolution. The stated metering IC accuracy is 0.1 percent with a 6000:1 dynamic range, and current gain selection is available up to 4x. Each current channel has a 22 ohm burden resistor.

The design goal is whole-home measurement. The documentation names the intended uses as whole-home monitoring, subpanels, solar, large branch circuits, and multi-voltage or 3-phase projects, and lists specific service types it suits: North American split-phase 120V and 240V 60Hz service for mains, solar, subpanels and individual circuits, single-phase 230V and 240V 50Hz or 60Hz systems with a suitable 9VAC or 12VAC AC-AC adapter, and 3-phase systems when each measured phase has the correct voltage reference.

That last condition is the one to notice. The board is not a 3-phase device on its own. Measuring three phases correctly depends on feeding the right voltage reference to each phase, which is a wiring problem before it is a software problem.

Expansion to 42 channels is a stacking decision, not a firmware one

The expansion story is the reason the board is called expandable. The main board carries six current channels, and you can stack up to six add-on boards for a total of 42 current channels and up to 8 voltage references.

The voltage side is worth separating out, because it is not simply a multiple of the channel count. The first AC-AC adapter powers the main board and provides the primary voltage reference. A second voltage can be measured on the main board, and stacked systems can monitor additional voltage references when the hardware is configured for it. So the eight references in a fully populated stack come from a mix of board configuration and the number of add-on boards, not from the main board alone.

That is why the choice of add-on board count is asked for at the point of flashing. The web installer asks for the number of add-on boards, and the firmware you select has to match, because the pin map and the channel count of the ESP32 board are fixed at build time rather than discovered at runtime.

The repository layout reflects the same split between hardware and software. The top level holds a Hardware/ directory, an Images/ directory, a Software/ directory and a scripts/ directory, and the documentation points to Software/ESPHome/ for the package layout, local copies, calibration files, CS-pin changes and advanced YAML examples. Anything that differs between a six channel board and a 42 channel stack belongs in the software side, where it can be expressed as configuration.

The first flash happens in the browser, over USB

The quick start path is deliberately short. You flash ESPHome directly from the CircuitSetup ESP Web Installer, connect the device to your network, then adopt it into Home Assistant.

The sequence in the documentation is this. Open the ESP Web Installer, and under the 6 Channel Meter entry choose the number of add-on boards and the connection type, which is Wi-Fi, Ethernet (Lilygo) or Ethernet (Waveshare). Then choose the firmware version, connect the ESP32 to your computer with a USB data cable, click Connect, pick the correct serial port and start the flash.

Two fallback details are given because they are the ones that fail. If the board does not enter the bootloader automatically, hold the right or IO0 button while the installer starts. And if you flashed a Wi-Fi build, you provision Wi-Fi after the flash.

That last point is where the project does something thoughtful. The current Wi-Fi configs in the repository already include captive_portal, esp32_improv and improv_serial, so the device can be provisioned before it is ever adopted into Home Assistant. The device therefore presents itself on the network, is given its credentials, and joins the system, without you typing credentials into a serial console.

Once the device is online, the remaining work is calibration and naming, which is what the next step is for.

ESPHome Device Builder handles the YAML you will not want to hand edit

After the first flash, the documentation points you to the ESPHome Device Builder add-on, and the reason is stated plainly: UI-based management, dashboard imports, OTA updates from Home Assistant, changing default meter and CT names, and any other YAML editing.

The installation is four clicks. Open Settings, then Add-ons, then the Add-on Store, search for ESPHome Device Builder, install it, click Start, and click Open Web UI. After that the device appears in ESPHome Device Builder and in Home Assistant under Settings and Devices and services.

For a board that exposes dozens of channels, this is the difference between a project that is pleasant to own and one that is not. A 42 channel installation has 42 CTs to name, each with its own calibration constant, and doing that in YAML by hand is a bad afternoon that you repeat every time a sensor is added.

The trade is that the YAML in the repository becomes a starting point rather than the interface, and the documentation treats it that way. It points to the Software/ESPHome/ directory for package layout, local copies, calibration files, CS-pin changes and advanced YAML examples, which reads as an appendix for the cases the device builder does not cover.

Your choice of current transformer decides whether you cut jumpers

This is the part of the documentation that has a physical consequence, so it is worth reading twice.

You can use any mix of supported current transformers as long as the secondary output does not exceed 720mV RMS or 33mA. CircuitSetup CTs with mA output work directly with the board and do not require cutting the burden resistor jumpers on the back. Voltage-output CTs such as the Magnelab SCT-0750-100 and similar can also be used, but channels using CTs with built-in burden resistors require the matching jumper trace on the back of the board to be cut.

In other words, there are two families of current transformer and they are not interchangeable. A milliamp output sensor already has its own burden, so the board's 22 ohm resistor would double count and has to be disabled. A voltage output sensor has no burden of its own, so the board's resistor is exactly what turns its output into something the metering IC can read. The documented current transformers span a wide range: the SCT-006 at 20A and 25mA with a 6mm opening, the SCT-010 at 80A and 26.6mA with 10mm, the SCT-013-000 at 100A and 50mA with 13mm, the SCT-016 at 120A and 40mA with 16mm, and the SCT-024 at 200A and 50mA with 24mm. The opening has to fit around the conductor, and the ratio has to match the circuit.

An AC-AC transformer is required, and a DC wall adapter will not work

The meter requires an AC output transformer, not a DC wall adapter, and this is stated as a requirement rather than a recommendation. The reason is structural: the metering ICs need a voltage reference, and the first AC-AC adapter both powers the board and provides the primary voltage reference against which the current channels are measured.

For North America the documentation names a 120V to 9VAC adapter with a 2.5mm center pin, or a similar 9VAC or 12VAC adapter. For Europe and other 230V regions it says to use a native 230V to 9VAC or 12VAC AC-AC adapter rated for at least 500mA, and it links a list of suitable adapters maintained by OpenEnergyMonitor.

The current rating matters more than it looks. The adapter is powering the board and the ESP32 dev board, which the board supports directly through its built-in buck converter, and the metering electronics alongside them. An adapter that is adequate for a phone charger is not necessarily adequate here.

For the controller, the documented and supported options are the NodeMCU 32s, the Espressif ESP32-DevKitC-32E, the Espressif ESP32-DevKitC-VIE, and boards with the same 19-pin-per-side pinout. For ESPHome there are Ethernet options in the form of a CircuitSetup ESP32-S3 Ethernet Adapter, the LilyGO T-ETH-Lite ESP32-S3 and the Waveshare ESP32-S3 ETH.

Pin compatibility is not a formality, and the software release is old

The documentation warns against a mistake that is easy to make with any board that accepts ESP32 modules. Boards with different pin maps are not drop-in compatible just because they are ESP32 boards, and the example given is ESP32-C6 dev boards, which use different pins and are not part of the documented support path. There is a physical check too: the documented dev boards are usually 19 pins per side, with 3V3 at the upper-left corner and CLK at the lower-right corner when installed correctly.

On the board side, the specification lists features that exist for integration rather than for display. There is a built-in buck converter to power the board and supported ESP32 dev boards, the interface to the ESP32 is SPI, and the board exposes energy pulse outputs, IRQ outputs, a warning output and zero-crossing signals.

Those outputs are what let the meter drive other hardware or feed a faster pulse counter, and they are also the reason the firmware is built per configuration. The number of add-on boards changes the channel count, and the channel count changes the pin map, which is why the web installer asks for the add-on count and the firmware version together.

Two maintenance facts are worth recording. The last push to the master branch was on 2026-09-26, so the documentation and configuration are being kept current. The release list, however, has one entry, v2.5.7 labelled EmonESP for 6 Channel Meter v2.5.7 from 2021-01-27, which is the firmware lineage the project inherited rather than a release of the current documentation set. The project is MIT licensed, with the terms in the LICENSE file at the root, and the primary language is recorded as C++ for the firmware sources under the software directories.

Editorial conclusion

This board suits a homeowner who wants per-circuit and per-panel measurement in Home Assistant without running mains voltage into an ESP board, and it does not suit an installer who needs a pre-certified product or a 3-phase setup without a correct voltage reference on every measured phase. Before buying, check that your current transformer secondary stays under 720mV RMS or 33mA, confirm your dev board has the documented 19 pins per side with 3V3 at the upper-left, and read the Software/ESPHome/ directory before you plan to change any YAML, since the defaults and calibration files live there.

Frequently asked questions

How many channels can the CircuitSetup Expandable 6 Channel ESP32 Energy Meter measure?

The main board measures six current transformer channels and one voltage reference, and the system expands to 42 current channels and up to 8 voltage references with add-on boards, of which up to six can be stacked.

How do I flash the CircuitSetup energy meter for the first time?

Use the CircuitSetup ESP Web Installer, choose the number of add-on boards, the connection type of Wi-Fi, Ethernet (Lilygo) or Ethernet (Waveshare), and the firmware version, then connect the ESP32 over a USB data cable and flash it. If the board does not enter the bootloader on its own, hold the IO0 button while the installer starts.

What current transformers can I use with the meter?

Any mix of supported current transformers works as long as the secondary output stays under 720mV RMS or 33mA. Milliamp output CircuitSetup CTs work directly, while voltage output CTs with built-in burden resistors need the matching jumper trace cut on the back of the board.

Can I use a regular wall adapter to power the CircuitSetup energy meter?

No. The meter requires an AC output transformer, not a DC wall adapter, because the adapter also provides the primary voltage reference. North American installations use a 120V to 9VAC adapter with a 2.5mm center pin, and 230V regions use a native 230V to 9VAC or 12VAC adapter rated for at least 500mA.

Official sources

  1. CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/circuitsetup-expandable-6-channel-esp32-energy-meter.svg)](https://hysenlabs.com/projects/circuitsetup-expandable-6-channel-esp32-energy-meter)

Was this useful?