Moon Phase Display

A battery powered e-ink display showing the current phase of the moon.

Similar projects worth following
I've used this project as a way to learn. It includes my first custom PCB, one of my first 3D prints, my first encounter with open source graphics software and some cobbled together CircuitPython code. I plan to write an update on each of these highlighting what I've learned, in case others want to venture down this torturous path.

I'm indebted to NASA for the data and to the fine authors on the Adafruit learning system for showing me how to use it.

I really like the aesthetic of three colour e-inks and the idea of low power single purpose displays or indicators. They seem to have become far more accessible than previously and in a strange way it’s harder to think of a suitable application for them than it is to actually use them. A moon phase display seems a good use to me, we get really bad weather in the North of England and looking up at the sky of a night will more likely reveal a blanket of grey cloud than the shining lunar orb!

The main inspiration for the project was this cool blogpost from NASA, a goldmine of data and knowledge that just cries out to be used. It’s very slick and I guess you could just have a display with that page on a browser window but where would the fun in that?

So the brief I set myself was:

  • Design a simple and elegant display that updates in the morning to show the moon as you will see it that evening.
  • It has to be battery powered and last for at least a week.

Ok so I’m a novice at coding and am most familiar with python. I’ve tried battery powered raspberry pi projects in the past and know that they would not be as compact or long lasting as I require. That left me with Micropython or CircuitPython, I chose the latter because of the focus on beginners and the well documented hardware available from Adafruit.

The next decision was whether to access the data live or not. A little experimentation showed that the current CircuitPython strategy of ESP32 wifi coprocessors have high power requirements, not a great start. NASA offers a download of the moon phases hourly for an entire year so instead I decided to put all the data on the board ahead of time and just have it parse the correct data for each day.

The micro controller has all the data it needs and can write to the display, but does it know what day it is? I guessed it could keep time for short periods but I only wanted to have to charge it weekly, not plug it in to a computer to adjust the time, so I also needed an RTC.

With that I ordered all the components and got designing.


V3 of the case, more clearance added for JST connector and battery. Battery now very slightly looser than I'd like but fine for now.

Standard Tesselated Geometry - 54.28 kB - 08/23/2020 at 12:58


  • 1 × ItsyBitsy M4 Express
  • 1 × Adafruit eInk Breakout Friend
  • 1 × Waveshare 400x300 4.2in three-color E-Ink display
  • 1 × PKCell 2200mah Lithium Ion Battery
  • 1 × MCP73831T Power Management ICs / Power Supply Support

View all 6 components

  • Design

    Jacob Tarr08/23/2020 at 12:00 0 comments

    There have been several fine e-ink projects on Hackaday and I particularly like this one. I wanted something similar to sit on my desk but with a more minimalist feel and code I'm familiar with. The first step in my design process (if you can call it that!) is to first identify a series of desirable design features before I put pen to paper. Here they are for this project:

    • Narrow/no bezel - Modern tablets and phones have got us all so used to the idea that screens should blend into the rest of the device that a protruding bezel immediately looks old fashioned.
    • These e-ink panels have an elegant aesthetic, with a muted gray border and a mirror finish back, show this off!
    • The screen needs to sit at a convenient viewing angle without a prop like a picture frame.
    • The enclosure needs a simple, clean geometry with no features that distract from the screen.

    My initial sketches quickly ruled out a flat tablet like enclosure, but went instead to a monolithic stand which would both house the electronics and hold the screen at an angle. I transferred that sketch to Fusion360 and started to mess around with the geometry and finding an angle that looked right for the screen.

     It then occurred to me that the stand could also give me a second screen angle by tipping it onto it's back, not really needed for this project but a nice feature to experiment with for the future. This pretty much established the back plane of the case as it needed to be deep enough that the screen would not touch the desk in that orientation.

    So I had the angle of the screen and location of both the base and the back of the stand but no constraints for the sides or top. I also had an best-guess location for the battery. For the rest of the internal geometry I needed to know how my PCBs could fit and figuring that out led to my first PCB designing adventure which I'll cover in the next log!

View project log

Enjoy this project?



erik33 wrote 07/25/2021 at 16:26 point

I would love to see the code also... It's a great project!  I'm new at circuitpython so was hoping to learn from your code for another project

  Are you sure? yes | no

Mason wrote 08/28/2020 at 18:20 point

Nice usage of the NASA dataset and I love the minimalistic case/stand design. Looking foward to your next log!

  Are you sure? yes | no

Waldo Wolmarans wrote 08/08/2020 at 19:16 point

Cool project. I like the stand/case . Good luck.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates