Wol Clock ESP8266-12E + 60 LED WS2812B Analogue Digital Clock

20,558

198

33

Published

Introduction: Wol Clock ESP8266-12E + 60 LED WS2812B Analogue Digital Clock

This instructable will guide you through the process of connecting the following parts to create an interesting and accurate analogue / digital clock which will automatically set the time from the internet.

Parts needed:

ESP8266-12E module (can be bought for £3 from eBay)

Ring Wall Clock 60 WS2812 (can be bought for £9 from eBay)

Connecting wires

Tools needed:

Pliers

Soldering iron

Step 1: Connecting the Ring Wall Clock 60 WS2812 Boards Terminals Together

Separate into 4 quarter circle boards and remove any rough edges or tabs from the boards.

First connect the GND terminals

Arrange two boards on a flat surface, and solder a piece of wire (I used one of the pins from the supplied connecting strip) between the GND terminals on the boards; add another board to the free end and again solder a pin between the GND terminals; repeat this until all GND terminals are joined.

At this stage, all 4 PCBs should form a ring; correct any alignment errors by heating the GND terminals with the soldering iron and adjusting to make perfect.

Next connect the 5V terminals

This time, using the soldering iron; connect wire between each of the 4 pairs of 5V terminals.

Finally, sorting the ins and outs of data

You now have power connected to all the boards, not for you to be able to control the LEDs, you will need to supply data to each LED.

Each LED has a data in pin and a data out pin. Each LED requires 24 bits (3 bytes) of data to work. The data is sent as 8 bits of green intensity, 8 bits of red intensity and finally 8 bits of blue intensity. Once the LED has received 24 bits total of data on its data pin; it refuses any more and sends any further data to the data out pin. The data out pin should be connected to the next LED's data in pin.

Take a look at the WS2812B datasheet.

Hopefully, you have worked out that for all the 4 boards to work, you need to connect three links between data in and data out. The 4th and final data in and data out pair should not be connected as these will connect to the ESP8266-12E controller board.

Step 2: Connecting the Ring Wall Clock 60 WS2812 Boards Power and Data Terminal Wires

Using 4 pins of the supplied terminal connector, solder these at an angle so you can bring the 5V, Data in, Data out and GND terminals out to the connector without creating a short circuit.

I have shown them in the picture with my connecting wires fitted (actually you do not need data out).

I have connected the wires as below:

Red -> 5V

Blue -> Data In

Black -> GND

Step 3: Connect the LED Ring to Your ESP8266-12E Board.

Now we connect the wires from the LED ring to the ESP8266-12E board.

At the end nearest to the USB connector; you should find 5V and GND pins; connect your red and black wires here.

On the opposite side of the module, roughly half way, you should find a pin called D5; this is the data out pin from the ESP8266-12E module, and will provide data to the Data In pin on the LED ring; connect the blue wire here.

Step 4: Programming Your ESP8266-12E

I am not going to tell you how to install the Arduino software, or how to program the ESP8266-12E processor module, there are plenty of good instructables already written by very talented people; here is one which I quickly located: Programming the ESP8266-12E using Arduino software/IDE

Once you have followed the above instructable; download the Wol_Clock zip file which contains the software required to program your ESP8266-12E module. Unzip this to a location of your choice, navigate to this and open up the Wol_Clock.ino file.

Configure to connect to your WiFi

Initially, to get this working; you will need to set your network SSID and network password in the code; zoom down to lines 55 & 56 and enter the correct information within the quotes " ".

//Set your wifi details so the board can connect and get the time from the internet
const char *ssid = "WiFiSSID"; // your network SSID (name)

const char *password = "WiFiPassword!"; // your network password

Set your timezone

Configure line 52

//Set your timezone in hours difference from GMT
const int hours_Offset_From_GMT = 1;

edit the line hours_Offset_From_GMT to have your time zone offset from GMT.

Working for DST (Daylight Savings)

I have added code which now provides the correct Daylight Savings time (for Europe); this should be easy to edit to correct DST for North America.

Clock goes backwards?

Depending on which LED boards you purchase, some address clockwise, some address anti-clockwise; if your clock is going in the wrong direction; one option is to look at the time in a mirror (which admittedly is not very practical); a better solution exists on line 40. Change the line:

const char ClockGoBackwards = 1; (default)

to

const char ClockGoBackwards = 0;

One last test

Check that everything is working by clicking the "Verify" tick box in the Arduino IDE.

Hopefully the arduino IDE has done the clever work for you; but just in case it has not installed the required libraries to get this working, you will need to do this manually.

From the arduino main menu, Select Sketch -> Include Library -> Manage Libraries to bring up the library manager

In the search box, type NTP and look for an entry in the list called NTPClient; if this is not installed, install it; you should also see an entry called Time, ensure that this is installed as well.

Now change the search box to search for Neopixel, check that the entry called Adafruit NeoPixel is installed.

Hopefully, you should all be set and ready to compile and upload.

Verify that the code is in good shape to compile, and if all is good

Program the ESP8266-12E with your code

click "Upload"

You should have a good working Wol_Clock; I look forward to some of the many customisations.

Christina has already given me her input and requested the dim mode for night time, and the blinking minute hand for easy identification.

Step 5: To Finish This Off...

Having got my 3D printer built and working; I have generated some stl files to provide you with a base for the Wol Clock; also.

Please note that I have had to modify the software to make the time 180 degrees out of phase to allow the wires to be hidden in the base; and there seems to be some new changes to the time library which has made the old code no longer compatible.

OK, I won't win any photography awards, but I will hope you appreciate the base mount which hides the wires.

8 People Made This Project!

Recommendations

  • Creative Misuse Contest

    Creative Misuse Contest
  • Oil Contest

    Oil Contest
  • Water Contest

    Water Contest

33 Discussions

Hi,

Is there any way to change time update schedule from 1 hr to 1 day? My Wifi router automatically shuts off for night and clock stop working till wifi is restored in the morning.

I have changed "if (minute(t) == 0) " to" if (hour(t) == 0)" but did not make any difference.

Btw, Great clock , did it for my daughter and she loves it.

0
user
k1200s

3 months ago

Hello Jon!

Congratulations for the excelent Instructable!

I've made it and it's working.

But can you help me in this question? Last Sunday began the DST in my region, now it is GMT +1. I've tried to change the line #52 of the sketch where the offset of the GMT is adjusted, as follows:

const int hours_Offset_From_GMT = 0;

to

const int hours_Offset_From_GMT = +1;

but the displayed time it's always the same using "0" or "+1"

Do you know where it might be the problem?

Thanks, best wishes,

Eduardo

Here is the DST code for USA for those interested.

I had to create a spreadsheet with multiple years to visualize the math.
Silly me.

// For USA (2nd Sunday in March and 1st Sunday in November)

{

if (month() < 3 || month() > 11) return false;

if (month() > 3 && month() < 11) return true;

int previousSunday = day() - weekday();

if (month() == 3) return previousSunday >= 7;

if (month() == 11) return previousSunday < 0;

return false; // this line never gonna happen

}

Is there any hope to get a fastLED code of it?

I've played around a bit, but it seems to be beyound my skills (by now).

I want to integrate this clock into this code:

https://community.blynk.cc/t/smartled-controller-e...

But it is fastLED based. And as far i could find out, neopixel and fastLED in one code doesn't seem to work.

hello,

Congratulations beautiful project and design, I also built it, but I have the problem that the connecting cables are in the base of the support and the time is offset by 180 °.

How do I edit the software for correct time display?

Hi Jon_Fuge

How to stop blinking on minute hand?

The code still good working.

Any idea what could have happened as some times when usb is disconnected the clock doesn't boot up properly anymore? Today the clock "bricked", and i tried to reset, reflash the nodemcu unit and nothing works - has anyone came across something like that?

1 reply

it seems i had some bad connection in usb cable or wires - everything works now. still a great instructable!

only things you need are the .ino file and library files from github/lib. manager in arduino if you don't have them installed.

if you are on chrome, press CTRL + F to look for .ino, it is right there on the instructable. over the image of 3d-printed base -mounted clock.

0
user
gmg

1 year ago

Very nice, especially like the base.

Makers would be advised to use a 500 ohm resistor on the data line and a 1000uF capacitor across the power. See https://learn.adafruit.com/adafruit-neopixel-uberg...

I made something similar a few years ago. For a simple enclosure, consider a 12x12" shadow box picture frame. http://chronology.weebly.com/neopixel-ring-clock.html

Great Job.

It is possible ti Control the hours with 3 leds and the minutes with 2 leds?

Merry chrístmas

Thank you so much for the fanstastic ible! Got mine up and running with little fuss on the ESP-01. already ordered Smitty's boards for a more permanent set up. This is part of a project I have been working with off and on for 3yrs. Thank you so much for the code, this is what I needed. Any idea if this could be adapted to have a small web interface for updates and special features?

0
user
rexxar

1 year ago

Hi, nice instructable!

Dont you need a level shifter to drive the ws2812b with a 3v output?