Documentation
Here are some guides for adding controls and other elements to the PCB.
- Product info page
- Download the schematic diagram (Rev. 1.0)
- Download the 3D model of the PCB in .stl format
- Pin assignments, which GPIO is connected to what?
- Step-by-step guide for mounting the displays
- Where to buy compatible displays and other useful components
- Installing the firmware directly from your browser
- The open-source software TFT_clock is available on GitHub. Contributions are welcome, feel free to submit pull requests with improvements or new features. Also, when you found a bug or have some other issue, best thing to do is to open an issue on the issue tracker.
Displays
The PCB offers three ways to connect TFT displays. The most convenient options are the footprints for directly mounting 1.28" round displays on the back of the board or 1.69" displays on the front. You can choose to fold the flex cable back at an angle or leave it flat, depending on your case design.
For other types of TFTs, there’s a third option: using a breakout board on the expansion port. This port provides all SPI pins and MOSFET-controlled backlight outputs, allowing you to connect different displays. As long as your chosen TFT is supported by the TFT_eSPI Arduino library, it should work seamlessly.
![](20250130-010911-P1420388-2.jpg)
1,28" round 240x240 GC9A01 TFT's
![](20250130-174724-P1420405-2.jpg)
1.69" 240x280 ST7789 TFT's
![](IMG_3980.jpeg)
Custom option, using the expansion port
Controls
There are several ways to provide controls for navigating the menu system. If you want to use your own controls (for example, when the position of the controls on the pcb is not suitable for your case design) you can use header H1 to extend the connections. The GPIO pins are shared between the methods, so you can choose only one, or get creative!
![](20250130-020927-IMG_3934(4)-2.jpg)
Rotary encoder. Tip: The cheap EC11 rotary encoders are notorious for bouncing—so much that even software debouncing often isn't reliable. To improve stability, place two 10nF capacitors between the A and B pins and ground.
![](20250130-021206-IMG_3938(5)-2.jpg)
Four push buttons, for escape, up, down and enter.
![](20250130-021245-IMG_3939(6)-2.jpg)
A miniature 5-way switch. Unfortunately, I haven't found a good way to attach a suitable cap.
Developing and Installing Software
If you just want to use the standard software and controls, you can easily flash the firmware using the web installer. However, if you’re interested in developing the software yourself, the GitHub repository contains all the source files. To compile the software, you'll need Visual Studio Code and PlatformIO.
Flashing the software usually works by simply connecting a USB cable. However, if the ESP32 is empty or stuck in a boot loop, you’ll need to manually set it to boot mode. To do this, either short the two header pins labeled 'BOOT' or, if present, press the button on SW4.
![](20250130-010015-IMG_3931(6)-2.jpg)
Case design and naming of your clock
Be creative with your clock design! I'm excited to see what others come up with. To help with designing a case, you can download the 3D model of the PCB.
I’d like to take a moment to clarify the naming of your project. While the TFT_Clock software is open source and free to modify, the QuadClock hardware is not. To keep things clear, the software is named 'TFT_Clock,' and I’d like to reserve the 'QuadClock' name for my own series of clocks. You're absolutely free to modify and build upon the hardware in any way that suits your project—just please avoid using 'QuadClock' in the model name of your clock. That said, I’d truly appreciate a small shoutout if possible! Something like "This Birdclock is powered by QuadClock PCB" would be a great way to acknowledge it. Thanks for understanding! If you have any questions about this, feel free to reach out.
Errata
There are a few minor mistakes and small annoyances on the PCB rev 1.0. These will be addressed in the next batch.
- The GPS header has the RX and TX lines mislabeled and swapped.
- The push button footprints are slightly too small. While 5x5 mm push buttons do fit, it’s a tight fit.
- The CR1220 battery holder is a through-hole type, leaving two pins exposed on the back. If you plan to mount the displays on the backside, trim these pins flush.
- The rotary encoder lacks debounce capacitors. Adding 10nF capacitors between the A and B pins and ground improves performance.
- One corner mounting hole is too close to the USB-C connector, making it difficult to use a standoff.