It is a IOT project developed using ESP8266 (NodeMCU) wifi module. The motive of the project is to create a web server on the module that can host multiple clients over the network. Here, basic knowledge of html and javaScript is needed to understand my project. Some advance topic which I will discuss here regarding ESP8266 and javaScript are:

1. Uploading files on the SPIFFS of the ESP8266 to use those file more efficiently in our arduino code.

2. Web storage using javaScript


Up until now, we’ve always included the HTML for our web pages as string literals in our sketch. This makes our code very hard to read, and you’ll run out of memory rather quickly.

SPIFFS a light-weight file system for microcontrollers with an SPI flash chip. The on-board flash chip of the ESP8266 has plenty of space for your webpages, especially if you have the 1MB, 2MB or 4MB version.

You can understand how to add tools in your arduino software for uploading files to SPIFFS by following link:

In this project, I have 2 html file and a Javascript file. All these files are uploaded to the SPIFFS separated from the sketch so that the change in these files is independent of the main sketch.

Both the html files are retrieved by prepareFile() as shown below:

void prepareFile(){
 bool ok = SPIFFS.begin();
 if (ok) {
   File f ="/index.html", "r");
   data = f.readString();
     Serial.println("No such file found.");

while the javascript file is read using the loadScript() as shown below:

void loadScript(String path,String type){


You can understand how to use different objects and methods of local storage in HTML5 using javascript from the following article:

I will discuss the use of local storage in my project in the working section.


  • NodeMCU ESP8266 12E Wifi module
  • Solderless breadboard
  • Jumper wire
  • 7 Segent Display (Common Cathode)
  • 1K ohm resistor
  • Micro-USB cable (for connecting NodeMCU with your computer)


The connections are really easy. In the above circuit diagram, pins of nodemcu is connected in following fashion:

A –> D1

B –> D2

C –> D3

D –> D4

E –> D6

F –> D7

G –> D8

where A,B,C,D,E & F are the segments of 7 Segment Display

Ignore the DP of 7 segment Display. Don’t connect it with the pin D5 of ESP



As discussed earlier, we have two html files. One of which is the root html page called when ESP8266 server received “/” i.e If the URI ‘/’ is requested, the server should reply with a HTTP status code of 200 (Ok) and then send a response with the “index.html” file.

The second html file will be sent when the client request from the root page by submitting an input on the form. As soon as, the server gets the input POSTED from the form, it compare it with fixed string value and send the second html page in response.

if(server.arg("nam") == "0") { 
   server.send(200, "text/html", data1);
   sevenSeg(0); }

Since the html for 2nd page is not defined in the sketch, so here we are referencing “data1” that is already read the html codes using SPIFFS.readString()


Here sevenSeg() is also called with an argument “0” so that it can be used to display “0” by switching different segments ON and OFF. Here, I made the name of fuction self explanatory i.e onA() will turn on the A segment of 7 seg display on breadboard, similarly offA will switch it off.

So, in this case to display “0”, we have to switch all segment except G(DP is ignored as it is not connected to any pin of ESP8266). So my function looks like:

    onA(); onB(); onC(); onD(); onE(); onF();


The index.html has a canvas having 7 segment display in off mode and form below it. This is what you see after opening it:

If we want use our webpage without ESP8266, it will be possible by changing the link in the action attribute of your form.Currently this is the link in action:

<form id="form1" action="" method="POST">

Here you can see that the link in action is the same ip address which is alloted to your nodeMCU after connecting to any wifi(or hotspot). The form tag after adjustment looks like:

<form id="form1" action="Computer location of index1.html" method="POST">

Here, I am using web stroge of the browser to store the input value of the user such that the value entered in index.html is stored in the browser locally( like cookie). That value is fetched by the index1.html and number is displayed on the 7 segment display on html canvas.You might understand this procedure by following video:


This is the repository link of the code of my project. If you are working with SPIFFS in ESP8266, you can understand why I have placed the html and javascript files in data folder.Use that as it it.

GitHub Repository Link


If It Helps, Please Subscribe


This project will work with your nodemcu if you take care of following points :

1. The link in the action attribute of root html file should be “http://(IP on Serial monitor or IP alloted to your ESP)/submit”.

2. Use latest version of browser that supports html5 and new tags and functionality.

3. SPIFFS will work only if your index.html, index1.html and main.js are put together in the data folder. You can clone the code file from my github

3 thoughts on “Controlling 7 segment LED display with ESP8266 Web Server”

  1. Reminds me of my first project, I multiplexed four 7 segment displays with a 6800 complete with wire-wrapped 8 bit bus for RAM and ROM, and also a parallel I/O IC….. 🙂 soooo much simpler these days!

  2. Hi kumar nice work..keep it up. ever thought about How to access your node mcu from anywhere in using any web browser..?

    Do you know any code which use DDNS server like Duck DDNS or NOIP services to access your nodemcu from anywhere i am using wifi from Android lollipop 5.1 phone …

    Can u help me to add such DDNS code to your sketch …?

    Thanks in Advance.

Leave a Reply

Your email address will not be published. Required fields are marked *

Captcha loading...