The emonGLCD is an open-source, general purpose, wireless graphical LCD. It was designed with displaying energy monitoring data in mind. The unit has an in-built table stand, or can be wall mounted. Powered by an Arduino compatible Atmega328, the emonGLCD can receive data from any sensing node in its surroundings such as an EmonTx or EmonTH, and can be configured to receive the time from the base station.


  • ATmega328 with Arduino Uno bootloader
  • 128x64 ST7565 LCD display
  • White PWM LED backlight
  • On-board HopeRF RFM12B wireless transceiver module
  • Power supply: 5VDC via mini-USB conector
  • DS18B20 on-board temperature sensor
  • On-board LDR light-level sensor
  • Based on JeeLabs.org design. Uses Adafruit/JeeLabs GLCD library
  • Software RTC updated from the internet via emonbase.

Build Guide

Pictorial step-by-step assembly guide

Open Hardware

The emonGLCD is open hardware with the designs released under the Creative Commons Attribution-ShareAlike 3.0 Unported License. The schematics and board files can be viewed and downloaded from the openenergymonitor github hardware repository here:

​See forum thread of user contributed 3D printed case design:

Design is based on the jeelabs GLCD.

Firmware examples

EmonGLCD Arduino example code can be found on github here:
See the readme file for details on the examples.

Note: Set #define RF69_COMPAT 1 at the top of the firmware examples if your using the RFM69 module.

Application examples



Port Map

Function emonGLCD V1.2 (old) emonGLCD V1.3+
Push button(s) Dig15 / ADC Dig 15 (enter), dig 16 (up) and dig 19 (down) - requires software pull-up, active low (V1.3 only). Blog post
Temperature sensor Dig 5 Dig 5
LDR light sensor ADC0 – see V1.2 bugs page ADC4
Tri-color LED Red Dig 9 – PWM Dig 9 – PWM
Tri-colour LCD Green Dig 8 Dig 6 – PWM


Hardware revision history


  • First release 


  • LDR moved to ADC4,
  • LED from Dig 8 to Dig 6 to be on PWM output
  • Added two extra push buttons for menu navigation (Dig 16 and Dig19) - don't work. Update: they do work!
  • Connected backlight directly to IRQ PWM
  • Added two additional menu selection buttons to make three in total


  • Fixed switches connections 
  • Connected LCD to 3.3V instead of 5V
  • External power connection now routed through voltage reg - accepts input from 5-12V



Further development

  • Built-in lithium battery pack and USB charging circuit
  • Female headers to attach LCD
  • Change LCD module to a more mainstream and lower cost unit
  • RGB PWM backlight
  • SMT components pre assembled


Extend it


Realtime Clock: A Raspberry Pi-based emonhub can be configured to send the current time information to an emonGLCD.

On the Pi, edit the emonhub.conf (usually /boot/emonhub.conf). Find the section labeled [[RFM2Pi]] [[[runtimesettings]]], add the following line. Save the file. No need to restart.

interval = 300

This will send the current time using its RFM12b, every 5 minutes (5 x 60 secs)

Create display graphics See this forum thread for python tool to create GLCD graphics from a bitmap: https://openenergymonitor.org/emon/node/3957

RF Signal Strength Meter Scanner by Martin Roberts:

See forum thread https://openenergymonitor.org/emon/node/2395

Touchscreen: Nathan Chantrell has been been doing some experimenting with a DS resistive touchscreen layer and RGB PWM backlight. His work is still in development.

Check out his video of it in action here.  The source code is here

Tutorial on interfacing a DS touch screen with an Arduino: tutorial-arduino-and-the-ds-touch-screen

Like the emonTx, the emonGLCD has a JeePort enabling it it be expanded via JeeLabs shields. A useful expansion could be a memory plug for caching large amounts of text and graphics.

A workaround for higher temperature measurement: emonglcd-temperature-hack.

The v1.4 PCB contains a track error, rendering the spare Digital IO pin on the JeePort unusable. It can be fixed by cutting a PCB trace. See  this for details.