Over a year ago, I posted about how I reflashed an ESP-01 module with new firmware. That post has been very popular and I got the idea in my head that I was some sort of expert on doing this. But when I recently tried to do the same for an ESP-201 module, I found out I wasn't!
Backing up a bit, about a year ago I bought ten of the -201 modules on Aliexpress for $33. (Now you can get the same thing for $26.) I was going to do something with them; I've quite forgotten what that was.
But I've become interested in integrating the ESP8266 chip in another project so I thought I'd pull these out and get reacquainted. The ESP8266 has been integrated into the Arduino environment since I last looked, and that would be an easy way for me to reprogram the chip.
(Note that in the photo above, the
TX labels apply to the serial
receiver and transmitter pins of the -201 module.
The attached C232HM cable leads have the opposite functions.)
I put the ESP8266-201 module into flash reprogramming mode using the same procedure as for the ESP-01 module:
Next, I downloaded and installed the latest Ardunio IDE.
It doesn't support the ESP8266 out of the box, so I opened the
File => Preferences
dialog box and entered
Additional Boards Manager URLs field.
Then I clicked on
Tools => Board: => Boards Manager....
At the bottom of the
Boards Manager window that appeared, I found the
esp8266 entry and clicked on it.
Then I clicked on the
Install button which downloaded and installed the
appropriate compiler & linker (plus code samples).
In order to work with the ESP-201 module, I selected the
Generic ESP8266 Module entry from the list of boards:
Selecting this entry reconfigures the
Tools menu with new options having default values.
The only thing I changed was the port for my C232HM cable:
Now that I had my environment set up, I needed something to compile and run to test my board.
I selected the
WiFiWebServer: an application that turns an LED on and off
when a particular web page served by the ESP8266 is accessed.
Once the project loaded, I just selected
Sketch => Upload to see if it would
compile and get programmed into my -201 module.
Naturally, it failed:
OK, that's not surprising: the -201 module may need a different set up than the -01 module. After searching for a while, I found this handy ESP-201 cheat sheet. It indicated that for the ESP-201 to enter the flash mode, the GPIO2 and GPIO15 pins had to be attached to +3.3V and ground, respectively. I added a few jumpers to do that, repeated the steps for putting the ESP-201 into programming mode, and tried another upload...
From there, I tried various combinations of options under the
different upload speeds, different COM ports, different board frequencies,
different flash settings...
Failure. Failure. Failure. Failure.
My next thought was that maybe the AT firmware in my modules was too old to work with the Arduino uploader. I installed the ESP Flash Download Tool by Espressif and then downloaded a fresher version of the AT firmware that would fit into the 4 Mb flash on my -201 modules. But when I tried the tool, it wouldn't link to my module, either.
So I went looking for another program to update the firmware. I decided to try esptool.py since it is mentioned frequently. There, halfway down its README page, I found this:
The following ESP8266 pins must be pulled high/low for either normal or serial bootloader operation. Most development boards or modules make these connections already, internally: | GPIO | Must Be Pulled | -------------------------- | 15 | Low/GND (directly, or with a resistor) | | 2 | High/VCC (always use a resistor) | If these pins are set differently to shown, nothing on the ESP8266 will work as expected.
There was my problem: I had tied GPIO2 to +3.3 directly rather than through a resistor. So I replaced the jumpers on the GPIO2 and GPIO15 pins with 1K resistors as shown below:
Then I tried the Arduino uploader again:
OK, now I could upload to my ESP-201 module.
I edited the web server code to enter the SSID and password for my local WiFi network
and then recompiled and uploaded it to my board.
Then I clicked on
Tools => Serial Monitor to bring up a window that would show
status messages output by the web server.
RESET button (without pressing the
PROG button) initiated
the web server and it put out the following information:
These indicated that the web server had started and connected to the local WiFi with the displayed IP address.
The web server outputs a high or low level on the
GPIO2 pin depending upon the
web page that's accessed.
To observe the output level, I connected an LED plus a current-limiting resistor
GPIO2 pin to ground.
Then I just opened a web browser and went to the pages shown below to turn the LED on and off.
So after a lot of effort and a few dead ends, I had my ESP-201 boards working with the Arduino IDE. In order to make it easier in the future to program the modules, I used the schematic shown below and added the necessary sockets and components to a programming board I previously built for the ESP-01:
I hope this post will help you get started with using your own ESP-201 modules. Even if you use a different programming environment than the Arduino IDE, the steps for building the programming hardware may still save you from the mistakes I made.Share on Twitter Share on Facebook Share on Reddit