Kingdom of Bahrain · reTerminal E1001

clock.bh on e-paper

Open firmware for Seeed's reTerminal E1001 that turns a battery-powered, 7.5-inch e-paper panel into an analog Bahrain clock — the same "Hoist" dial as the logo above, hands redrawn once a minute, with the date, sunrise/sunset, moon phase and NTP status underneath.

Live preview of the clock.bh ePaper frame: an analog clock face set to the current Bahrain time, the date, sunrise/sunset, moon phase and NTP sync status.

Live preview — the exact 800×480 monochrome frame the device draws, redrawn here every 20 seconds so the minute hand keeps pace with the real device.

01

What it shows

The frame

The real "Hoist" dial — bezel, serration and hands taken straight from the site's own logo, not redrawn from scratch — set to Bahrain time (Asia/Bahrain, UTC+03:00), with the date, sunrise/sunset for Manama (the same figure the homepage shows), a moon phase and this server's live NTP sync status underneath. The moon phase is a closed-form approximation, not the Meeus series the homepage's sky graph uses, so it's labelled "(approx.)" on the frame itself.

The hardware

A Seeed Studio reTerminal E1001: an ESP32-S3 driving a 7.5-inch, 800×480 monochrome e-paper panel on a 2000 mAh battery. Seeed's own multi-month battery-life figure assumes a far slower refresh than this firmware uses — see "Battery life" below.

Battery life

Redrawing the minute hand every minute means a full Wi-Fi join and e-paper refresh every minute too, which costs real charge — expect to charge this far more often than a typical e-paper project. If you'd rather have months between charges than a live minute hand, it's a one-line change: raise REFRESH_SECONDS in the firmware.

02

Set it up

  1. Get a Seeed Studio reTerminal E1001 (7.5", 800×480, monochrome).
  2. In Arduino IDE, install the ESP32 board core, then add the Seeed_GxEPD2 library and Adafruit GFX Library.
  3. Download both files below into one folder named clockbh-epaper-e1001. Copy secrets.h.example to secrets.h in that folder and fill in your Wi-Fi name and password.
  4. Board: XIAO_ESP32S3. Enable Tools → PSRAM → OPI PSRAM. Upload.
  5. Done — it fetches a fresh frame every minute and deep-sleeps in between. No app, no account.

Each device makes one anonymous HTTPS request a minute for a 48 KB image — no account, no app, no cloud service beyond clock.bh itself, and no way for clock.bh to tell how many of these are running. This is an independent, hobbyist project, not an official Seeed Studio integration. The wire format is documented in the firmware's comments if you'd rather point different hardware at it: a GET to /api/epaper.bin returns 48,000 bytes, 800×480, 1 bit per pixel, MSB-first, where a set bit means "paint this pixel black".