Overview
The day of the week appears on the screen, Monday, Tuesday, and so on. Or the Feather can be programmed to show other information, like reminders. The project is meant to help people with memory problems.
All the parts snap together without any soldering. A grandchild could make this project for a grandparent.
Parts Note
Want a larger or smaller calendar? You can use any size of eInk display, lipo battery, and USB cable. You can add a 24 pin cable and extender between the display and feather. And you can find or make a different case.
Steps
- Connect the parts.
- On the feather, unlock the 24 pin connection. The black bar slides out a little.
- Slide the eInk cable into the 24 pin connection.
- Push in the black bar.
- Slide the battery into the real-time clock.
- Optionally, scratch through the connection next to the LED on the real-time clock.
- With the STEMMA QT cable, connect the real-time clock and feather.
- Connect the battery cable to the feather.
- With the USB cable, connect the feather to a computer.
Connect the cable to a computer.
Press the Reset and Boot buttons on the Feather.
Download CircuitPython from this page.
Drag the uf2 file from the Downloads folder to the RPI-RP2 drive.
Download the library bundle from this page.
Install the library for the eInk display. For the 3.7 in version, see this page.
If the display doesn't show an image, press the Reset button on the Feather.
Drag three folders from the zip file to the lib folder on D:, adafruit_bus_device, adafruit_pcf8523, and adafruit_register. Drag one file from the zip file to the lib folder on D:, adafruit_ssd1680.mpy.
# SPDX-FileCopyrightText: 2026 Jay Martin # # SPDX-License-Identifier: MIT """Code to set the time and date and day""" import time import board from adafruit_pcf8523.pcf8523 import PCF8523 i2c = board.STEMMA_I2C() rtc = PCF8523(i2c) # Change the last line of code to the current time. The format is # year, month, date, hour, minute, second, day of the week, -1, -1. # For the hour, midnight is 0, noon is 12, and 1 p.m. is 13, etc. # For the day of the week, Sunday is 6, Monday is 0, Tuesday is 1. # This example sets the time to March 21, 2026, 4:45 p.m., Saturday: # rtc.datetime = time.struct_time((2026, 3, 21, 16, 45, 0, 5, -1, -1)) rtc.datetime = time.struct_time((2026, 3, 21, 16, 45, 0, 5, -1, -1))
Then . . .
# SPDX-FileCopyrightText: 2025 Jay Martin, added lines for Adafruit's Playground
# SPDX-FileCopyrightText: 2025 Scott Shawcroft, written for Adafruit Industries
# SPDX-FileCopyrightText: Copyright (c) 2021 Melissa LeBlanc-Williams for Adafruit Industries
#
# SPDX-License-Identifier: Unlicense
"""Simple test script for 3.7" 240x416 monochrome display (ThinkInk_370_Mono_BAAMFGN)."""
import time
import alarm
import board
import busio
import displayio
from fourwire import FourWire
import adafruit_uc8253
from adafruit_pcf8523.pcf8523 import PCF8523
displayio.release_displays()
if "EPD_MOSI" in dir(board): # Feather RP2040 ThinkInk
spi = busio.SPI(board.EPD_SCK, MOSI=board.EPD_MOSI, MISO=None)
epd_cs = board.EPD_CS
epd_dc = board.EPD_DC
epd_reset = board.EPD_RESET
epd_busy = board.EPD_BUSY
else:
spi = board.SPI() # Uses SCK and MOSI
epd_cs = board.D9
epd_dc = board.D10
epd_reset = board.D8 # Set to None for FeatherWing
epd_busy = board.D7 # Set to None for FeatherWing
display_bus = FourWire(
spi, command=epd_dc, chip_select=epd_cs, reset=epd_reset, baudrate=1000000
)
time.sleep(1)
display = adafruit_uc8253.UC8253(
display_bus,
width=416,
height=240,
busy_pin=epd_busy,
rotation=270,
vcom_cdi=0x97,
)
g = displayio.Group()
# read the weekday from rtc module
i2c = board.STEMMA_I2C()
rtc = PCF8523(i2c)
dtm = rtc.datetime
wdy = dtm.tm_wday
# select the bitmap image of the day
if wdy == 6:
pic = displayio.OnDiskBitmap("/sun.bmp")
elif wdy == 0:
pic = displayio.OnDiskBitmap("/mon.bmp")
elif wdy == 1:
pic = displayio.OnDiskBitmap("/tue.bmp")
elif wdy == 2:
pic = displayio.OnDiskBitmap("/wed.bmp")
elif wdy == 3:
pic = displayio.OnDiskBitmap("/thu.bmp")
elif wdy == 4:
pic = displayio.OnDiskBitmap("/fri.bmp")
elif wdy == 5:
pic = displayio.OnDiskBitmap("/sat.bmp")
# display the image
t = displayio.TileGrid(pic, pixel_shader=pic.pixel_shader)
g.append(t)
display.root_group = g
display.refresh()
# set an alarm for 12:15 a.m. to rerun code.py
current_sec = (dtm.tm_hour * 60 * 60) + (dtm.tm_min * 60) + dtm.tm_sec
wait_sec = 86400 - current_sec + 900 # seconds until 12:15 a.m.
time_alarm = alarm.time.TimeAlarm(monotonic_time=time.monotonic() + wait_sec)
alarm.exit_and_deep_sleep_until_alarms(time_alarm)
Also see the project E-Ink Countdown in CircuitPython with Custom Stand by jepler.
This page (eInk Calendar With No Soldering) was last updated on June 13, 2026.