Intro: Yet Another Clock
As can be seen from my previous uploads I obtained some 7 Segment Display boards from some old weighing equipment.
My previous effort used an Arduino with a Real Time Clock module.
This Instructable uses a ESP8266 D1 Mini connected to an NTP server !
The code is based on an example from the ESP8266WiFi library.
I am not going to go into detail regarding the 7 Segment display wiring as there are dozens of examples on the net. The 2 boards I have, use the MAX7219 decoder driver chip, these only require 3 pins to control up to 8 x 7 Segment Displays.
I also wanted to show the date, so another 3 pins were needed !
I needed another 7 ouputs to display the Day! To get around the lack of output pins, I chose a Neo Pixel display, 1 pin, 7 outputs !
Step 1: The Hardware
12 x 7 segment displays (in my case I was very lucky to have a couple of old weighing machine boards which saved an awful lot of wiring.
1 x ESP8266 D1 Mini OR any ESP8266 with 7 or more digital outputs
2 x MAX7129 (Again, I was fortunate to have the weighing machine display boards)
1 x Straight 8 NeoPixel display
2 x level shifters
1 x 5v power supply
Step 2: The DAY Display
For this I used part of an old credit card for the base, some thick card (in my case 300gsm photo paper) and some double sided mounting tape.
Its just 2 strips of the tape with slots cut with a craft knife.The spacing being the distance between the LEDs on the NeoPixel board.
Thin strips of the card are used to create a channel for each day.
The day names are printed on clear tape with a Dymo label maker.
Step 3: Connecting Up & the Software
The ESP8266 product range is excellent maily due to
a) They are dirt cheap
b) They need very few external components
I needed 5v for the displays and 3v for the ESP so I used a couple of level shifters with a 5v power supply.
The MAX7219 only needs 3 pins to control up to 8 displays, these are pins 1 (Din),12 (Load / CS) & 13 (Clock).
These are connected via a level shifter.
The code is as follows :
// inputs: DIN pin, CLK pin, LOAD pin. number of chips
LedControl mydisplay = LedControl(3,2, 1, 1)
LedControl datedisp = LedControl(7,6, 5, 1);
The number of chips is set at 1 because I am treateting the 2 displays as separate items rather than using the DOUT and cascading them.
The NeoPixel is connected to digital output 4
#define PIN 4
#define NUMPIXELS 7 (ignoring 1 of the 8 LEDs)
There are a few #includes all of which can be found on GitHub.
Router SSID & PASSWORD need to be entered and an NTP Server selected,(I Googled free NTP Servers).
Step 4: On Power Up
On power up, the NeoPixel LEDs are rippled through, then, the 7 segment displays show alternate 'c' & '8' until a connection is made to the router.
If all segments show a contant c8 it means that a NTP server connection was not established, a reset should solve this.
Once a connection is established, the Time & Date are displayed, the Day is indicated by a blue LED.