A small, cheap, reliable device is making its way into technology. We call it ESP8266 Wi-Fi module which has reached almost everywhere. However, the fact that its related information on data sheets and documents are provided in a Chinese language; Mandarin makes the implementation process complicated. As a solution, people have opted for ESP8266 community forum which discuss issues user of this module tackle while programming this module.
This small wifi-chip ESP8266 constitutes a built-in 32-bit low-power CPU. The chip itself can be employed as a stand-alone device or can be used along with a microcontroller to resolve wifi networks and carry out software applications. The COM port in this module ensures connection of the inbuilt-AT Command Firmware with the microcontroller.
Circuit Description of Arduino and ESP8266 Based Web Server
The circuit diagram of Arduino and ESP8622 Based Web Server is shown in figure 1. The power supply of 3.3 volts is provided to the module. To establish the connection between the PC and COM port of the module, connector; CON2 is used. USB-to-serial converter helps to feed the program to the module. In cases where PC has inbuilt COM port, the converter can be avoided.
There are all-together 16 pins on the wifi module ESP8266. The 3.3volt supply is provided at the pin 1 (RESET) through resistor R5 and for manual reset push-button S2 is attached. Similarly, another pin 12 (Programing mode pin; GPIO0) is connected to 3.3V through resistor R3, and a switch S1 is placed to switch on the programming mode. With R8, pin 3 (CH_PD) is also clamped to the supply 3.3V.
It is a must to measure the voltage level in the sensor or a battery and for that purpose the chip uses a general-purpose 10-bit resolution ADC (pin 2). However, during transmission process through the chip, the ADC cannot measure accurate voltage level and it is better if we avoid such situations.
Over-voltage running through the circuit is one of the worst scenario we can think of, it will ruin the circuit completely and to eliminate that possibility, a snap-back circuit is connected in between the pad and the ground protecting all digital input/output pins. Though the snap-back circuit has 6V capacity, it can hold a maximum voltage level of 5.8 V. The snap-back circuit also provides protection from ESD. Diodes are responsible for protection of output devices from reverse voltage. And, in the same way LED1 is connected to pin 11 (GPIO2), Pin 6 (GPIO12) is connected to 3.3V through resistor R4 and it constitutes a push-button (S3) for debugging purposes.
Since the output pin arrangement pattern differs from suppliers, the Wifi-module doesn’t have a particular PCB design.
Here we designed the PCB as per our requirement. The project is designed to monitor the room temperature using a temperature sensor LM35 and control LED using the web browser. This temperature sensor has sensitivity of 10 milli-volt/1°C. This is just one simple reference of how to utilize the module into practical life. You are free to implement in multiple ways possible.
The module has unlimited applications; it can be used for home automation, industrial wireless control, IP cameras, mesh networks, sensor networks, smart power plugs, baby monitors, wearable electronics, security ID tags, position system beacons and location-aware devices and many more.
Software Code of Arduino and ESP8266 based Web Server
Arduino is used just to feed the program to the module. And so, Arduino IDE is responsible for compiling and loading programs. A suitable plugin has been developed by the ESP8266 community which makes it easy to use with Arduino IDE. It supports three varieties of WiFi-boards; generic ESP8266 board, node MCU ESP8266 board and OLIMEX ESP8266 development board.
Procedure of Installing ESP8266 Addon in Arduino IDE (1.8.5 Version).
- At first download the latest version of Arduino IDE from arduno.cc and install it on your system.
- Lunch Arduino IDE and open File from menu and then click on preferences as shown in figure 2.
- A Preference window will pup-up. In that choose Additional Boards Manager URLs and enter the given link and click ok as shown in figure 3. http://Arduino.esp8266.com/stable/package_esp8266com_index.json.
- Now click on “Tools” from menu and then ‘Board: “Arduino/Genuino Uno”’. After that select on “Boards Manager..” as shown in figure 4.
- Now scroll down and find “esp8266 by ESP8266 Community” and highlight it by clicking on it and then Install as shown in figure 5. Which might take several minutes according to your internet speed.
Now let’s focus on software parts, the program is easy to understand.
There are different sections in the program responsible for different tasks as mentioned below:
|setup()||Hardware Initializes by configuring the GPIO2 pin as output and GPIO12 as input.|
|setupWiFi()||does the work of configuring the wireless section.|
|loop()||assigned to handle requests from the client.|
|Function size_t sendProgmem(WiFiClient client, const char progmem, size_t size),||Sending the requested data to client|
|IN[ ]||Web page (Figure 6)|
A free software hexy is used to create array from files. It is important to remove image extension(.jpg) while creating the array for decoding purpose.
Some routines are assigned to change, store SSID and password. When the Wifi setup of ESP8266 module is completed, an 8-bit serial shift to parallel-shift register program using HCF4094 is used for LCD interface.
A USB-to-serial converter software driver is installed and the loop back test is performed.
Go to Tool in menu section and then click on Board: “Arduino/Genuino Uno”. Scroll down and select Generic ESP8266 Board Module. Once it accepts the board, feed the program using Upload button. Before doing so, connect the COM port (CON2) of the main board to your PC through serial-to-USB converter and select as well as note down the emulating virtual COM port number to ensure the program is loaded successfully to the module.
To activate the program mode, hold the Program button S1 (GPIO0) down and at the same time, press Reset button (S2) down. Then Release Reset and after that release S1 (GPIO0) button. Now ESP8266 will work in program mode. When you click on Upload button, the compilation process begins and bin file is generated which is then loaded to the Wifi module.
Then turn off the power supply to the main board and then power on the Wifi module. From the PC, open hyperterminal with the baud rate 115200 and select COM port. And, Hold switch S3 down and power-on the main board. Now, let go of the switch and enter SSID and password of your Wifi network separated by a comma. Hit the Enter button and now your SSID and password will be stored in the EEPROM.
When the Wifi connection is established, LCD1 displays the IP address of the ESP8266 module on its screen. Then go and open that IP address on the browser, you will see a Web page as shown in fig 6. There are two buttons; LEDON and LEDOFF to control the state of LEDs. Press the buttons and control the LEDs. In a similar manner, the project can also be used with other devices like fans and motors along with some modifications that includes a relay driver circuit and optocouplers in pin 11(GPIO2). AJAX scripts is used to display the status of pin 6 (GPIO12) and temperature reading, without refreshing the entire Web page.
PARTS LIST OF ARDUINO AND ESP8266 BASED WEB SERVER
|Resistors (all ¼-watt, ± 5% Carbon)|
|R1, R6 = 220 Ω
R2 = 330 Ω
R3 – R5, R7, R8 = 10 KΩ
VR1 = 10 KΩ Potmeter
|C1 = 100 µF, 25V (Electrolytic Capacitor)
C2, C4 – C7 = 0.1 µF (Ceramic Disc)
C3 = 1 µF, 25V (Electrolytic Capacitor)
|IC1 = 7805 (5V series voltage regulator)
IC2 = LM317 (adjustable voltage regulator)
IC3 = LM35 (Temperature sensor IC)
IC4 = LM358 (operational amplifier IC)
IC5 = HCF4049 (8-stage shift and store bus register)
IC6 = MAX3232 (dual EIA-3232 driver/receiver)
MODULE1 = ESP8266 module
LED1 = 5mm Any Color LED
|SW1 – SW3 = Tactile (Push-button) Switch
LCD1 = 16×2 Character Module Display
CON1 = 2-Pin Connector
CON2 = DB9 Connector
JP1 = 2-Pin Jumper Connector
USB – to – serial connector
7V – 12V DC regulated Power Supply