emonPi Technical Overview

The emonPi is an all-in-one Raspberry Pi based energy monitoring unit making for a simple installation where Ethernet or WiFi is available at the meter location.

The emonPi can monitor two single-phase AC circuits using clip-on CT sensors. The emonPi can also monitor temperature, and interface directly with a utility meter via an optical pulse sensor.



  • 2x CT Sensor inputs for single-phase AC electricity monitoring designed for use with the 100A SCT-013-000 CT sensor

  • 1x AC voltage measurement using plug-in AC-AC adapter for real power calculation alongside current measurement from CT sensors. Designed for use with a 9V AC output voltage adapter

  • Support for multiple wired one-wire DS18B20 temperature sensors via RJ45 socket

  • Support for pulse counting either wired or via Optical Pulse Sensor

  • 433 MHz RFM69 radio transceiver for receiving data from additional energy monitoring or temperature and humidity nodes.

  • The emonPi measurement board is based on Arduino (Atmega328). This talks to an integrated Raspberry Pi running our emonSD software stack on it’s SD card.

  • Full local data logging and visualisation capability using the emonSD Emoncms software stack. Data can also be sent to a remote emoncms server such as emoncms.org.

  • Network connectivity via either Ethernet or WiFi.

  • LCD Display: for easier setup, displays network IP address and sensor status.

  • Push button: for shutdown and enabling/disabling SSH access.

emonPi Internals

The emonPi is based on a RaspberryPi + emonPi measurement board. The emonPi measurement board is based on an ATmega328p 8-bit microcontroller running Arduino based firmware. The following video gives a good overview of what is inside an emonPi. Note that we currently ship RaspberryPi version 3b+ which has WiFi onboard rather than the older version featured in this video.

System Overview

The following system diagram shows the main hardware and software components that make up the emonPi. On the left we have the emonPi measurement board based on the ATmega328 microcontroller with inputs from the different sensors, RFM69 433 MHz transceiver, button and I2C connection to the LCD.

The Atmega328 microprocessor communicates with the Raspberry Pi via the internal UART serial port (/dev/ttyAMA0).

emonPi system diagram


The emonPi uses the HopeRF RFM69CW RF module to receive data from other wireless nodes (emonTx, emonTH etc) using 433 MHz. We use the JeeLib packet format. Each RF node has a unique node ID but common network group (default 210). The ATmega328 runs a modified version of JeeLabs RFM12Demo Sketch to receive the data from radio nodes. Received radio packets are forwarded over serial and decoded on the RaspberryPi using EmonHub.

Energy Monitoring

The emonPi measurement board includes input circuitry that converts the outputs from the ACAC adapter and CT sensors into signals that are compatible with the Analog to Digital converter (ADC). The ATmega328’s 10-bit ADC samples the voltage and current channels sequentially. The Firmware running on the ATmega328 calculates real power, apparent power, power factor, Vrms and Irms of each channel. The real power reading is then pushed every 5s to the RaspberryPi for logging and visualisation.

To learn more about how the electricity monitoring works, see our Learn site here:

The full emonPi measurement board firmware can be accessed and downloaded here:

The CT input’s are designed for use with the 100A SCT-013-000 CT sensor. This sensor has 2000 turns, which means that the current in the secondary is 2000 less than the current in the mains wire primary. The emonPi has a fixed sized burden resistor specified to match this sensor at 22 Ohms. It is possible to change this burden resistor if you wish to use a CT with a different current range or number of turns.

Pulse Counting

Pulse counting on the emonPi uses the hardware interrupt IRQ1 on the ATmega328. The first hardware interrupt IRQ0 is used by the RFM69CW. Only one pulse counter input is possible per emonTx/emonPi. See guide + Add Optical Pulse Sensor for more information on the optical pulse sensor.

The emonPi firmware implements a check for a minimum pulse width, this can be shortened on systems with more frequent pulses, see line: https://github.com/openenergymonitor/emonpi/blob/master/firmware/emonPi_DS_jeelib_classic/main.ino#L96.

RaspberryPi and emonSD

The emonPi Raspberry Pi runs our emonSD software stack which is based on Raspbian Buster Lite. The pre-built emonSD image is available to purchase or download or it is possible to built the image yourself using our automated build script, see EmonScripts.

EmonSD includes emonHub which reads in the serial data from the emonPi measurement board and acts as a broker forwarding this data on to the local installation of emoncms via MQTT or to a remote server such as emoncms.org via HTTP.

Emoncms is our open source web application for processing, logging and visualising energy, temperature and other environmental data. It is installed as part of the emonSD software stack and provides full local data logging and visualisation capabilities.

Open Source

emonPi Firmware (see Firmware Modification
emonPi Discrete Sampling Firmware

emonPi Schematic and Board files:

emonPi Specification




Error due to component and sensor tolerances


Further info

Measuring Current (CT)


Further info

Measuring Voltage (AC-AC)

1st: 110VAC-254VAC / 2nd: 9VAC-12VAC

Further info

Sample period


Discrete sampling



Identify RF module

RF range


Antenna testing

Power Consumption

1.5W-2.5W RasPi2 / 2W-4W RasPi3

Operating temperature

-25 to +80 DegC

Further info

Physical Dimensions

10cm x 8.5cm x 10cm