My current project is a clock using electronic paper which will run on batteries, access the internet to set the local time using the ntp protocol, and use a real-time clock to maintain accuracy.
Alternatives
I considered a number of ways of coding and controlling this display. Fundamentally I’d have to drive one of these e-paper displays, and secondly run from battery for long periods. Ideally I’d like to connect to it via wifi to update code and change things, and the clock would be a real-time clock driven by an accurate crystal with battery backup. My options seem to be:
- Single board computer with full Linux operating system
- Odroid C1+
- Raspberry Pi Zero
- … your favourite SBC
- Embedded controller (of which the Arduino is a well-known type)
List of components
- Arduino Uno, for initial prototyping
- Embedded Artists EM027BS013 from Cool Components
- Adafruit Feather HUZZAH using the ESP8266 wifi chip
- Adafruit PowerBoost 500
- Adafruit Precision RTC featherwing daughter board
The HUZZAH board forms the main part of the clock with it’s ESP8266 ability to create a wifi access point, or join a existing wifi network. It can also be programmed using the Arduino IDE which is an advantage for those familiar with that environment. The PowerBoost may not be necessary as the HUZZAH provides a JST battery connector and can charge a LiPo/LiIon battery already, while the RTC daughter board will keep the time stable over extended periods.
The story thus far
On considering the single-board computers such as the Raspberry Pi I realised the power requirements of keeping a full OS and file system up meant that my clock would only run for about 9 hours maximum before needing a charge. There are plenty of comparisons around showing the differences between embedded controllers such as the Arduino versus the SBCs, but suffice to say that I thought achieving low power was easier with the controllers. The ease of programming the SBCs keeps me looking at something like a RaspPi Zero to see if it can be switched to low power, but I’m leery of starting down that route before exploring the other options.
Getting the Arduino controlling the display was easy.
As the Embedded Artists display is using the RePaper / Pervasive Displays reference model and their code is up on GitHub made it easier to get help and understand what was driving where. I also found that Google was my friend, although getting the Arduino driving the display was simpler than moving that code onto the Adafruit.
Starting with the Arduino Uno was easy as Embedded Artists have the code up on Github for that and a couple of example programs. Very quickly I realised that there were two different versions of the display (revisions A,B,C) and I had the second one, revision D. This used a different pinout arrangement and the display started to look muddy and with multiple ghosted images. Once using the correct Git repo things quickly turned right and the demo programs could be run.
Feather HUZZAH
The Adafruit Feather HUZZAH is an excellent platform in a small form factor, and with lots of support and documentation. I was impressed and also purchased the ‘Featherwing RTC’ as a precision real-time clock.
However the lack of GPIO pins on that particular Feather board meant that I could not have controlled the display – perhaps other e-ink displays have less control lines but mine needed around 10 GPIO pins free.
Micropython
I’ve been a fan of Damien George’s micropython since the early Kickstarter days, and twice supported it – for the initial board and the implementation onto the ESP8266. I love the language, but have never found a place to use it as the SBCs kept me busy with their Linux OSes and things such as Node-RED and Ethereum. But these Python boards are excellent and low-powered, and I get to program in a language I like. An unexpected gift was Peter Hinch’s full library for the Embedded Artists display – this demonstrates to me what a professional micro-controller programmer can do, even if he is retired!
So I may go down the micropython board route and ignore the wifi requirement for the moment. My version 1.0 board does not have pads for a JST battery connection although the v1.1 boards do, plus it already has a RTC that can be backed with a coin battery.