Low-Power LCD Clock with ESP32-C3 and Custom HT1621 Driver

I built another clock. Not because I don’t already have clocks—I have plenty, including a few homemade ones. But if you start some big, complicated project, there’s a good chance you won’t finish it… even if you’ve got the long New Year holidays ahead.

Clocks, in that sense, are perfect. A large part of the circuit and software is already well established, so you can focus on trying something new.

So what was new for me this time?

A Seven-Segment LCD and the HT1621 Controller

LCDs are interesting mostly because of their extremely low power consumption. If you skip the backlight, you can build something that runs off a battery or rechargeable cell for a very, very long time. I bought a six-digit display from AliExpress for experiments. Getting it to work wasn’t easy at first—the HT1621 chip I had was likely faulty. After replacing it, everything started working right away. The display, by the way, has pretty limited viewing angles.

The Microcontroller

In my previous builds, I used the ESP32-Pico-D4, but those have been discontinued and replaced by newer, more interesting options. This time I tried the ESP32-C3—it’s inexpensive, has built-in WiFi and Bluetooth. There are versions with external flash memory and some with 4MB built-in. But the coolest part? It doesn’t need an external programmer! You can connect it directly via USB, and if GPIO9 is pulled to ground on startup, it automatically enters programming mode.

The RTC (Real-Time Clock)

I used the DS3231MZ—same as the regular DS3231, but in a smaller package like the DS1307. No external crystal needed, and it works over a simple two-wire interface. Very convenient.

Moving from Eagle to KiCad

I’d used Eagle CAD for years, but it’s no longer supported. So I started experimenting with KiCad—a free, cross-platform design tool. Really liked it. Took just a couple of evenings to get up to speed. The component library is massive, and I was able to import all my old Eagle projects.

One huge bonus: KiCad lets you design four-layer PCBs—something Eagle only allowed with a paid subscription. JLCPCB makes multi-layer boards dirt cheap these days, so not being able to design them used to be a real limitation. I didn’t need four layers for this project… but hey, now I can, so I did.

Power Efficiency & Sleep Modes

Since LCD displays use so little power, there’s no reason to keep the microcontroller running all the time. I dove into sleep modes and how to wake the chip back up. Most of the time, the microcontroller is asleep, only waking up once a second to see if it needs to update the display. Once a day, it briefly powers up WiFi at the lowest possible strength to sync time via NTP.

Custom HT1621 Driver

The library I found online for the HT1621 didn’t work for me—my display had a different pinout. So I went ahead and wrote my own driver. Used C++ templates to split the display driver logic from the hardware config. Now it’s super easy to adapt the code to different LCD modules. I definitely want to experiment more with these displays.

Despite being a fairly simple project, this one turned out to be incredibly interesting. I got to try out some new tools, solve some little mysteries, and in the end, ended up with a pretty useful device.