ESP8266: NodeMCU Dev Kit V1.0 Review

ESP32 Development Board WiFi+Bluetooth Ultra-Low Power Consumption Dual Cores ESP-32 ESP-32S Board
Integrated antenna and RF balun, power amplifier, low-noise amplifiers, filters, and power management module. The entire solution takes up the least amount of printed circuit board area. This board is used with 2.4 GHz dual-mode Wi-Fi and Bluetooth chips by TSMC 40nm low power technology, power and RF properties best, which is safe, reliable, and scalable to a variety of applications.
This post is due for a while now but I had so much fun actually using the NodeMCU that I totally forgot (or postponed) to write a review about it. So, let’s get started:

The new NodeMCU V1.0 Dev Kit module
Image Source: https://github.com/nodemcu/nodemcu-devkit-v1.0

The first “instalment” of the NodeMCU Dev Kit I reviewed had the version number 0.9. It was the first of its kind, since it came with an integrated USB-to-Serial converter and was fitting into a standard bread board. But both key features that would justify the higher price were tainted: at least on Mac OS X the USB-To-Serial converter did not really work well together with the standard tools, especially for firmware flashing.

While it was OK to flash it first with an external converter and then only use it to transfer files to the LUA firmware it was still a disappointment to me. The second problems was the size: it would cover all pins on both sides of the gap on a standard breadboard. This made it hard to connect it to other components. You could still use female connectors and leave the breadboard out in the first place but still, it was a design issue.

Size

It seems that the NodeMCU team learned a lot from the first version and also listened to the community feedback. The second instalment has the version number 1.0 and this truly reflects the maturity of the board. The size of the module has shrunk considerably, making it fit wonderfully in a breadboard: with a length of 48.5mm and a width of 25.6mm it fits also better in casings than the old version (47.1×30.6mm).

ESP8266 ESP-12E Module Riding Piggy-Back

The V0.9 version used the ESP-12 module which is a pretty common choice. For the new version the group around NodeMCU used the newer ESP-12E which comes 4MB of flash memory. This gives you a lot of space to store code and data. The interface to write to the memory also changed, which gave me some initial troubles until the “standard” tools were updated (read more here). Besides the upgrade in flash memory there seem to be more pins available. But I’m not sure to if and how these additional pins can be used. It looks to me as if the same amount of GPIO pins are available (see section below).

Serial-To-USB converter

As mentioned before the converter was a serious problem in the previous version.  The CH340 chip was not well supported, neither for Mac OS X nor by the tools. The new version comes with the CP2102 chip and it works really well and without hassle. Here is the dmesg output on Mac OS X:

com_silabs_driver_CP210xVCPDriver(.)::setPowerState - Waking up
com_silabs_driver_CP210xVCPDriver(.)::GetCP210xInfo - Part Number Found: 0x02
com_silabs_driver_CP210xVCPDriver(.)::GetCP210xInfo - UsbConfigurationDescriptor - 
com_silabs_driver_CP210xVCPDriver(.)::GetCP210xInfo     .bLength = 9 
com_silabs_driver_CP210xVCPDriver(.)::GetCP210xInfo     .bDescriptorType = 0x02 
com_silabs_driver_CP210xVCPDriver(.)::GetCP210xInfo     .wTotalLength = 32 
com_silabs_driver_CP210xVCPDriver(.)::GetCP210xInfo     .bNumInterfaces = 1 
com_silabs_driver_CP210xVCPDriver(.)::GetCP210xInfo     .bConfigurationValue = 1 
com_silabs_driver_CP210xVCPDriver(.)::GetCP210xInfo     .iConfiguration = 0 
com_silabs_driver_CP210xVCPDriver(.)::GetCP210xInfo     .bmAttributes = 0x80 
com_silabs_driver_CP210xVCPDriver(.)::GetCP210xInfo     .MaxPower = 50 
com_silabs_driver_CP210xVCPDriver(.)::start - Sucessfully loaded the driver

A nice feature that I didn’t know/have before is that I don’t have to press the buttons or change jumpers anymore before flashing new firmware to the module. Together with the Arduino IDE this happens automagically. This saves you a lot of handwork when writing your code.

The Module Pin-Out

The available pins are very similar to other modules. It come in very handy that 3V3 and GND are available various times if you are operating on the “flying circuit”. There is also a Vin pin which takes +5V (according to the pin-out). I assume that it can take other voltage as well, because there is a LD33 chip on the module. If you know more about the range, please let me know.
The NodeMCU V1.0 pin out map.
Source: https://github.com/nodemcu/nodemcu-devkit-v1.0

Applications

I have been playing with the NodeMCU V1.0 for quite a while now and I have to say it makes a lot more fun than with the other available modules: less wiring, more coding, debugging, playing. I have used it together with the SSD1306 Oled 128×64 display on various occasions: first in a LUA based WeatherStation which has even been used in a beautiful 3D printed setup on Thingiverse (read more). 
3D printed case for NodeMCU, running my code (on the right side)
Then I have rewritten the hole code for the Arduino IDE and now I also have less problems with heap space running out. I could even attach two displays simultaneously and get an individual output for it.
Multi display output, driven by a NodeMCU V1.0

Summary

I can wholeheartedly recommend the NodeMCU V1.0 for you, especially if you are just getting started with the whole ESP8266 thing. It is relatively cheap, easy to use and beginner friendly. Later, when you are moving on to productising your idea you might focus on the ESP-12E directly and use that in your own design. For prototyping and beginners its just perfect!

Links  

Posted by squix78

8 comments

  1. Hi, very nice explanation, Thanks.
    I have one question and I can not find an answer on the internet:
    Am I able to use NodeMCU Dev Kit V1.0 with UART to another microcontroller? or the RX/TX are blocked by USB-to-Serial connection ?
    I would like to be able to send/receive some information through UART to/from another microcontroler. Do you have some hints on this topic?

    Thanks,
    Adrian

  2. Hi – useful review!

    I do have one question though – you say you rewrote your code for the Arduino IDE instead? Does that code using the Arduino IDE talk connect to an OLED display? I'm trying to do the same thing, but cannot make any OLED display work! I'd be keen to see any sample code which might help me?

    Many Thanks

  3. Hi Dani,

    I've been reading through your blogs over the past few day and I think they're a fantastic resource – thanks for sharing your experiences with us.

    I've started playing with the nodemcu unit lately – do you use the actual unit in your projects, or just use it for prototyping, and then switch to a standard ESP device like the ESP-12 for the final version?

    • Hi Karl

      Thank you for your kind words. Its nice to see that my documentation helps other people. That is the best motivation to keep writing;-). About the prototyping question: up until now I have been more of a researcher than applicator. So out of convenience I'm mostly using the NodeMCU module even if running it for a long time. The problem for me with the ESP-12 for me is there incompatibility with the standard hole grid. And since I wouldn't call my self a great solderer I would go the easy way and take an ESP-201 since they have almost the same price but are easily mountable on a prototyping PCB

Leave a Reply