VERBIS - Desktop 8x8 RGB LED Matrix Word Clock




Introduction: VERBIS - Desktop 8x8 RGB LED Matrix Word Clock

Motto: In Verbis Virtus...(There is power in words)

There are many other Word Clock projects here on Instructables and elsewhere on the Internet so it is rather difficult to choose only one project as a source of inspiration because each of them offered me useful ideas. But if I must choose one, it's going to be the one that started all, the beautiful project created by Doug Jackson, presented on Wikifab. Also, I must mention two projects from here, namely: Design and 3D Print an RGB Word Clock by .A. and IKEA Ribba Word Clock by WhiteClockCompany, who influenced my project a lot too.

It's hard to bring something new with any future design, but hopefully my project will grab your attention with the fresh and cool ideas inside.

What are the pros of my project?

  • very affordable, cheap electronics and other parts;
  • opensource web server for easy management;
  • accurate time from ntp server;
  • it is possible to have multiple languages;
  • minute by minute time indication (not by 5 minutes like standard word clocks), dynamic time display and amazing flexibility for future ideas...

The idea behind this Word Clock is to have all the words necessary for telling the time and to place these words in an 8x8 letters layout as in a word search puzzle. In this way, with a small number of leds we can tell the time minute by minute. Because the words are placed randomly you can tell the time by reading the flashing words each after another (the words are already displayed on the clock face). I started with using only one color, red, also green 8x8 matrix led arrays. You can see how my first clocks are working...

I have published also an application that you can download from Google Play Puzzle WordClock.

Sadly, the electronics were a little bit complicated when using the MAX7219 led driver and the ESP12 module of ESP8266 microcontroller, the wiring was tedious and prone to errors. But with the WS2812 RGB Led Matrix things became much easier (and cheaper ...). The schematics are simple, there is no need for the esp12 board, an ESP-01 module can be used. Also the flashing words are gone, I used color change to accentuate the words for telling the time (using many colors was a big deal).

So I restarted the project with a new look and new electronics, see the renderings above of how I wanted the new word clock to look.

If you find my project interesting and useful, please take your time and vote for it in the REMIX CONTEST.

Step 1: The Enclosure


  1. wooden photo frame (80x80mm interior): wide frame (2cm), thin frame (1cm);
  2. 3mm plexiglass support;
  3. 80x80mm 3mm grey smoked transparent display plexiglass sheet;
  4. 3D printed 80x80mm 8x8 plastic grid;
  5. letter layout 80x80mm Printed Paper Sheet;
  6. 3d printed plastic box for electronics;
  7. 2mm diameter 10mm length screws.

Wooden photo frame

You can make your own frame, there are a dozen of articles about this, even here on Instructables. But a simpler solution would be finding a framing company where you can order a personalized frame with your required dimensions and you can choose from many frame types. This is exactly what I did. I ordered my frames with a specific dimension: the framed photo, in my case object (display) is 80x80mm. I also asked for an accurate dimension, I didn't want the frame to be too big for the 3D printed plastic grid.

Plexiglass support

The plexiglass support can be also be made DIY but for an amateur it is not very easy to cut and blend plexiglass. So I ordered several supports from an advertising company that makes all kinds of plexiglass objects. The dimensions I used are: width - 120mm, first part length - 180mm, second part length - 50mm, 15° bending angle.

Display plexiglass sheet

The 3mm grey smoked plexiglass sheet can be cut from a bigger sheet, obtaining the required 80x80mm dimension.

Plastic grid

The STL file for 3D printing can be downloaded from Tinkercad

Display Printed Paper Sheet

The SVG file for the Printed Paper Sheet is attached, and it can be edited with Inkscape. You can make your own display layout based on this SVG file, I used Word Search Construction Kit software to generate a words layout for the time display. You can print the file repeatedly on the same sheet of paper to achieve a good, opaque, black background. I got very good results with a cheap inkjet printer and standard white copier paper. I cut off the layout with a pair of scissors.

Plastic box for electronics

The files that you can 3d print are also on Tinkercad. I used some already purchased jewelry boxes, I only designed a new box base because the boxes were too tall. The files on Tinkercad are based on this type of boxes.

Detailed instructions (follow the images above)

  • choose (and mark) a side of the frame to be the top of the clock, clean the smoked plexiglass sheet, put it in the frame;
  • place the printed paper sheet and the 3D printed grid;
  • drill with 2 mm diameter bit through the plastic grid to make room for the screws in the frame;
  • screw the plastic grid;
  • mark on the frame the place for holes and lock the frame to the plexiglass support;
  • drill the holes with a 2mm diameter bit (enlarge the holes in the support with a 3mm diameter bit, make the coining with a 10mm diameter bit) and screw it all together.

The last two images shows an almost finished enclosure.

Step 2: The Electronics


  1. ESP-01 Board;
  2. 5v to 3.3v stabilizer module;
  3. 80x80mm RGB 8x8 LedMatrix;
  4. 3pin 2.54mm Pitch XH Pin Header+Connector;
  5. Female DC Conector cable 5.5mmx2.1mm(2.5mm);
  6. 5v/1.5A Power supply with 5.5mmx2.1mm(2.5mm) Male connector.

Cheap and versatile microcontroller module with WiFi capability, if you don't know about it read this good instructable by TonesB ESP8266 WiFi Module for Dummies.

3.3v stabilizer module

The ESP-01 requires to be powered with 3.3v, I used here a 4pin module.

Led Matrix 64led RGB Matrix with WS8212 IC

You can read more in Getting Started With NeoPixel / WS2812 RGB LED by Open Green Energy.

3 Pin Header and connector

I used this connector because it permits easy assembly-disassembly of the enclosure.

DC connector and DC power supply

The power supply is 5v and 1.5A maximum, it is rather enough because not all leds are lightened up at full brightness and full white. Also I opted for a separate DC connector because it is simple to replace a defective power supply.

Schematics - Very simple, made with Fritzing, see the image above.

Detailed instructions

  • solder the 3pin connector to the LED Matrix;
  • change the order of the red and black wire in the header (it is good to respect some rules for colors used in wirings, so a red color wire for 5v and a black color wire for ground);
  • drill a hole in the plexiglass support where the 3pin connector is located and enlarge the hole (with a Dremel for example) to accommodate the 3pin connector;
  • make the modules soldering like in images;
  • place in the box the modules, the power and the XH wire ends in the plastic box;
  • twist and solder together the wire ends; isolate and strengthen the twisted wire ends with 2mm interior heat shrink tubing;
  • fix the Led Matrix to the 3D printed plastic grid (with a hot melt glue gun);
  • assemble all :)

Step 3: The Software and Programming the ESP-01 Board

There are several ways for programming the ESP-01 board, take a look if you want to find more information and read instructables, such as:

My way for flashing the ESP-01 is using an adapter with a PL2303 chip (USB to Serial converter), depicted in this instructable too Getting Started With Esp 8266 Esp-01 With Arduino IDE (by electronicGURU). Also to make the programming easier, I used a breadboard adapter like this and I connected it to the USB to Serial converter. You can see in the images the wiring between these two modules: 3.3v-RED, Ground-BLACK, RX from the converter to TX on adapter-PURPLE, TX from the converter to RX on adapter-GREY. On the adapter I soldered a switch (PROG) between GPIO0 and GND pins and a switch (RESET) between RST and GND pins.

Step by step instructions:

  • download and install the Arduino IDE;
  • download the source for the Verbis word clock;
  • install in Arduino IDE the ESP support libraries - more here;
  • insert the ESP-01 Board in the breadboard adapter and connect the USB to Serial converter to an USB port of the computer;
  • open in Files-Examples-ESP8266 the CheckFlashConfig sketch and then make the configuration options in TOOLS like in the image (you will have another COM port eventually);
  • open a serial monitor (TOOLS - SERIAL MONITOR), make the configs (Both NL&CR, 115200 baud) and push the RESET switch on the breadboard adapter;
  • you will see something like in the image above with the 'ready' word on the last line, it means the ESP Board is working and you can find on your phone a new WiFi Access Point;
  • to put the ESP board in programming mode, gently push the PROG switch and keep pushing, then push and release the RESET switch, THEN(!) release the PROGRAM switch, in the SERIAL MONITOR you must see a garbled line after the ready line (see image);
  • click the UPLOAD button in the Arduino IDE, wait for the sketch to be compiled and uploaded, then verify the SERIAL MONITOR again, if you have a line with 'Flash Chip configuration ok' then the programming options in the Arduino IDE are good. If no, make the necessary changes;
  • unzip the sources and open, with the Arduino IDE, the VerbisMain.ino file, put the ESP board in programming mode and upload the program, if everything is good you will see in the SERIAL MONITOR the word clock's initial configuration and a WiFi Access Point on your phone.

The programming of the ESP-01 board can be made before you solder any wire to the module (see step 2 - The Electronics) but can also be made when the soldering is already made (everything assembled in the electronics box). In this case remove the RED wire between the converter and the adapter (very important !!!) because you will use 3.3v from the stabilizer module, not from the USB to Serial Converter (see image).

Step 4: Configuring and Using the Clock

After correctly flashing the ESP-01 module, start the clock. On the display you will see an animation like bellow.

You will find a new WiFi Access Point on your phone called VERBIS and a serial (a bunch of numbers). You can connect to this Access Point, with no password, open a browser (Chrome is preferred) and go to page. (When the ESP-01 is in Access Point mode it will always have the IP This IP is hardwired in the microcontroller's firmware).

You will see now the word clock's main menu. Go to the 'NETWORK CONFIGURATION' submenu and wait for the search for the surrounding routers to finish. Select your router's name from the list (in my case the 'mi' router), the name will be copied to the 'SSID' textbox, enter the password and push the 'SAVE' button. Wait a little bit and try to reconnect to the clock on the same IP ( Select 'NETWORK INFORMATION' where you can find what IP the clock has gotten. Restart the clock (unplug and plug the power adapter) and you will see a pattern like bellow on the display.

The clock is trying to connect to the router and the ntp server. If there is connection with the ntp server, the word clock's internal time will synchronize with the NTP server's time and the corresponding words will appear on the display. If there is no connection, the pattern will continue to show. The clock will try to reconnect to the NTP server each minute until a successful connection.

If you have no router you can access the 'MANUAL TIME SETTING' submenu and enter the time in the corresponding text boxes. Also if the clock is connected to a router but it doesn't have a connection to the ntp server, you can use this submenu to set the time until a time synchronization. In this case, when the connection to the ntp server will occur, the time will synchronize automatically in the background.

The 'NTP SETTING' submenu options are pretty explanatory, I don't have too much to say about them...

If you access the 'DISPLAY SETTINGS' submenu you can change the two colors between which the transition occurs when the words are displayed. Also, you can change if the words 'IT IS' are displayed or not at the beginning of the time telling.

Step 5: Final Thoughts

What's next?

An alternate enclosure can be made using a wide wooden photo frame, you can see a rendering and an actual image above. The 15° tilt is made with a small plexiglass support.

The electronics can be drastically simplified by using a WS2812 RGB LED Controller Module (in the image with the wide photo frame the clock is made with such a module). The box used in this case is also on Thinkercad. Of course, you will need an ESP-01 module for this approach.

If you have access to a laser cutter you can make your paper sheet by laser cutting a black sheet, use stencil fonts in this case.

You can make a VERBIS word clock also in other languages. I have made the letter layout and the programming for german, hungarian and romanian. Change in the first line of the source code the language (DE_clock, RO_clock or HU_clock). The printable layouts are attached too.

But why stop here? Print a paper sheet (empty sheet in the image above) and you can make a digital clock, very similar to this Full Binary Clock; you can make a Fibonacci clock like in the instructable The Fibonacci Clock but also a digital clock (with the hours and minutes colors changing alternatively similar to VERBIS word clock).

Also this very cute clock Amazing Binary Clock in a LED Matrix deserves a try.

Of course you need to modify the ESP-01 firmware but I think it is not so difficult if you already have a template you can rely on.

But many many other projects are possible with this cheap and easy to build design.

Remix Contest

Runner Up in the
Remix Contest

2 People Made This Project!


  • Space Contest

    Space Contest
  • Fashion Challenge

    Fashion Challenge
  • Micro:bit Contest

    Micro:bit Contest



Question 2 months ago

Dear Andrei, very nice project, I have a question, may i use a Wemos D1 mini (I have a lot of them...) instead of ESP-01? Wich is the righ pins connection, end do I have to change something in the code? Thanks a lot. Doriano


Answer 2 months ago

You can use a Wemos D1 mini without problems. I recommend to connectu the DATA pin (of the LED Matrix) to the D2 output of the Wemos module (GPIO 4 of the ESP8266) and of course change the line
#defineDATA_PIN 2
in LedMatrix_functions.h to
#defineDATA_PIN 4


Reply 5 weeks ago

Dear Andrei, thanks a lot, it works.
But I have a problem, the led on the top left corner is blinking sometime, see the picture.
Do you have some idea how to solve it?
Thank you and Regards,


Reply 5 weeks ago

You can try to put a 3k resistor betwen Vcc and Data IN of the LED strip.
I did this in my "\Cistercian Clock" instructable.
Hope it helps.


Reply 5 weeks ago

Hi, unfortunatly it does not work.
I try with both D1 mini and ESP 01,with and without the resistor, I also try 3 led matrix, next I will try a led matrix of another brand... It is a pitty.
Thanks anyway


Reply 5 weeks ago

Try also with another power supply...
Looks like I was lucky with my LED arrays. I had no problems although I ordered them from different sellers on alliexpress considering only the lowest price.


Reply 5 weeks ago

Hi, there is nothing to do, I change the led matrix, the circuit, the power supply, but the led "P" (top-left led) continue to blik in random way....
Could be a bug in the code? maybe no, since yours is ok.


Reply 5 weeks ago

I built several watches like this, I gave some to my friends, I always used the same code and I didn't have this problem. Until we blame the program (or the programmer :) ) you can try another output of the wemos module, try another wemos module.
You can also try downgrading the fastled library or even the ESP8266 framework.
You could even sacrifice a WS2812 LED in a led strip to be the first LED in the series of LEDs and blink hidden without affecting other LEDs. Of course the code must be adapted in this case.


Reply 4 weeks ago

Thanks Andrei, sorry to bore you again... could you tell me how to change the code to 'move' the led P to the position number 9, so I can remove the led number 1 and see what happen...of course I try also other fastled library version with no results.


Reply 4 weeks ago

I do not quite understand your question. The order of the LED's in the strip can not be changed. In code you can change the definitions for the words used to display in HourStrings_EN.h The 9th LED (the 8th LED to be precise) is under the "P" from PAST and is not used. I think you want to use that LED. In this case just modify de line
String C_past = "00010203*";//
String C_past = "08010203*";//
Hope it helps


Reply 4 weeks ago

Hi, you understand very well, I modify the code, but, it's unbelievable,
the matrix display "PAST" on the same led as before, so led N. 0,1,2,3.
I don't know why....


Reply 27 days ago

I don't really understand what's going on either... Are you sure that after you made the changes you successfully recompiled and uploaded the program?


Reply 27 days ago

I think so.. I got this messages in red, during compilation, is it ok?

In file included from D:\ARDUINO\Progetti\VerbisMain\VerbisMain.ino:4:
D:\ARDUINO\Progetti\libraries\FastLED/FastLED.h:14:21: note: '#pragma message: FastLED version 3.003.002'
14 | # pragma message "FastLED version 3.003.002"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from D:\ARDUINO\Progetti\libraries\FastLED/FastLED.h:65,
from D:\ARDUINO\Progetti\VerbisMain\VerbisMain.ino:4:
D:\ARDUINO\Progetti\libraries\FastLED/fastspi.h:130:23: note: '#pragma message: No hardware SPI pins defined. All SPI access will default to bitbanged output'
130 | # pragma message "No hardware SPI pins defined. All SPI access will default to bitbanged output"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Executable segment sizes:
ICACHE : 32768 - flash instruction cache
IROM : 307076 - code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 26861 / 32768 - code in IRAM (IRAM_ATTR, ISRs...)
DATA : 1504 ) - initialized variables (global, static) in RAM/HEAP
RODATA : 3336 ) / 81920 - constants (global, static) in RAM/HEAP
BSS : 27032 ) - zeroed variables (global, static) in RAM/HEAP


Reply 22 days ago

Have you tried with another wemos output, for example D1 and change the code to
#defineDATA_PIN 1


Reply 21 days ago

Finally I solve it, thanks, it was my mistake. But regarding led n.0 no way I move the P to led n.8 and cover with black tape the led 0.
By the way, I’m also preparing a version in italian language,
Do you think could be interesting for someone? In case I could share code modification and mask.


Reply 21 days ago

I'm glad you made it.
About the flickering... Maybe you can try to compile the sources again but downgrade not only the esp8266 board manager but also the fastled library:
esp8266 board manager 2.2.0
fastled library 3.1.6
I'm interested in an italian version, I want many languages to chose from in the sources.


Reply 18 days ago

Thanks, I'll try downgrading...
Meanwhile, how can I send to you the modified codes for Italian language?
Relevant changes are in TimeGen_.. and HourStrings_.. of course.


Reply 18 days ago

Some texts are also in some pages, look at the github. And do not forget the letters layout.
Send me what you have to my email address:


Reply 27 days ago

Yes, that's ok.