Hardware & Software documentation for the CircuitSetup Expandable 6 Channel ESP32 Energy Meter. Works with ESPHome and Home Assistant.
Hardware & Software documentation for the CircuitSetup Expandable 6 Channel ESP32 Energy Meter. Works with ESPHome and Home Assistant.
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, and you can stack up to six add-on boards for a total of 42 current channels. It is a good fit for whole-home monitoring, subpanels, solar, large branch circuits, and multi-voltage or 3-phase projects.
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.
The fastest way to get the meter running is to flash ESPHome directly from the CircuitSetup ESP Web Installer, connect it to your network, then adopt the device into Home Assistant.
6 Channel Meter, choose:Wi-Fi, Ethernet (Lilygo), or Ethernet (Waveshare)Connect, choose the correct serial port, and start the flashIO0 button while the installer startsThe current Wi-Fi configs in this repo already include captive_portal, esp32_improv, and improv_serial, so the device can be provisioned before it is ever adopted into Home Assistant.
If you want UI-based management, dashboard imports, OTA updates from Home Assistant, to change default meter/CT names, and do any other YAML editing, install ESPHome Device Builder after the first flash.
Settings > Add-ons > Add-on StoreESPHome Device BuilderStartOpen Web UIThe device should then appear in ESPHome Device Builder and in Home Assistant under Settings > Devices & services.
For package layout, local copies, calibration files, CS-pin changes, and advanced YAML examples, see Software/ESPHome/.
You can use any mix of supported CTs 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.
The meter requires an AC output transformer, not a DC wall adapter.
Supported and documented controller options:
Boards with different pin maps are not drop-in compatible just because they are "ESP32" boards. For example, ESP32-C6 dev boards use different pins and are not part of the documented support path for this repo.
If you are comparing boards visually, 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.
The board is designed so the ESP32 dev board plugs directly into the meter.
Always insert the ESP32 with 3V3 in the upper-left corner of the meter. The lower pins are used to pass the voltage reference to add-on boards. Plugging the ESP32 into the lower row will likely short the board.
The meter communicates with the ESP32 over SPI.
Main board SPI pins:
CLK - GPIO18MISO - GPIO19MOSI - GPIO23CS1 - GPIO5 for CT1-CT3 and Voltage 1CS2 - GPIO4 for CT4-CT6 and Voltage 2The 6-channel version of EmonESP in this repo is already set up with the main board pin defaults. Current ESPHome configs for the main board and add-on boards are in Software/ESPHome.
Each add-on board adds six more CT channels. Up to six add-on boards can be stacked on the main board.
Each add-on board has two CS jumper banks:
CS for CT1-CT3 on that add-on boardCS2 for CT4-CT6 on that add-on boardOnly choose one pin per bank. The default jumper positions used by the installer and repo configs are:
| Add-on board | CS for CT1-CT3 |
CS2 for CT4-CT6 |
|---|---|---|
| 1st add-on | GPIO0 | GPIO16 |
| 2nd add-on | GPIO27 | GPIO17 |
| 3rd add-on | GPIO2 | GPIO21 |
| 4th add-on | GPIO13 | GPIO22 |
| 5th add-on | GPIO14 | GPIO25 |
| 6th add-on | GPIO15 | GPIO26 |
GPIO2 can interfere with programming on some ESP32 boards. If you temporarily cannot flash the ESP32 while that jumper is connected, disconnect that add-on board or move the jumper while programming, then restore the expected setting.
If you change jumper positions from the defaults, update the matching cs_pin values in your ESPHome config. See Software/ESPHome/README.md for examples.
JP1-JP6Each current channel on the board has an onboard burden resistor. That is correct for CircuitSetup CTs with mA output.
Only cut the matching rear jumper trace for a CT channel if that CT already has its own burden resistor, which is usually the case for voltage-output CTs such as 1V-output models.
In practice:
JP1-JP6Each current channel can use its own calibration value. In the current ESPHome configs that means setting current_cal_ct1, current_cal_ct2, and so on for the main board, plus the add-on board calibration variables where needed.
Common starting values:
| Sensor | Calibration value |
|---|---|
| SCT-006 20A/25mA | 11143 |
| SCT-013-030 30A/1V | 8650 |
| SCT-013-050 50A/1V | 15420 |
| SCT-010 50A/16.6mA | 41334 |
| SCT-010 80A/26.6mA | 41660 |
| SCT-013-000 100A/50mA | 27518 |
| SCT-016 120A/40mA | 41787 |
| SCT-024 200A/100mA | 27518 |
| SCT-024 200A/50mA | 55036 |
| Jameco 9VAC transformer | 7305 |
These are good starting points, not guaranteed final values. If you want tighter accuracy, use the ESPHome semi-automatic calibration workflow described below.
The ATM90E32 current register tops out at 65.535A before scaling. If you expect to measure more than that on one channel, divide the CT calibration value and multiply the reported current and power in software. Current examples are already documented in Software/ESPHome/README.md and shown in Software/ESPHome/6chan_energy_meter_main_board.yaml.
For 200A service this usually means you are monitoring a larger CT but scaling it in software so the meter stays within range.
The board uses voltage references to calculate power, power factor, and the other metering values.
JP8-JP11 so voltage channels could be tied together. Most v1.3 boards shipped with those connections already joinedJP8-JP11 and route those voltage channels internally on the PCBFor split-phase systems, a 240V load has two hot legs. There are three practical ways to measure it:
No open issues yet, or sync has not completed.