ESP8266 module comparison: ESP-01, ESP-05, ESP-12, ESP-201, Test Board and NodeMCU

Do you like this post? Writing posts, developing libraries and programming online font creators is actually hard work. I order most of my electronics from a Chinese website called Banggood. It is save and the items usually arrive in good quality. With every order you do there by following this link you are supporting the blog. Thank you!

In this post I will guide you through the jungle of available modules based on the ESP8266. This is not a complete list of available modules but a selection of the ones I could test and review. If you think that I have been missing out on one important module please let me know.Every module here as some advantages and disadvantages, depending on the targeted application. If you are planning to to use a module as Wifi shield for an Arduino you might pick a different type than if you´re planning a standalone node. Other aspects are breadboard compatibility, availability of pins, need for external components such as a serial-to-usb adapter as well as size and costs.

The following tables summarise this post, if you are too much in a hurry to read the whole article:

Comparison of Raw Modules

 ESP-01ESP-05ESP-12ESP-201Testboard
ESP01v0ESP-05ESP-12ESP-12testboard-layout
GPIO Pins2-111111
ADC--111
AntennaPCBPCBPCBExternal/PCBPCB
USB-To-SerialNoNoNoNoNo
Breadboard friendlyMediumGoodBadGoodBad
Form factorSmallSmallMediumBigVery Big
Price~$3~$3~$3~$3~$6.50
ApplicationSimple Standalone mode
or wifi shield for Arduino
Wifi ShieldStandaloneStandalonePrototyping
Where to buy?BanggoodBanggoodBanggoodBanggoodBanggood
Detail PostPost--PostPost

Comparison of Development Modules

 NodeMCU V0.9NodeMcu V1.0Wemos D1 MiniWemos D1 R2LoLin V3 NodeMcu Board
BrandedNodeMCUDOITWemosWemosLoLin
NodeMCU V0.9Geekcreit™ Doit NodeMcu Lua ESP8266 ESP-12E WIFI Development BoardWemosD1MiniWemos R1 D2LoLin V3 NodeMcu
GPIO Pins1111111111
ADC11111
AntennaPCBPCBPCBPCBPCB
ESP8266 ModuleESP12 (AI-Thinker)ESP12E (AI-Thinker)ESP12E (Wemos)ESP12E (Wemos)ESP12E (Ai-Thinker)
USB-To-SerialYesYesYesYesYes
Serial ChipCH340GCP2102/CH340GCH340GCH340GCH340G
Breadboard friendlyBad (covers many pins)Very GoodVery Good
(after soldering)
Bad
(Arduino Form Factor)
Bad
(Covers many pins)
Form factorBigBigMediumVery BigBig
Price~$6.40~$6~$6~$6.50~6.50
ApplicationDevelopment
Beginner
Development
Beginner
Development
Advanced
(soldering required)
Development
Form compatibility with
Arduino Shields
Development
Beginner
Where to buy?BanggoodBanggoodBanggoodBanggoodBanggood
Detail PostPost

 

ESP-01

This is probably one of the most popular modules, although it is by far not the most convenient one. With its small form factor (24.75mm x 14.5mm) it fits nicely into any enclosure. Two GPIO pins are led out and can be used to control periphery. With proper wiring and a serial-to-usb adapter you can also easily flash alternatives firmwares on it. By default it comes with one of the different versions of the AT firmware which allows you to use it in combination with an Arduino. One of the biggest problems of this module is the placement of the pin posts which makes it impossible to plug it directly into a bread board for prototyping: the two rows of posts are so close to each other that you would get a short-cirtcuit. However you can still use this module on a breadboard: either build a bread-board adapter or use female-to-male dupont wires to wire the module to your bread-board.

ESP8266 ESP-01 module

 

ESP-05

This module is very simple and has one purpose only: use it as mini wifi shield together with your Arduino or similar micro controller. There are different versions available: a four pin version that only has 3.3V, GND, RX and TX. Over the later ones you talk with your Arduino. Another version has an additional reset pin which allows you to manually or programatically reset the module.
This module nicely fits into a breadboard since the module has only one row of pin posts. But (and there is always a but) you are stuck with the delivered firmware unless you are willing to do some lead cutting and soldering of some pins. According to the forums not all boards come with the same AT firmware version.
ESP8266 ESP-05 module

ESP-12

This module allows you to access many features of the ESP8266: 11 GPIO pins, one analog-to-digital converter (ADC) with a 10 bit resolution. It also lets you easily configure deep-sleep mode which (according to this source) lets you run the module for 3 years on two AA batteries. With one drawback: it is not breadboard friendly at all. As for the modules previously described here the antenna is a track on the PCB which delivers good results for Wifi sensitivity.
But to use it for prototyping you´ll have to build something around the module. You can order these breadboard adapters or build one yourself, like my colleague Andi did:

ESP8266 ESP-12 plus self made bread board adapter
(thx to Andifor the picture)

There is also an almost-ready breadboard adapter available here.
Thanks to its good availability and the rich access to the chip pins it is also widely used for aggregated modules, such as the test board I describe later in this post or the first version of the NodeMCU module. If you are planning to use the ESP8266 as a stand alone node the chances are good you will end up with this module in one way or the other.

ESP-201

Originally named as ESP-12 this module has come to popularity as ESP-201 after the name clash had been discovered. In good old BASIC line adressing style the creators apparently wanted to make sure that no other name clash would occure and added a safety distance to the numbering scheme;-)
It is currently my preferred module for prototyping since it is breadboard friendly and offers similar access to the chip pins as the ESP-12 does. I say breadboard friendly with two remarks: the four pins at the head of the module keep you from directly plugging the module into a breadboard. But you can easily bend them to ninety digrees or unsolder them and place them on the upper side of the module. The second note is that the module itself hides many pins of the bread board for direct access and leaves only one row visible on each side of the module. If you need more you will have to extend a 5-pin row by connecting it to annother row on your breadboard. The board comes with a printed PCB antenna but also with a connector for an external one. This makes this module also a perfect candidate if you need to bridge a longer distance with your Wifi module. You can then easily replace the package wire antenna with a high-gain antenna and improve the sensitivity even farther.
ESP8266 ESP-201 with pin-out description

Test Board

There are various test boards available. Check the links and view the picture below to see what I´m describing here. This test board comes with a battery pack and various preconfigured LEDs and one light dependent resistor connected to the ADC. It integrates an ESP-12 as described earlier in this post and makes all the pins available to your convenience. It also has a jumper which you can set when flashing a new firmware. The board comes with a voltage regulator that steps down the 4.5 Volt from the battery pack to the 3.3V that the ESP8266 needs. You can easily replace the battery pack with the power lines of a USB connector, as I described here.
I see two kinds of applications for this board: run a standalone node somewhere without a wired power adapter is the first only from the attached battery pack. You can use a tiny bread board if you need to connect sensors to the test board and even glue it on the module. Just make sure to not cover the PCB antenna for better antenna reception.
The second application is to quickly test program code with the simplified periphery of the many LEDs and the light dependent sensor which is connected to the ADC. Update: I have this board running on the 3 AA batteries for more than 1000 hours (>40days) already. See the article here
ESP8266 test board with pin-out description

NodeMCU module V0.9 (Outdated)

This module is somehow quite different from the modules described earlier in this post. It comes with all you need to get started since it already has a built-in serial-to-usb adapter and comes with a micro USB plug for power supply and for programming the module.
I had high hopes on this module since in theory it should make development of applications based on the ESP8266 much easier: less wiring is required compared to any of the other modules, you  need neither an external power supply nor a serial-to-usb adapter and two switches allow for easy resetting the module and booting it into flash mode. And it nicely fits into a bread board and lets you wire periphery with the fewest amount of wires imaginable.
Reality looks currently a bit different: on my Mac I could not flash the module with the built in serial-to-usb adapter even after installing the latest driver available. I then had to fall back to an external serial-to-usb adapter. For me this was not a big issue since I don´t flash new firmwares that often and I was already in possession of an external serial converter. After I had flashed the latest version of the NodeMCU Lua firmware I could use the built-in converter just fine. The second problem is that the current form factor of the module covers all the pins on a bread board in the area of the module. To use the pins you will have to insert bridges which lead from under the module to a visible part and insert the module again. And you can only to this for a limited number of pins.
Due to the higher price of this module you will most likely use this module during development time. Once you have completed the software and all the required external components you might use one of the other modules or you will design a completely new module which integrates all the required components
At the time of this writing only the first version of the NodeMCU module is available and that is what I´m reporting here. In the next few days (or weeks) the team that created the first module will publish an improved version which will fix the mentioned problems of the first version. I´m looking forward to test the new version as soon as it becomes available. Once these issues have been resolved this module certainly has all it takes to become an interesting all-in-one alternative to an Arduino based internet-of-things node. UPDATE: don’t order this version anymore, consider the NodeMCU V1.0 instead (see below)
ESP8266 NodeMCU module (version 0.9)

NodeMCU module V1.0

A few weeks ago the NodeMCU team published their new design and I have to say that it is a huge improvement over the first issue. I tested it with both the NodeMCU LUA firmware and the Arduino IDE. It incorporates the new ESP-12E module with 4MB of flash memory and also has a few more pin-outs.
Compared to the V0.9 variant the V1.0 is more narrow and leaves one row of pins on each side on a standard breadboard which is just perfect for prototyping. Another nice feature is the fact that you don’t even have to press the reset/flash button combination in the Arduino IDE to upload a new version of your code. Somehow the board or the software handle this automagically. And with the latest published version of the Arduino/ESP8266 board configuration you can configure upload speed to 921600 baud with which the upload finishes just within a few seconds.

All in all, this is the long awaited development board that you want to have and play with. The price is slightly higher than with the other boards, starting from around $8 for a potential clone, but it is totally worth it because you are saving all the additional hardware like serial-to-usb converter.

New improved version of the NodeMCU V1.0.
Now fits very nicely on a breadboard and also the Serial-To-USB
converter works very well.
I created a Fritzing part for the NodeMCU V1.0 that you
can use to draw up your circuits. Read all about it here

 

Summary

Which module suits you best depends on your application. If the price and small form factor is important for you and you are looking for a stand alone module with just two GPIO pins, the ESP-01 is your candidate. If you just want cheap Wifi connectivity for your Arduino you might go for the ESP-05. The ESP-12 might be interesting if you have periphery based on SPI or I2C bus or if you just many GPIO pins and you are not afraid of a bit of soldering. The ESP-201 is good for solder-free prototyping on a bread board and allows you to access almost all pins of the ESP8266 chip. But you´ll still need an external serial-to-usb converter and a power supply. In case you want it even easier and the slightly higher price is not a problem I would recommend the NodeMCU V1.0 module for you. The following table summarises this post:

Raw Modules

 ESP-01ESP-05ESP-12ESP-201Testboard
ESP01v0ESP-05ESP-12ESP-12testboard-layout
GPIO Pins2-111111
ADC--111
AntennaPCBPCBPCBExternal/PCBPCB
USB-To-SerialNoNoNoNoNo
Breadboard friendlyMediumGoodBadGoodBad
Form factorSmallSmallMediumBigVery Big
Price~$3~$3~$3~$3~$6.50
ApplicationSimple Standalone mode
or wifi shield for Arduino
Wifi ShieldStandaloneStandalonePrototyping
Where to buy?BanggoodBanggoodBanggoodBanggoodBanggood
Detail PostPost--PostPost

 

Development Modules (with Serial Converter)

 NodeMCU V0.9NodeMcu V1.0Wemos D1 MiniWemos D1 R2LoLin V3 NodeMcu Board
BrandedNodeMCUDOITWemosWemosLoLin
NodeMCU V0.9Geekcreit™ Doit NodeMcu Lua ESP8266 ESP-12E WIFI Development BoardWemosD1MiniWemos R1 D2LoLin V3 NodeMcu
GPIO Pins1111111111
ADC11111
AntennaPCBPCBPCBPCBPCB
ESP8266 ModuleESP12 (AI-Thinker)ESP12E (AI-Thinker)ESP12E (Wemos)ESP12E (Wemos)ESP12E (Ai-Thinker)
USB-To-SerialYesYesYesYesYes
Serial ChipCH340GCP2102/CH340GCH340GCH340GCH340G
Breadboard friendlyBad (covers many pins)Very GoodVery Good
(after soldering)
Bad
(Arduino Form Factor)
Bad
(Covers many pins)
Form factorBigBigMediumVery BigBig
Price~$6.40~$6~$6~$6.50~6.50
ApplicationDevelopment
Beginner
Development
Beginner
Development
Advanced
(soldering required)
Development
Form compatibility with
Arduino Shields
Development
Beginner
Where to buy?BanggoodBanggoodBanggoodBanggoodBanggood
Detail PostPost

 

Applications/ Development Kits

I have to admit, this is a bit of shameless advertisement;-). But if you came here because you are interested in IoT and you are probably getting started you might profit from a ready-to-go development kit. One of my most successful projects with the ESP8266 is the WeatherStation. It displays current weather information and forecasts it downloads frequently from the web on a beautiful OLED display. And this is just the starting point. You can use the included libraries to display data from other sources (stock information, sport results, etc) available on the net. And: I sell it as a development kit in my shop for USD $19.50.-. ESP8266 WeatherStation with free shipping to about 80 countries.
The WeatherStation Kit displaying a 3-day forecast

 

The components included in a WeatherStation Kit:
NodeMCU V1 with 4MB flash, 128×64 pixels OLED display,
USB cable and jumper wires. Available now in the shop:
ESP8266 WeatherStation
Posted by squix78

26 comments

  1. Hello Dani,
    cool thing and a rather fascinating story! If I did not already have one kit I would order one…
    But one thing: On the label stuck on the bag is written “NodeMCU V3” but in the text description you write “NodeMCU V1”.
    Perhaps you can sync this?
    Best regards and successful business!
    Thomas

  2. Hi Daniel;

    Awesome! I got my kit and I loaded up the WeatherStation sketch and everything was working 🙂

    I then went on to add the DHT11 code and that’s when things stopped working. I suspect the firmware was over written or something bad … bricked I suspect.

    From the Arduino IDE …

    warning: espcomm_send_command: didn’t receive command response
    warning: espcomm_send_command(FLASH_DOWNLOAD_BEGIN) failed
    error: espcomm_upload_mem failed
    error: espcomm_upload_mem failed

    I then went on to try and reflash the NodeMCU firmware using ESP8266Flasher.exe … from there I get ..

    Note:Serial port connected.
    Note:Begin find ESP8266.
    Note:ESP8266 ACK success.
    Note:ESP8266 ACK success.
    Error:Set ESP8266 Address timeout.

    Similar problems directly from the esptool

    c:\Python27\Scripts>esptool.py –port com5 write_flash -fm dio 0x00000 nodemcu_integer_0.9.5_20150318.bin
    esptool.py v1.2.1
    Connecting…

    A fatal error occurred: Timed out waiting for packet header

    … in fiddling around the board is alive .. it does send this out the serial port at 75K baud… could it be a baud rate issue? I assume not as I understand it’s autobaud detecting.

    ets Jan 8 2013,rst cause:2, boot mode:(3,7)

    Questions –

    o Do you have any suggestions on next steps?

    o Could it be power? I gather power is important for FTDI boards but the NodeMCU has the 3v3 regulator and it’s running off a PC with “good” USB current .. and it did work fine before it did not 😉

    o I’ve had no success in pressing the RST and FLASH buttons — I as I understand them, the RST/CTS lines put the board into to bootloader mode at any rate .. thoughts?

    … thoughts?

    1. Hi David

      Here sone thoughts
      – try another USB cable, the can be reason for your symptoms
      – try another USB port or restart your PC (or Mac?) I had situations where my Mac would only show the device after a restart
      – unplug the DHT11. Maybe your wiring is wrong and you accidentally switched VCC and Ground. Not sure about the longterm effects of such a switch. Such a switch was actually the only way I could ever brick an ESP8266

      If these tips don’t help feel free to get back to me

      Cheers, Dani

      1. Thanks Daniel —

        I’ve tried multiple USB cables and multiple USB ports (Windows).

        I did go back to just the bare board .. no display and no DHT11.

        I’m now trying to see it the ESP AT command set even works … and no luck there yet. I do get this when I press the reset button so it is alive a least a bit 😉

        ets Jan 8 2013,rst cause:2, boot mode:(3,7)

        but nothing in response to AT ….

        ??

        Cheers David

        1. According to this post it might have to do something with your reset pin: http://www.esp8266.com/viewtopic.php?p=2096#p2112
          I’m not sure what that means;-).
          With which baud rate are you trying to flash the ESP? I your example from your last comment you did auto-sensing, right? Try to use a fixed lower rate like like 115200 or 57600. It often is something like the “-b” parameter.

          When you say you went back to the AT firmware: so did you manage to flash the AT firmware? After flashing the ESP8266 with the new firmware the AT binary has been replaced…

  3. Thanks Daniel — I just received another NodeMCU board as I’ve wasted enough time on the dead one 😉 If I manage to get the dead one working again, I’ll let you know.

    HNY, David

  4. Thanks Daniel, You sent me a trial kit and I purchased 2 others from Amazon. Some minor problems (outlined in Bryan Miller’s comments on Amazon). it works great but I still could use a fix to be able to get the screen to reverse from top to bottom your current variable didn’t work.

    I also located a free case plan that I had 3D printed and it fits and looks good. I found a local printer and picked it up today ($9) and it was a good fit, BUT the pins to hold the OLED were slightly out of register. I think I’ll have to cut them off and tape or glue the display in place. There is a ledge for it to fit in so i don’t think that will be a problem. I’m going to get another one printed for my local (Grand Rapids , MI USA) and I sent the plans off to my son in Atlanta, GA USA for him to use. I built the Squix kit with them over our Thanksgiving Holiday and now it will have a much better case than the plastic box it came in. Thanks for your good work and I did send off a tip. This case fits the slightly smaller SQUIX version of ESP8266 -12E.

    http://www.thingiverse.com/thing:1720314 for the plans

  5. I have my kit, and am following the directions, but even after 4 cable swaps, verifying all setting from the getting started guide, and checking my IDE for errors, I cannot seem to get a valid up load.

    The error I encounter is espcomm_upload_mem failed;

    Now I verified that the chip on the board shows a CP2102, so that is the USB driver I installed;
    I restarted my computer (windows 10) to ensure driver is loaded;
    I see a com3 show up when I apply power with the USB cable, so that is the port i chose;
    I loaded the libraries as indicated, and select the board nodeMCU 1.0

    I also updated from the 1.6 to the 1.8 arduino IDE too;

    I am lost to what else I can do to get the base sketch uploaded?

    1. Hi. From distance it indeed sounds like you did everything fine. On one hand it is a good sign that the COM port shows up is a very good sign, it means that you have the correct driver installed. On the other hand there are reports of problems with the CP2102 on Windows 10. Could you check please if you have the latest driver? See these forum posts:
      http://community.silabs.com/t5/Interface/cp210x-USB-to-UART-driver-problems-windows-10-code-31/td-p/146924
      http://community.silabs.com/t5/Interface/Windows-10-VCP-Driver-Now-Available/m-p/161629
      Feel free to contact me again if that should not solve the problem, please also let me know if it does so I can adjust the instructions…

      Regards,
      Daniel

      1. Daniel,

        I did download from that site the latest drivers, then I un-installed and re-installed just to be safe. That did not cure it, but I also think you have pointed me in the right direction, I duplicated the installation on an adjacent windows 10 computer and have the same result. Both computers can reach an Arduino UNO with no problem (from the same USB port), so I will continue to explore the device drivers. Thanks for your response! Once I resolve this, I will advise you for your documentation.

        Regards,

        Bruce

        1. Daniel, happy to report that the drivers with Windows 10were fine. Unfortunately the nodeMCU appears to be bad. I ordered a couple more of these and they came in todays’ mail; I plugged one in to the windows 10 system and it fired right up tonight. Now I can add the sensor and the oled and play, woo-hoo!

          Thanks again for your quick response!

          Bruce
          Kentucky, USA

  6. Only ever been using 8266 as a wifi board for an arduino. This sounds much more interesting.
    I really want to buy your handy box, but I live in Sweden. Any chance of finding way for us Europeans?

    1. Hi again,
      I now noticed that you also had your own shop. Order is now completed. Please disregard the above. Thanks.

    1. Very nice. I was hoping that the winds could be included and looks like you nailed it with an arrow and value. Still waiting for my color display in the mail so can’t wait to see how it works.

    2. Am having trouble compiling your code, keep getting the following error:
      Arduino: 1.8.1 (Windows 10), Board: “NodeMCU 1.0 (ESP-12E Module), 160 MHz, 115200, 4M (3M SPIFFS)”

      Build options changed, rebuilding all
      C:\Users\Danny\Documents\Weather Station Bodmer\esp8266-weather-station-color-masterbodmer\esp8266-weather-station-color-master\esp8266-weather-station-color\esp8266-weather-station-color.ino:44:58: fatal error: TFT_ILI9341_ESP.h: No such file or directory

      #include // Hardware-specific library

      ^

      compilation terminated.

      exit status 1
      Error compiling for board NodeMCU 1.0 (ESP-12E Module).

      This report would have more information with
      “Show verbose output during compilation”
      option enabled in File -> Preferences.

      I have all the libraries loaded, but still cannot determine why I am getting this compile error. I have set up the display wiring according to your example.
      Thanks,
      Danny

      1. Bodmer thanks for your post on the fork of Daniel weather station color. I must have had some garbage in my IDE folder, have corrected the problem and have your version up and running. Thanks again to you and Daniel.

  7. Hi, there! considering the shortage on IL9431 display (even Banggood) and some vendors sending IL9225 (176×220) to anyone, is someone worked/working or willing to work on porting the code to use such display even sacrificing some graphic features? I can start to work from zero but my time availability is so short that to the time of progress it will be too late or other more thrilling things will be out there.

    1. This is an issue introduced with an update to the Adafruit ILI9341 library I believe. Try reverting back to a previous version (1.0.2 worked I think). I ran into this a month or so ago and it took the better part of a day to track it down. The issue may have been fixed recently, but I haven’t tried the most recent release of the library.

  8. Funny. I just two boards of which I think are ESP-01s. I can’t understand the comment about shorts in a breadboard. Their 8-pin connectors have 2.54mm or 0.1″ pitch. So they’ll fit well into a common breadboard.

  9. I uploaded the World Clock demo an hour ago and noticed at 10:30pm CDT it was showing New York time as 15:30. What caused this? Where is the time zone (+ or – hours from UTC, and DST enable/disable) information set? Now as I type this at 11:40pm, it is now showing NY time as 00:40. What happened to correct the NY time (I assume the other world times were and still are correct)?

  10. Hello, I’ve tried the trick to power the screen through the digital pin and I’ve run into trouble : my wemos was not able to communicate by serial link anymore. Moreover, the final size is so small that the USB cable is heavier than it and I’ve difficulties to maintain the whole assembly on my desk, turned to my direction.

Leave a Reply