The emonGLCD is an open-source general purpose wireless graphical LCD display unit. It has been designed with displaying energy monitoring data in mind. The unit comes with it's own table stand or it can be mounted on a wall. Powered by an Atmega328 which is Arduino compatible. 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 basestation.


  • ATmega 328 with Arduino Uno bootloader
  • 128x64 ST7565 LCD display
  • White PWM LED backlight
  • On-board HopeRF RFM12B wireless transceiver module
  • Power supply: 5V mini-USB
  • DS18B20 on-board temperature sensor
  • On-board LDR light sensor
  • Based on JeeLabs.org designs and 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:

Design is based on jeelabs GLCD design.

Firmware examples

EmonGLCD Arduino example code can be found on github here, see readme for details on the different examples:

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 track 


  • 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 lithium in battery pack + 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) using a text editor. Find the section labelled [[RFM2Pi]] [[[runtimesettings]]], add the following line, and save. (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 forum thread for python tool to create glcd graphics from a bitmap: http://openenergymonitor.org/emon/node/3957

RF Signal Strength Meter Scanner by Martin Roberts:

see forum thread http://openenergymonitor.org/emon/node/2395

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

Checkout his video of it in action here  and check out the source code here

Good tutorial on interfacing a DS touch screen with an Arduino: http://tronixstuff.wordpress.com/2010/12/29/tutorial-arduino-and-the-ds-touch-screen/

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

A workaround for temperature measurement higher than it should: http://blog.pcunha.org/2013/01/emonglcd-temperature-hack-correcao-para.html.

The v1.4 PCB contains a track error, rendering the spare Digital IO pin on the JeePort unusable. It can be fixed with a scalpel, see http://openenergymonitor.org/emon/node/2063