What it shows
The display renders the Moon as it currently appears in the sky — rotated correctly for the observer's position and time of day. The illuminated portion is shown with a photographic lunar texture, while the unilluminated side is rendered dimmed. When the Moon is below the horizon, the image is tinted blue. The terminator line, separating the illuminated and unilluminated portions, closely follows its actual position — for this, accounting for libration is crucial.
Libration is the slow apparent wobble of the lunar surface: features near the lunar limb shift slightly over time, exposing different parts of the Moon depending on the current geometry.
Two texture options are available: a high-resolution texture from NASA's CGI Moon Kit, which provides an accurate and detailed view of the lunar surface, and a simple mode using a self-taken photograph of the Moon. The NASA texture provides the most accurate view, correctly representing libration with no compromises. The self-taken photograph has the charm of a DIY project — though applying libration to a flat image requires a post-processing transformation, which introduces artefacts near the lunar limb.
How it works
The device runs on an ESP32-C3 microcontroller, which handles both the calculations and the display output. An internet connection is only needed as a time source — all astronomical calculations are performed on the device itself. These follow the algorithms described in Jean Meeus' Astronomical Algorithms, covering phase, orientation, and libration. The observer's geographic coordinates and altitude are taken into account to correctly compute parallax — the slight shift in the Moon's apparent position depending on where on Earth you are standing.
The NASA texture maps spherical coordinates directly to the image, effectively providing a full 3D representation of the lunar surface. For the self-taken photograph, libration is applied by projecting the image onto a spherical grid and rotating it using matrix calculations.
The round IPS display measures 240×240 pixels at 1.28" diameter. At this resolution, a surprising amount of lunar surface detail is visible — enough to identify prominent features such as Mare Crisium near the eastern limb or Sinus Medii at the centre of the disk. The enclosure is 3D-printed, keeping the build compact with minimal overhead around the display.
Code
The code is in git: https://github.com/kmio42/moon-display/
Further informations about the project (german): https://blog.kmueller.dev/mondansicht-fuer-den-schreibtisch/