Home        Kenley Weather     Guestbook

Section   Top  Credits    Components     Setup      Using the Ticker Board      Display Examples     Display    Display Modifications     Case Construction    Controls    Schematic     Vero Board     Code




ESP32 powered LED matrix displaying real-time news, weather, stock, date, time, barometer data, menu and web interface with notification.



There are 2 parts to the display. The top row shows date & time form an internet time server, indoor temperature, humidity and air pressure from the built in BMP280 module.

The customizable lower display ticker shows the following

todays date and time

local sunset for today and yesterday

local sunrise for today and yesterday

local day length and daily increase

 weather for customized locations

 weather forecast for customized locations

your YouTube stats

new headlines from location of your choice

share price information

message notifications



The display is housed in a timber/MDF box made from wood off cuts, a Neutral Density Perspex cover provides contrast for the display.



This project is a modification of the original by ericBcreator and full details of his project can be found here.

below the original clock design by ericBcreator


I have made the following changes to the original project to suit my needs and have marked them //Brett in the code where possible.

  • added sea level correction for air pressure - this keeps my barometric readings standard across the world

  • added version number to the web interface

  • changed light sensor pin to 34 to keep the wiring/code standard across 30 and 38 pin ESP32s

  • added choices for diff MAX7219 hardware settings - there seems to be 4 different wiring layouts for the display modules depending on manufacturer

  • change rotary encoder pins just for ease of my layout

  • removed WIKI  display as it was not reliable or useful to me

  • You Tube daily stats added along with average views per hour that day

  • sunrise sunset times added for the previous day

  • day length added including increase in day length in minutes

  • added PIR/Microwave motion sense display blanking - most power is consumed by the displays so they now shutdown when no one is in the room

  • PIR/Microwave motion sense disables all internet API checks except YouTube






The microprocessor is an ESP32 module either 30 or 38 pin.



4 in 1 MAX2719 LED Dot Matrix Display

The display uses 4 off MAX7219 4 in 1 LED Matrix modules. Each of the 4 modules contain 4 x 8x8 LED matrixes that's 1024 LEDs in total.


Alternative version with no socket for the Dot Matrix display saving space.





Air Pressure Temperature and Humidity Sensor

BMP/BME280 module

Bosch BME280 Humidity and Pressure Sensor is an integrated environmental sensor developed specifically for mobile applications where size and low power consumption are key design constraints.

The unit combines individual high linearity, high accuracy sensors for pressure, humidity and temperature in an 8-pin metal-lid LGA package, designed for low current consumption (3.6μA @1Hz), long term stability and high EMC robustness.

The humidity sensor features an extremely fast response time which supports performance requirements for emerging applications such as context awareness, and high accuracy over a wide temperature range.

The pressure sensor is an absolute barometric pressure sensor which features exceptionally high accuracy and resolution at very low noise.

The integrated temperature sensor has been optimized for very low noise and high resolution. It is primarily used for temperature compensation of the pressure and humidity sensors, and can also be used for estimating ambient temperature.

The Bosch BME280 supports a full suite of operating modes which provides the flexibility to optimize the device for power consumption, resolution, and filter performance.


BME280 sensor close-up

Interface: I2C & SPI
Supply Voltage: 1.71V to 3.6V
Temperature Range: -40 to +85°C
Humidity Range: 0% to 100% rel. humidity
Pressure Range: 300hPa to 1100hPa





Power Supply Module

This DC to DC Step-Down Adjustable Power Supply Module is based on the LM2596 switching regulator.

This module converts the 12v input to 5 volts for the displays and RESP32.

The ESP32's built in regulator supplies the 3.3v supply for the BMP/BME280 sensor.

Input voltage: 4-35V
Output Voltage: 1.5-35V (adjustable)
Output current: rated current 2A, maximum 3A (heat sink required)
Conversion efficiency: Up to 92% (the higher the voltage, the higher the efficiency)
Switching Frequency: 150KHz
Rectifier: Non-Synchronous Rectification
Module Properties: Non-isolated step-down module (buck)
Short circuit protection: current limiting




Rotary Encoder

The schematic for this project uses a standard rotary encoder with push switch



The switch is connected to the 2 pins on the left and the 3 pins on the right are ground in the middle and the other 2 outer pins are DT and Clk   




You can get a rotary encoder in module form, in this case leave out R3 and R4 on the schematic






Movement Detectors

These sensors will turn on the display only if movement is detected and also stop reading APIs for Weather, News and Stocks.

The YouTube API stat will continue to run as I build stats off stats in the code.

There are a couple of types of movement detectors and both have about the same range


The advantage of these modules is they come with a built in timer and sensitivity adjustment my code is written for these detectors.

The disadvantage is they can't be fitted in the case of the project unless a hole is cut for the sensor window.

In my setup the detector is in the ceiling and controls all my clocks in my study.


Here are a few ideas on fitting PIRs remotely taken from my other clocks

This version has a built in power switch that can be used for the LED Matrix Board










RCWL-0516 Microwave Radar Motion Detector

These modules use microwave radiation to detect movement and can be fitted behind the Perspex cover without having to cut a hole for the sensor.

The disadvantage is that you have a built in timer so will need a bit of code to add the timing.






Setting Up

To see debug messages on the serial port go to line 76 and remove the "//" from #define DEBUG


You will need to enter your router SSID and pass key into the code

Once working the IP address will be shown. I then go to my router and make this a static address.

This will always be the address for your ticker board so you can setup a bookmark or shortcut key on your mobile.






This is a library for the Adafruit BME280 Humidity, Barometric Pressure + Temp sensor

Designed specifically to work with the Adafruit BME280 Breakout but will work will other BME280 modules with I2C only.


Nnote use v5 or roll back to v5 if a newer version is installed

ArduinoJson is a C++ JSON library for Arduino and IoT (Internet Of Things).


Minimal Arduino library for sunrise and sunset time.

Given some basic data, such as geographic coordinates and a date, an estimate time of apparent sunrise or sunset is returned in minutes elapsed since midnight.



The library implements functions that allow the MAX72xx to be used for LED matrices (64 individual LEDs), allowing the programmer to use the LED matrix as a pixel device, displaying graphics elements much like any other pixel addressable display.



Parola is a modular scrolling text display using MAX7219 or MAX7221 LED matrix display controllers using Arduino.

Support for mixing text and graphics on the same display



A library for the Arduino environment for using a rotary encoder as an input.




Time is a library that provides timekeeping functionality for Arduino.




Display Settings

Depending on the 4 in 1 modules manufacturer there seems to be around four different wiring configurations.

If your display comes out backwards or reversed you will need to try a different setting.

In the code I have added the four different settings. Just remove the comment on the one you want to tryout.


below the four different setting that can be selected in the code

//#define HARDWARE_TYPE MD_MAX72XX::FC16_HW // @EB-setup define the type of hardware connected

//#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW // @EB-setup define the type of hardware connected

//#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW // @EB-setup define the type of hardware connected

#define HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW // @EB-setup define the type of hardware connected







Sea Level adjustment

Your pressure sensor will show your Air pressure reading at your location (height).

To show a corrected air pressure as shown in forecasts enter a sea level correction value for "sea_level" on line 137

To get the sea_level value get your current air pressure from the internet and take it off the reading from the serial terminal (Pressure not sea level). My value is 16.68



The code requires API setup for YouTube, the Weather, Stock info and News feeds.

Enter your API key into the code



You will need to create a YouTube API Key


Getting a Google Apps API key

Create an application here

On the API Manager section, go to "Credentials" and create a new API key

Enable your application to communicate the YouTube Api here


Use this link to check your YouTube API key works




Goto OpenWeather sign up and get an API key

get your location ID at https://openweathermap.org/ type the city, click search and click on the town

then check the link, like this: https://openweathermap.org/city/5128581 5128581 is the ID for New York


Stock Info


Get your API Key


News Feeds

Go to NewsAPI and get your API Key












Usage Instructions

How to use the WIFI Message Board.

Power up the massage board by pressing the power button on the right side of the case.

The message "connecting to wifi" will be displayed. Once connected the IP address of the connection will be displayed.

The message board will then attempt to connect to the time server and display "connecting to time server"

Once connected the display will show if DST is active.

After a short delay the time and date will be shown followed by the programmed menu items in order






The menus are selected by turning the control knob on the left of the case.






Pressing the control button during normal display will jump to the next item in the programmed list and display it.






Display examples







Sunrise Yesterday & Today for your location





Sunset Yesterday & Today for your location




Day Length & Increase/Decrease for your location




Local Weather






News Headlines (UK)






Share/Stock Price




Web Interface

The web interface is accessed  from a web browser using the IP address shown at startup or by selecting  "IP Address" from the menu.

There are buttons to control the device as well as an option to send a message to the display.

To send a message type in the IP address into a browser, type the message and hit send.

The message board will bleep to alert you of a new message.

If you set the ESP32 Mac address as static on your router you can always use the same address and create a shortcut on your phone.







YouTube Stats



You will need to create a YouTube API Key


Getting a Google Apps API key

Create an application here

On the API Manager section, go to "Credentials" and create a new API key

Enable your application to communicate the YouTube Api here


Use this link to check your YouTube API key works








The displays are made up of 4 off 4 in 1 matrix modules.

The modules are linked together as 2 pairs comprising  4 x 4 in 1 modules.





Each module contains a Max2719 IC display driver chip

Two sets of 4 in 1 module are joined via their in and out pins using a row of 5 DuPont plugs bent over and soldered in place.


The Matrix displays are 1088AS Red LED displays.


Emitted Colour: Red

Face Color: Black

Type: Row Cathode Column Anode

Wavelength : 625 ~ 630nm

Forward Voltage : 2.1V ~ 2.5V

Forward Current: 20mA

Dimesions: 32mm x 32mm x 8.0mm

Close-up section shown LED connections





Matrix Display Modifications

Each of the 16 MAX2719 modules will need to be modified.

The data sheet calls for Supply Bypassing  to minimize power-supply ripple due to the peak digit driver currents,

connect a 10µF electrolytic and a 0.1µF ceramic capacitor between V+ and GND as close to the device as possible.

The MAX7219/MAX7221 should be placed in close proximity to the LED display, and connections should be kept as short as possible to minimize the effects of wiring inductance and electromagnetic interference.

Also, both GND pins must be connected to ground.

My modules had a 0.1µF ceramic capacitor between V+ and GND but the 10µF electrolytic capacitor was not fitted.

I fitted these 10µF electrolytic capacitors to the back of every module as per thr pic below.




Selecting the RSET Resistor

The current per segment is approximately 100 times the current in ISET. To select RSET, see Table 11. The MAX7219/MAX7221’s maximum recommended segment current is 40mA.

My modules were fitted with a 10K resistor see R1 below.

Using the table below shows the ISET resistor R1 mounted on the PCB and is set to 10K

This would allow a current of 40mA to flow through the Matrix LEDs.

You can either replace the surface mount LEDs with a 25K to 28K resistor or limit the brightness setting in the code to a max of 7.


table 11






































RSET resistor R1 can be replaced by a 25K to 28K

Wiring 5v to the displays.

To help prevent display errors it's worth wiring several separate feeds to the LED Matrixes.



Case Construction

The case is constructed from 18mm MDF Sheet and offcuts of wood.




To make the top of the case first cut out the outside edge of the sheet from MDF.

Then cut out the inside edge of the sheet.





The sides of the case are made from 8mm chipboard (2x ends) and 12mm x 32mm timber battens make up the top and bottom of the box.

These parts are glued and screwed together.









The parts go together as shown.

The top is fixed to the rear case with 2 small hinges at the top and a thumbscrew at the bottom.

The rear case is fixed to the wall mounting bracket with removable steel pins through the left and right sides.



The base/wall mounting bracket is made from 8m chipboard with timber off cuts for fixing to the case sides with fixing pins.




The case is painted black and the edge of the top of the case covered in white melamine iron on edging.


Case with all boards and modules in place.

The rear of the Chicago Fasteners can be seen on the four corners of the lid.

The stud for the thumbscrew and front fixing bracket have yet to be fitted along with the 2 extra runs of power wiring to the center of the displays.





The case is held in place on the mounting board with 2 metal pins made from miniature cabinet knobs on part threaded bars.

The pins push through the sides of the case and locate with a friction fit in the wooded tangs on the mounting board.




The case is finished of with a sheet of neutral density or dark grey tinted Perspex sheet.

This sheet massively increases the contrast to give a jet black background and bright red lettering even in the brightest room.



Perspex can be cut with a fine blade on a jigsaw/band saw or using a Stanley knife.

Finish off sanded edges with the flame of a plumbers torch.



The sheet is held in place by four Chicago Fasteners.






Front Fixing

The front of the hinged case is fixed in place with a thumb nut and stud through a small angle bracket.

The angle bracket is screwed to the front of the lower part of the case.

A hole is drilled in the bracket to take the threaded stud from the thumb screw. The stud is fixed to the case top with just a friction fit into a drilled hole.

With the case closed the thumb nut is screwed onto the stud holding the case top in place.

The fixing is not visible from the front of the case.



Fixing detail with the display hinged up to show the stud and angle bracket locations.

Thumb Nut




View from the back of the case with wall mounting plate in place showing the thumb nut securing the lower case to the hinged upper part.

The Chicago Fasteners holding the Perspex cover can be seen on the corners of the case.

I have impact glued 2 metal washers as escutcheon plates around the holes where the metal pins go through.

Note the metal pins are shown removed to allow the case to be pulled away from the mounting board.


Case Dimensions










View from below









I have drawn schematics for both 30 and 38 pin ESP32s



Schematic 1 30pin ESP32

Note see details on 4in1 display mod.

Use level shifted inputs for 5v motion sensor outputs or non level shifted for 3.3v motion sensor outputs.








Schematic 2 ECP32 38 Pin

Note see details on 4in1 display mod.

Use level shifted inputs for 5v motion sensor outputs or non level shifted for 3.3v motion sensor outputs.






Vero Board Layouts

I have included layouts for 30 pin and 38 pin ESP32s but have not built the 30pin version on Vero Board so make sure you check for error before building


ESP32 30 Pin



Rear flipped down




ESP32 38 Pin


Rear flipped down






V22 code see setup



Programming the ESP32

STEP 1: Open the Arduino IDE and go to Files -> Preferences to open the preferences window and locate the “Additional Boards Manager URLs:” as shown below

STEP 2: This text box might be empty or might also contain some other URL if you have used it previously for ESP8266. If it is empty simply paste the URL below into the text box


If the text box already contains some other URL just add this URL to it, separate both with a comma (,).

https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json


STEP 3: Now go to Tools -> Boards -> Board Managers to open the Board manager window and search for ESP32.

If the URL was pasted correctly you should see the esp32 board as below.

 Just click on the Install button (grayed out as it's already installed on my machine) and your board should get installed.


Programming ESP32 with Arduino IDE:

STEP 1: Connect your ESP32 board to your computer through the micro-USB cable. Make sure the red LED goes high on the module to ensure power supply.

STEP 2:  Start the Arduino IDE and navigate to Tools -> Boards and select ESP32Dev Module board as shown below