
Introducing the ESP8266
In this ESP8266 tutorial, we will be using Arduino IDE. ESP8266 Wi-Fi is a microcontroller chip from Espressif with on-board Wi-Fi. It can be used as a standalone device, or as a UART to Wi-Fi adaptor to allow other microcontrollers to connect to a Wi-Fi network. For example, you can connect an ESP8266 to an Arduino to add Wi-Fi capabilities to your Arduino board. With the ESP8266, you can control inputs and outputs as you would do with an Arduino, but with Wi-Fi capabilities. This means that you can bring your projects online, which is great for home automation and internet of things applications.
The ESP8266 Boards

ESP-01

ESP-02

ESP-03

ESP-04

ESP-05

ESP-06

ESP-07

ESP-08

ESP-09

ESP-10

ESP-11

ESP-12E NodeMCU

WeMos D1 Mini
Installing the Arduino IDE
In this ESP8266 tutorials, we will download, install and prepare the Arduino IDE to work with the ESP8266.
To download the Arduino IDE, visit the following URL: https://www.arduino.cc/en/software
Select your operating system, download the software and install it.
Installing the ESP8266 add-on
To install the ESP8266 add-on in your Arduino IDE, follow these next instructions:
1) Open the preferences window in the Arduino IDE. Go to File > Preferences.
2) Enter “http://arduino.esp8266.com/stable/package_esp8266com_index.json” (without the double quotation mark)
into Additional Board Manager URLs field and press the “OK” button.

3) Go to Tools > Board > Boards Manager…

4) Search for ESP8266 and press the INSTALL button for the “ESP8266 by ESP8266 Community“:

5) After the installation, you can close the Boards Manager window.
6) Open the Arduino Tools menu.
7) Select Board > NodeMCU 1.0 (ESP-12E Module)

Creating your first project for ESP8266 tutorial
Project 1: Blink LED
To build this first circuit for this esp8266 tutorial, we will use: Lolin NodeMCU V3 (or any ESP8266 board).
This first project is just to flash the built-in LED on the NodeMCU board.
The LED is connected to pin D4 which is GPIO2.

Lolin NodeMCU front view

Lolin NodeMCU back view
The Arduino Sketch
/************************************************************************
*
* by Jutronix Embedded
* Complete project detail at http://www.jutronix.com/esp8266-tutorial/
*
***********************************************************************/
#define LEDpin D4 //set led pin
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LEDpin, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LEDpin, HIGH); // turn the LED on
delay(1000); // wait for a second
digitalWrite(LEDpin, LOW); // turn the LED off
delay(1000); // wait for a second
}
Uploading Code to ESP8266
Uploading code to your ESP-12E NodeMCU Kit or any other ESP8266 board with built-in programmer is very simple. You just need to plug your board to your computer using an USB cable.
After connecting the EPS8266 board to a USB port in your computer, in your Arduino IDE, go to the Tools menu and select the “NodeMCU 1.0 (ESP-12E Module)” board.
Go to Tools > Port and select the COM Port the ESP8266 is connected to.
Click the “Upload Button” in the Arduino IDE and wait a few seconds until you see the message “Done uploading.” in the bottom left corner.
Project 2: Use button switch to control LED
Schematic
Here’s a list of the parts needed to build the circuit:
Assemble the circuit with a pushbutton and an LED as shown in the following schematic diagram:
- LED: D5 (GPIO 14)
- Pushbutton: D6 (GPIO 12)

Code
With the circuit ready, copy the code below to your Arduino IDE.
/**********************************************************************
* by Jutronix Embedded
* Complete project detail at http://www.jutronix.com/esp8266-tutorial/
***********************************************************************/
const int ledPin = D5; // the pin number of the LED pin
const int buttonPin = D6; // the pin number of the pushbutton pin
// variable for storing the pushbutton status
int buttonState = 0;
void setup() {
Serial.begin(115200);
// initialize the LED pin as an output
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input
pinMode(buttonPin, INPUT);
}
void loop() {
// read the state of the pushbutton value
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH
if (buttonState == HIGH) {
// turn LED on
digitalWrite(ledPin, HIGH);
} else {
// turn LED off
digitalWrite(ledPin, LOW);
}
}
How the code works
The following two lines, create variables to assign pins:
const int ledPin = D5; // the pin number of the LED pin
const int buttonPin = D6; // the pin number of the pushbutton pin
The LED is connected to pin D5 (GPIO 14) and the button switch is connected to pin D5 (GPIO 12). Next, create a variable to hold the button state.
int buttonState = 0; // variable to hold button state
In the setup( ), initialize the button as an INPUT, and the LED as an OUTPUT. For that, use the pinMode( ) function that accepts the pin you are referring to, and the state: either INPUT or OUTPUT.
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
In the loop( ) is where you read the button state and set the LED accordingly. The next line reads the button state and saves it in the buttonState variable. As we’ve seen previously, you use the digitalRead( ) function.
buttonState = digitalRead(buttonPin);
The following if statement, checks whether the button state is HIGH. If it is, it turns the LED on using the digitalWrite( ) function that accepts as arguments the ledPin, and the state HIGH.
if (buttonState == HIGH) {
// turn LED on
digitalWrite(ledPin, HIGH);
}
If the button state is not HIGH, you set the LED off, by writing LOW in the digitalWrite( ) function.
else {
// turn LED off
digitalWrite(ledPin, LOW);
}