Configuring the ESP8266 using an Arduino and Software Serial Mirroring


A couple weeks ago we looked at an Internet of Things solution , the Particle Photon. After getting a lot of feedback from the community we got our hands on Riaspire ESP8266 WiFi board. This one of the many ESP8266 boards out there.

The ESP8266 , like the Photon, is a  a WiFi enabled microcontroller module that can be used as a solution to any IoT project. However, as the Particle Photon was very simple to get setup and running with all of its support, the ESP8266 is leaps and bounds harder making the ESP8266 definitely not for beginners. The documentation is hard to find and a lot of google searches return examples that either skip steps or are just wrong. For this tutorial I hope to bring this information to one place to get you up and running faster using an Arduino to setup and make sure the ESP8266 is working.

With the ESP8266 being much more difficult to get started with, why even use the ESP8266?  Well there are two really big benefits to the ESP8266 which depending on the project could outweigh almost any other IoT device like the Photon.


The price of the ESP8266 is just unbeatable on the magnitude of 1/4 the cost of some of the other solutions. If you are on a tight budget or need to make a lot of something, learning the ESP8266 will be well worth your time.


The ESP8266 is completely open unlike the Particle Photon. You aren’t trapped into using someone else’s cloud, or IDE, like Particle, and you don’t need the “support” enabled in order to use it. you have more freedom with how you use the ESP8266 to fit the needs of whatever your project is. You can make your ESP8266 a personal server or put it in AP mode to act as a WiFi access point. The ESP8266 will also teach you a lot more than the Photon as a lot of what the Photon is doing in the background with it’s integration with Particle, you get to learn how to do this yourself.

Setting Up the Hardware

Like the Photon, the ESP8266 is a 3.3V device so you must use 3.3V to power it. DO NOT use the Arduino 5V as this will damage the ESP8266 permanently. The 3.3V supply in the standard Arduino also doesn’t supply enough current to power the ESP8266 during its peak transients. Use a 3.3V power supply with at least 500 mA of current. I used the 3.3V supply in the Elegoo 37 Sensor kit. It was perfect because it fits in a standard Breadboard, making one side rail 3.3V and the other side rail 5.0V.

You can use the ESP8266 in a couple ways. In this tutorial we will only demonstrate that it is functioning by Serial mirroring the Arduino IDE Serial port to a Software Serial port connected to the ESP8266. This will also allow us to change some of it’s setting and get it connected to your Home WiFi. You could also buy  a Serial USB to TTL converter and use a command based serial program like Putty to send these commands. I did not have a Serial USB to TTL converter so I opted to just use an Arduino and Serial mirror the commands. If you use a Serial USB to TTL converter please be sure to also use a level shifter so that you don’t apply 5V to the ESP8266.

There is also a ESP8266wifi library and Arduino IDE addition you can add that includes libraries for using the ESP8266 which you can use to directly program instead of just sending commands with a prompt. Ultimately this will be the easiest way to setup the ESP8266 for most IoT projects but this deserves a whole separate article.


ESP8266 Arduino Pinout

Connect the ESP8266 TX pin to pin 2 of the Arduino, RX pin to pin 3 of the Arduino and make sure the 3.3V supply’s GND and the Arduino GND are connected. Next pullup the ESP8266 Enable pin to 3.3V using a high 2k resistor. You will be powering the Arduino through its USB port, this will also be how you communicate to the ESP8266.

Code for the Arduino

I found the Idea to serial mirror the ports from this source.  Go ahead and go to this site to grab the code. It basically just looks for whenever serial is available and it prints it to the software ESPSerial and whenever software ESPSerial is available it prints it to serial. You will need to first change the baud rates for the Serial.begin and ESPSerial.begin form (9600) to (115200).Go ahead and upload this to the Arduino you are using.  Once installed open the Serial Monitor. As noted in the code, make sure both NL & CL are selected for viewing on the bottom and 112500 is set as the baud rate.


Now that the Serial Monitor is up and running, you can power on the ESP8266 and you should see some boot commands, however it will be VERY jumbled. This is because the ESP8266 is set to a 115200 Baud Rate and the Software Serial of the Arduino simple can’t keep up at that speed.

Type “AT” in the serial text box and if you see “OK” as a response then you are correctly connected. Again this might still be a little jumbled with some gibberish mixed in. You can see this jumbling below in the “re’dy” and the Box next to the AT.

ESP8266 115200 Baud

Change the ESP8266 Baud rate by typing


You should receive an OK.

Now whenever you type you should not see a response. First exit the program and change the Serial.begin(115200) and the ESPSerial.begin(115200) to Serial.begin(9600) and the ESPSerial.begin(9600). Now open the Serial monitor again and make sure you select 9600 as the Baud Rate. Now type in the AT command and you should get OK again.

ESP8266 9600 BAUD

If you are not getting any response here are some things to try:

  1. Verify that you are using a 3.3V power supply for the ESP8266 that is at least 500mA
  2. Verify the GND of the ESP8266 and the GND of the Arduino are connected
  3. Verify that the TX pin of the ESP8266 is going to pin 2 of the Arduino and the RX pin of the ESP8266 is going to pin 3.
  4. Verify the EN pin of the ESP8266 is pulled up to 3.3V with a 10k resisotor
  5. If you haven’t changed the Baud Rate of the ESP8266 make sure 115200 is written in the Arduino Program for the serial.begin() and that 115200 is selected as the baud rate for the Arduino Serial Monitor
  6. If you have changed the Baud rate of the ESP8266 to 9600 make sure 9600 is written in the Arduino Program for the serial.begin() and that 9600 is selected as the baud rate for the Arduino Serial Monitor
  7. Make sure Both NL& CL is selected
  8. If you continue to have issues you may have an ESP8266 with a different starting baud rate than 115200, an incorrect wiring, or a damaged ESP8266.

Commands to connect ESP8266 to WiFi

You can check out all the commands for the ESP8266 here:

We will only be using some of them for this tutorial.

First make sure the Mode of the ESP8266 is mode 1 by using


If this worked you should have received an OK. Next see what networks are available by using


ESP8266 Available Networks

Next select your network and type in


ESP8266 Connect to SSID

*Please note that “YOUR_SSID” is the SSID for your WiFi network and “YOUR_PASSWORD” is the password for you WiFi network. You should see a “WiFI Connected” then a “WiFi Got IP” followed by OK if the connection is successful.

To get the IP Address of your ESP8266 you type in


ESP8266 get IP Address

This will be your Local IP address.

Now if you want to see something cool open up the CMD prompt and PING this IP address

ESP8266 Ping IP Address

It has 4 successful pings! Now you have successfully connected your ESP8266 to your Home WiFi and are pinging your ESP8266 with your computer over WiFi. Stay tuned and subscribe so you don’t miss any reviews or tutorials!  We plan to continue to use the ESP8266 for more projects.


4 thoughts on “Configuring the ESP8266 using an Arduino and Software Serial Mirroring

  1. Abhishek patel says:

    Thank you soo much really really helpfull…

  2. Jared Smith says:

    Do you guys have any info on the nrf24l01 module? The documentation on this module seems to be almost nonexistent. All help is greatly appreciated! Thanks…

  3. Josh says:

    Hey Jared, not sure what you are doing with the NRF but here is a datasheet from Nordic semiconductor:

    and here is a setup guide from ARMmbed:

    Hope this helps, if not let us know.

  4. mayank perhsad says:

    this is he best tutorial i have found so far
    thanks you very much

Leave a Reply

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