2015年8月22日 星期六

ESP8266 更新韌體

七月底時在露天看到有人賣一批 ESP8266 ESP-01 模組, 報價僅 NT$90, 哇, 這是我上回買的第一片的半價, 雖然現在 NT$140 就可以買到 ESP-01 模組, 但 90 元實在很便宜, 所以就一口氣買了 20 片, 含運 1950 元 (郵寄運費 150, 挺貴的, 沒有超商取貨付款) :

# esp8266 esp-01 512K flash (含稅) $90

收到貨後一直沒時間測試, 昨晚拿出來拆封, 按照之前第一片板子的接線進行測試, 用 Realterm 連線發現 AT 韌體是比較新的 0.9.5 版 (Baud rate 是 115200), 因為 0.9.2.2 版比較穩 (參考 "深入淺出 Wifi 晶片 ESP8266 with Arduino"), 而且預設 9600 Baud rate 跟 Arduino 一樣, 所以就進行了韌體更新. 接線方式參考之前的 AT 指令測試文 :

# ESP8266 WiFi 模組 AT command 測試

唯一的不同是, 更新韌體必須將 GPIO0 腳接地, 其餘相同, 就是 ESP8266 TX/RX 接 PL2303HX 的 RX/TX, 而且 ESP8266 的 VCC 必須接 3.3V, 絕對不能接 5V, 否則會燒毀 (TX/RX 卻可直接連 PL2303HX, 因為 PL2303HX 的 TX 輸出 3.3V).

接線方式 : 

PL2303HX 上傳線的 GND (黑), TX (綠), RX (白) 三條線用一公一母杜邦線分別連接 ESP8266 的 GND, URXD, UXTD 三支腳, 不過實際上因為要跟 3.3V 電源板的 GND 共接, 所以 PL2303HX 的 GND 與 ESP8266 的 GND 不是直接連接, 而是接到麵包板 3.3V 電源板的 GND 槽共接. 最重要的是, 要燒錄新版韌體, ESP8266 的 GPIO0 腳也要接到 GND 才行, 所以也是接到麵包板的 GND 共接. 注意, 燒錄完成後, GPIO0 須自 GND 拔除, 否則不會運作.

ESP8266 更新韌體接線 : 
VCC      - 接麵包板專用電源板之 3.3V 
URXD   - 接 PL2302HX 的 TXD (綠線)
UXTD    - 接 PL2302HX 的 RXD (白線)
CH_PD - 接麵包板專用電源板之 3.3V
GPIO0  - 接 GND (燒錄完成須拔除)

PL2303HX 接線 :  
+5V(紅線)  - 不可接 (會讓 ESP8266 燒毀)
GND(黑線)-  接 ESP8266 與 3.3V 電源板的 GND (三個 GND 共接)
TXD(綠線) -  接 ESP8266 的 URXD
RXD(白線)-  接 ESP8266 的 UXTD



此圖我是用 Fritzing 搭配 Picpick 抓圖軟體繪製, 因為 Fritzing 裡面沒有 ESP8266 與 PL2302HX 上傳器元件圖形, PL2302HX 我是自行繪製 :


ESP8266 的 Fritzing 元件圖檔我是從下列 Github 網站下載 (下載第一個檔案 ESP8266-01 WiFi Module.fzpz, 按 Raw 鈕即可下載) :

# https://github.com/ydonnelly/ESP8266_fritzing

至於 5V/3.3V 麵包板專用穩壓電源板子的圖樣, 在 Fritzing 裡找不到我買的這塊市面上常見的 YwRobot 板子圖樣, 但可在 Fritzing 中搜尋 "Breadboard power supply board" 或 "Power conditioning" 找到這塊 PRT-09319 的板子代替. 

接好線後, 將 PL2303HX 上傳線插入電腦 USB, 按下 3.3V 電源板 Power 鍵對 ESP8266 供電, 可見黃色 LED 恆亮, 藍色 LED 閃一下即滅. 使用 Realterm 軟體與 ESP8266 用 AT 指令溝通, 發現都是亂碼, 經嚐試錯誤發現我這次買的這批是舊版韌體, 要用 115000 Baud rate 才會看到 OK 出現.

下 AT+GMR 顯示 SDK 版本是比較新的 0.9.5 版 :

AT+GMR                                                                         
AT version:0.21.0.0                                                            
SDK version:0.9.5                                                              
                                                                               
OK


下 AT+CIOBAUD 顯示 ERROR :

AT+CIOBAUD?                                                                    
                                                                               
ERROR 

可見該韌體不認得此指令. 下 AT+RST 回應如下訊息 :

AT+RST                                                                         
                                                                               
OK                                                                             
                                                                               
 ets Jan  8 2013,rst cause:4, boot mode:(3,7)                                  
                                                                               
wdt reset                                                                      
load 0x40100000, len 816, room 16                                              
tail 0                                                                         
chksum 0x8d                                                                    
load 0x3ffe8000, len 788, room 8                                               
tail 12                                                                        
chksum 0xcf                                                                    
ho 0 tail 12 room 4                                                            
load 0x3ffe8314, len 288, room 12                                              
tail 4                                                                         
chksum 0xcf                                                                    
csum 0xcf                                                                      
                                                                               
2nd boot version : 1.2                                                         
SPI Speed      : 40MHz                                                         
  SPI Mode       : QIO                                                         
  SPI Flash Size : 4Mbit                                                       
jump to run user1                                                              
                                                                               
rl                                                                          
A                                                                              
 -Thinker Technology Co. Ltd.                                                  
                                                                               
invalid

0.9.5 版好處是 CIFSR 會列出 MAC 位址 :

AT+CIFSR                                                                       
+CIFSR:APIP,"192.168.4.1"                                                      
+CIFSR:APMAC,"1a:fe:34:f3:0a:8c"

參考 "阿喵就像家" 寫的這篇 :

# 深入淺出 Wifi 晶片 ESP8266 with Arduino

原來可以用 AT+UART=9600,8,1,0,0 指令來更改 Baud rate :

AT+UART=9600,8,1,0,0                                                           
                                                                               
OK   

改完後 Realterm 也要更改連線速率為 9600 才行, 否則會亂碼. 不過可能因為 CWMODE 預設為 2 (AP), CWLAP 與 CWJAP 都無法使用 (CWMODE 須為 1/3 才行) :

AT+CWLAP                                                                       
                                                                               
ERROR

AT+CWJAP="EDIMAX-tony","1234567890"                                         
                                                                               
ERROR

因為以上穩定等問題, 所以還是更新韌體到 0.9.2.2 版為宜 (應該不叫更新, 而是退回). 

依照克里斯這篇文章所述 :

# 【技術教學】打造Wifi遙控車(之一):使用 ESP8266進行 Wifi無線通訊

下載 ESP8255 的燒錄程式與新版韌體 :


解開 ZIP 檔後, 執行 esp8266_flasher.exe 程式, 按 BIN 鈕點選所下載的 0.9.2.2 新版韌體, 輸入正確之 COM 埠 (這很重要), 按 Download 鍵即開始更新, 這時 ESP01 模組上的藍燈會持續快速閃爍 : 


藍燈停止閃爍後, Log 最底下會一直出現 "Failed to leave Flash mode" (拉霸要往下拉才看得到這一行字) :

Writing at 0x0007c400... (97 %)

Writing at 0x0007c800... (98 %)

Writing at 0x0007cc00... (98 %)

Writing at 0x0007d000... (98 %)

Writing at 0x0007d400... (98 %)

Writing at 0x0007d800... (98 %)

Writing at 0x0007dc00... (99 %)

Writing at 0x0007e000... (99 %)

Writing at 0x0007e400... (99 %)

Writing at 0x0007e800... (99 %)

Writing at 0x0007ec00... (99 %)

Leaving...
Failed to leave Flash mode

看來似乎沒有成功, 其實是成功的, 這是軟體的 Bug, 參考 :

#  ESP8266: Reflash Dance!

"Note that the progress pane indicated "Failed to leave flash mode". That's probably because the flashing program doesn't have any way to bring the ESP8266 board out of programming mode. But it's not really a problem provided the contents of the flash chip were rewritten."

燒錄完畢後, 將 3.3V 電源板 POWER OFF, 拔掉 ESP8266 的 GPIO0 接到 GND 的線, 重新送電後, 用 Realterm 下 AT 指令確認韌體版本已經更新 :

AT+GMR                                                                        
0018000902                                                                    
                                                                             
OK      

查詢連線 Baud rate 為 9600 :

AT+CIOBAUD?                                                                     
+CIOBAUD:9600                                                                   
                                                                                
OK           

這樣就可以跟 Arduino 介接了. 這次實驗得到一個經驗, ESP8266 的 3.3V 電源要足, 之前用了一個已用很久的 9V 方形電池對 3.3V 電源板供電, 送電後 ESP8266 電源燈閃一下就沒了, 根本無法與電腦連線. 所以 ESP8266 的 LED 電源燈一定要亮亮的才能維持穩定的 WiFi 連線. 

20150827 補充 :
此賣家有新產品, 內存增為兩倍 1M, 一顆 100 元 :

# esp8266 esp-01 1M flash $100

參考 :

# ESP8266: Reflash Dance!


2018-06-16 補充 :

感謝李明軒兄留言分享, 他將燒錄檔放在有中文目錄名稱路徑下導致燒錄失敗, 之前我也遇到過, 故在此特別提醒, bin 映像檔務必放在全英文路徑下才不會燒錄失敗.

18 則留言 :

CCTsai 提到...

想請問esp8266 e12 如何燒入韌體這一塊>>>http://www.zhencheap.com/14483.htm

小狐狸事務所 提到...

這是 NodeMCU 板, 我有一塊, 但是還沒時間玩, 等 Arduino 玩透了再來. 可參考這兩篇 :

http://code.unumobile.com/wf8266r/tutorials/esp8266/00_FM
http://ruten-proteus.blogspot.tw/2015/05/esp8266-lua-nodemcu-firmware-update.html

五餅二魚水族倉庫 提到...

老師,我有按照你的燒錄方法來做,也有燒錄至99%,也出現了failed to leave
Flash mode,但是在 realterm 上面,輸入 AT或 AT+GMR 皆看到亂碼,請問 realterm 是哪裡要設定 ?,謝謝指導

小狐狸事務所 提到...

Baud rate 設錯就會出現怪碼, 參考這篇 :

http://yhhuang1966.blogspot.tw/2015/07/esp8266-wifi-at-command.html

五餅二魚水族倉庫 提到...

老師再請問一下,燒入esp8266韌體時,需將GPIO0接地,但是如果要把自己在auduino IDE寫好的程式放入esp8266內,方法也是相同嗎?,這樣先前燒錄的韌體會被蓋掉嗎 ?

蟹蟹指導

五餅二魚水族倉庫 提到...

老師再請問一下,燒入esp8266韌體時,需將GPIO0接地,但是如果要把自己在auduino IDE寫好的程式放入esp8266內,方法也是相同嗎?,這樣先前燒錄的韌體會被蓋掉嗎 ?

謝謝指導

註: 我是用 UART 接 ESP8266-01,單純使用esp8266 來當 IOT 使用, 並沒有使用 arduion

小狐狸事務所 提到...

會蓋掉裡面 AT 的韌體喔! ESP8266 Stand alone 用的函式庫應該是不同的.

匿名 提到...

請問在更新韌體時按download時出現"connecting ....
[Errno 22] invalid mode ('rb') or filename"
是出了什麼問題?

小狐狸事務所 提到...

您好! 抱歉我沒遇到過, 不過看起來似乎是權限問題, 此軟體可能是用 Python 寫的, 建議您用管理員權限執行看看.

Unknown 提到...

我要請問一下現在esp8266 1.5.4版本還需要更新回去嗎?

小狐狸事務所 提到...

應該不用, 新的韌體說不定更好更穩, 有空我也來刷新韌體看看.

Unknown 提到...

老師,我嘗試好多版本更新,全都更新完,但是我用realterm的時候baudrate選哪一個都沒用,打AT都是沒反應,為什麼呢?

小狐狸事務所 提到...

您是燒錄 AT 韌體嗎?

Unknown 提到...

老師您好,我在使用esp8266跟arduino去跟wifi連線的時候,常會出現wifi分享器被干擾導致其他跟分享器連線的裝置都斷線的情形,請問老師這個問題該如何解決?

小狐狸事務所 提到...

照理應該不會這樣啊! 無線基地台 dhcp 會分派新的 ip 給 ESP8266 才對. 建議可換另一個 AP 試試看.

Qoo 提到...

[Errno 22] invalid mode ('rb') or filename: ''

這個事燒錄黨的 檔案位置路徑上有中文~
我找了好久!!謝謝老師

Gary Chen 提到...

老師您好, 請問老師:
前天買了一塊ESP-01S(ESP8266)及一塊ESP8266燒錄器。這個燒錄器有一個4x2的接頭,直接對接ESP8266。把ESP8266插到燒錄器上,再將燒錄器插到PC(USB port)就可以工作。也就是說此燒錄器取代了PL2303HX,且不用再接線。
在Realterm上設定Baud Rate 為115200時,ESP8266可以正常反應溝通。
依您文中的方式下載esp8266_flasher.exe 及bin file ( 有兩個 : ESP_8266_BIN0.92.bin / v0.9.2.2 AT Firmware.bin)後開始燒錄。過程及結果都與您文中所提的相同,GPIO0也有接地。
然後再用Realterm測試, ESP8266就完全沒反應了,試過所有Baud rate 都一樣。上述兩個bin file都試過,都一樣的結果。
2017年7月23日有位留言,情形似乎是一樣的。請問該怎樣解決 ?
謝謝老師

小狐狸事務所 提到...

我分別向兩個賣家買了 ESP01-S 各一塊, 其中一個 OK 沒問題, 另一塊就跟您的情況一樣, 燒錄過程都沒問題, 就是怎麼也不會動, 搜了好多文章試過還是沒用, 最後決定不再買 ESP-01S. 現在都用 WeMOS D1 MINI, 沒有一塊出過問題, 以前買的 ESP-01 也都 OK, 就是 ESP-01S 不知哪裡出錯.