Introduction: Cheap Arduino WiFi Shield With ESP8266

In my previous Instructable I have described how to plug the ESP-01 module into a breadboard.

This is just the first step to make a cheap Arduino WiFi shield using the ESP8266 module. With few more electronic components and the WiFiEsp library you can build it for less that 10 USD.

Step 1: Components

Here are the components you need

  • Arduino board - In this example I'm using an Arduino Uno board but I personally uprefer using an Arduino Mega because it has more memory and has a second serial port to communicate with the ESP module.
  • ESP-01 - This is the smallest and cheaper type of ESP8266.
  • AMS1117 5V to 3.3V Power Supply - Arduino boards are typically powered at 5V while ESP8266 needs a 3.3V power source. The Arduino 3.3V output pin cannot provide the power needed by the ESP (up to 250mA). This can be solved using a 3.3V voltage regulator like the LM1117/LD1117 or AMS1117.
  • Breadboard - A 170 holes mini breadboard is enough but you can use a bigger one if you need.
  • 10 uF Capacitor - A small electrolytic capacitor is needed to stabilize the voltage regulator. Any 10-100 uF should be ok.

  • 2 resistors (1K and 2.2K) - A simple voltage divider is needed to shift down the 5V output of the Arduino TX pin. You can use other resistors as long as they are in a 1/2 ratio approximately.
  • Jumper wires

Step 2: Wiring It Up

In the schematic I have described how to connect all the components using an Arduino Uno board and a mini breadboard.

  • The ESP's VCC pin is powered by the 3.3V output pin of the voltage regulator (AMS1117 in my example). The 10uF capacitor is connected to the output pins to stabilize the regulator. The CH_PD pin must also be connected to 3.3V. The GND pin is obviously connected to ground.
  • The ESP's TXD pin can be connected directly to the RX pin of Arduino (emulated on pin 6).
  • The ESP's RXD pin is connected to the TX pin of Arduino (emulated on pin 7) through the level shifter.

If you are using an Arduino Mega you need to change the wiring schema an connect the ESP TX/RX pins to the Arduino Serial1 pins. This allows to have a more fast and reliable communication link between the Arduino board and the ESP-01 module.

Step 3: Testing

To test the shield you can use the following Arduino sketch. Note that the sketch is emulating the Serial1 interface if it is not available.


// EspDebug - Test sketch for ESP8266 module
// emulate Serial1 if not present #ifndef HAVE_HWSERIAL1 #include "SoftwareSerial.h" SoftwareSerial Serial1(6, 7); // RX, TX #endif void setup() { Serial.begin(115200); // serial port used for debugging Serial1.begin(9600); // your ESP's baud rate might be different } void loop() { if(Serial1.available()) // check if the ESP is sending a message { while(Serial1.available()) { int c = Serial1.read(); // read the next character Serial.write((char)c); // writes data to the serial monitor } } if(Serial.available()) { // wait to let all the input command in the serial buffer delay(10); // read the input command in a string String cmd = ""; while(Serial.available()) { cmd += (char)Serial.read(); } // print the command and send it to the ESP Serial.println(); Serial.print(">>>> "); Serial.println(cmd); // send the read character to the ESP Serial1.print(cmd); } }

Now you can open the Arduino serial monitor (see the screenshot) and type few basic AT commands.

  • AT
  • AT+GMR

If you do not get any output you can try the following.

  • The serial monitor baud rate must match the one specified on line 7 of the sketch so it must be set to 115200.
  • Try different settings for the 'Line ending' option of the serial monitor. For my ESP module I have to set it to 'Both NL & CR' as you can see in the screenshot.
  • Adjust the serial baud rate of the ESP-01 module at line 8 of the above sketch. Typical baud rates are 9600 or 115200.

Try different combinations until you are able to correctly interact with the ESP module using the serial monitor.

Unfortunately if the ESP module is set to work at 115200 or higher baud rates you may not be able to make it work with an emulated serial interface. In such case you need to use an Arduino Mega board with a secondary hardware serial interface.

Step 4: Moving Forward

Implementing few enhancements will allow to have a pluggable and reliable WiFi shield for you Arduino to connect it to the Internet.

  • The ESP-01 can be hoked up directly into the breadboard using the technique described in this Instructable.
  • The wiring can be compacted to leave space for other components.
  • A ProtoShield can be used to have a reliable and pluggable WiFi shield.

The picture is quite clear about what I have achieved.

Now look at my blog about how to use the WiFiEsp library for Arduino to see how to use this cheap WiFi shield for your connected projects!