It took 25 days to arrive (I guess I missed the first plane), but it eventually arrived yesterday! However, this is a standard delay for packages coming from China.
For those of you that don’t already know it, NodeMCU is a small board, based on the cheap ESP-12 WiFi module from AI-Thinker, itself containing a single-chip ESP8266 WiFi SoC. With an 80 MHz 32-bit embedded MCU (overclocking up to 160 MHz is possible) and built-in WiFi without required factory calibration for under $3, this chip is already interesting per se.
The ESP-12 is one of the available module containing an ESP8266 chip; it is becoming more and more popular because of its integrated WiFi PCB antenna and shield, supposed to provide FCC compliance, as the engraved FCC logo suggests it. However, without a proper genuine FCC ID, it doesn’t prove this fact, and looks more like a cheap marketing trick to make you buy this thing!
The NodeMCU board itself adds an USB/UART converter chip, an LDO power supply with proper decoupling (at last!), plus 2 miniature push buttons and what is the most important feature probably: it breaks out all ESP8266 pins to breadboard-compatible 2.54 mm pitch headers.
What distinguishes this module further from all the existing breakout boards out there is that it has been developed by user “zeroday” from the ESP8266 forum, who initially provided a Lua-based interpreter of the same name for the ESP8266 chip. As the NodeMCU Lua interpreter was first released as closed source, I feared that it was a hook for something to sell, as usual. It turned out I was wrong, when zeroday published the sources on Github a few days before Christmas last year.
Back to the received package: except my board has a yellow solder mask, it is exactly as the one depicted above.
The PCB design is good, but manufacturing is not as good: I received my board with 3 out of the 4 breakout tabs still attached, which is unusual. But besides this, the component assembly looks OK.
More unusual is the choice of a cheap CH340G USB/UART converter chip instead of the more common (in EU and US) FTDI, Silabs or Cypress chips. At $0.40, they certainly help to keep the BOM cost down, but finding a working driver for your PC platform may be tricky. Not a problem here with my Ubuntu Linux that has the driver built-in.
Using the first micro USB cable at hand, I connected it to my PC: the built-in LED flashes rapidly, but there is no other indication whatsoever that the board is working or not. Looking at the logs with “dmesg” confirms that the device enumerates correctly:
[32634.450508] usb 3-4: new full-speed USB device number 15 using xhci_hcd
[32634.467747] usb 3-4: New USB device found, idVendor=1a86, idProduct=7523
[32634.467754] usb 3-4: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[32634.467758] usb 3-4: Product: USB2.0-Serial
[32634.468531] ch341 3-4:1.0: ch341-uart converter detected
[32634.469380] usb 3-4: ch341-uart converter now attached to ttyUSB0
As I read that the device was working at 9600 bps, I fired “screen” as a serial terminal emulator:
sudo screen /dev/ttyUSB0 9600
No luck, nothing responding, no prompt, nada:(
git clone https://github.com/themadinventor/esptool.git
sudo python esptool.py --port /dev/ttyUSB0 write_flash 0x00000 nodemcu_latest.bin
Not being a specialist in Lua, I tried the different examples provided on the NodeMCU landing page. Most of them work out of the box, despite the fact that you have to be extra careful when typing in the commands, as Lua strange syntax is very picky (e.g. “:” vs. “.” when invoking methods). The “blinking LED” example doesn’t work, as the “led” object doesn’t seem to exist by default.
As a conclusion, the NodeMCU is a nice small cheap board for someone willing to discover WiFi for IoT without soldering and/or wiring hassles and without having to install any toolchain: the built-in Lua interpreter makes it trivial to test the main module features without having to compile any code. This comes at a cost though: you will have to learn yet another language with its own peculiar syntax and concepts. It really reminds me of bitlash for Arduino boards, although it is much more sophisticated, of course. NodeMCU now integrates a bytecode compiler, but I still wonder how much memory is available (especially RAM) for the actual user, and if this provides enough room for something more sophisticated than simple demos.