Here is the step-by-step on upgrade the ESP-01 AT Command firmware (for running on macOS).
Wiring
For flashing the ESP-01 firmware, you need to have a USB-TTL adaptor as a programmer.
+---------------------+---------+
| | RxD Vcc |
| Top View | IO2 RST |
| | IO0 CPD |
| | GND TxD |
+---------------------+---------+
ESP-01 USB-TTL Adaptor
VCC ---------- 3V3
GND ---------- GND
TxD ---------- RxD
RxD ---------- TxD
CH_PD ---------- see note* below
GPIO0 ---------- Connect to a push switch (Flash button) to GND
RST ---------- a push switch (Reset button) to GND
Note: depend on whether you have ESP-01 or ESP-01S, for ESP-01, you will need to connect CH_PD either directly to 3v3 or via a 3k-10k resistor to 3v3. However, you don't need an extra pull-up resistor for ESP-01S as CH_PD already has on-board pull-up resistor. This picture shows the different between ESP-01 and ESP-01S, visually ESP-01 has 2 LEDs on board near the antenna, while ESP-01S have two extra resistor between header pins and ESP8266EX chip, and with only one LED.
Download and install esptool
Download and install esptool from https://github.com/espressif/esptool. esptool
is a python application. You need to have python installed as well.
Download firmware 2.1
Download ESP8266 nonOS SDK - Release 2.1.x, noticed that this is not the latest version as the latest version doesn't works for ESP-01 based on my experience.
Upgrade the firmware
You will actually only need 4 files for the upgrade, I would suggest that you copy and paste those files into your esptool directory from the downloaded bin/
directory. cd
into your esptool directory and run the following commands to upgrade the firmware.
To put ESP-01 into programming mode:
- Press and hold Flash(GPIO0) button;
- Press Reset button once, this will put ESP-01 in programming mode;
- Press Reset to start the newly uploaded program when upload is completed.
./esptool.py --port /dev/cu.SLAB_USBtoUART write_flash 0x00000 boot_v1.7.bin
./esptool.py --port /dev/cu.SLAB_USBtoUART write_flash 0x01000 user1.1024.new.2.bin
./esptool.py --port /dev/cu.SLAB_USBtoUART write_flash 0x7c000 esp_init_data_default.bin
./esptool.py --port /dev/cu.SLAB_USBtoUART write_flash 0x3e000 blank.bin
./esptool.py --port /dev/cu.SLAB_USBtoUART write_flash 0x7e000 blank.bin
Please noted that /dev/cu.SLAB_USBtoUART
is the USB port for my USB-TTL interface, yours might be different, run ls /dev/tty.*
to find out your USB port
AT+UART_DEF=9600,8,1,0,0
to make the change, the command_DEF
will make the setting persistent.