作者:喵喵
ESP8266 是一個約六十元就買得到的超便宜的 WiFi 晶片(淘寶買的價錢,不含運費),因為它的平易近人,就像巷口的早餐店,如今在網路上已形成一個社群,隨隨便便就能找到一堆文章在介紹,只是看了一些文章以後,自己實作還是遇到一些問題,所以就寫篇文章紀錄一下吧(也或許是我的環境是在 Mac OS X…)。
其實克里斯寫了一篇文章已經蠻詳細的,可以先參考他的文章,只是我在 Mac 下沒有 Windows 的某些工具,所以就分享一下我遇到的問題跟解決的方法,介紹一些對應的軟體。
概觀
ESP8266 是一個 WiFi 晶片 + 一個TenSilica Xtensa LX3 處理器(由Cadence公司出的DPU,即Data Plane Processing Unit),而且還有一些 IO,所以它有提供一個韌體,讓你可以下指令組態它的 WiFi 設定,而且其實有一個 Arduino ESP8266 的專案 可以讓你把它當成一個 Arduino 來寫,完全不需要再買一片 Arduino 也可以獨立使用,簡直新奇、有趣又好玩呢!
ESP8266
ESP8266 有分成一大堆 ESP01 ~ ESP12..,晶片是樂鑫出的,這些不同型號是由 ai-thinker 製造的,依照不同用途有不同的規格,常見的有 ESP01 跟 ESP03,還有熱門投票呢,ESP03 最夯,我買的是 ESP01 是第二名。
ESP03 引出的接腳比較多,而且價錢差不多,平平都是布丁,當然是吃有加雞蛋的阿!實際上除了要考量到有沒有引出自己需要的接腳以外(GPIO16 + RST = deepSleep 用),還要考慮接到麵包板的方便性(ESP05 > ESP01 >> ESP03),而除了 ESP-05 外,大都要額外焊轉接板,才能插到麵包板上。請見詳細差異比較。

需考慮不同板子接到麵包板的方便性
不一樣的型號還有不同的 Flash size,在板子上面的 Flash 晶片有寫(看到脫窗就會看到上面的字了)。為什麼要注意 Flash size 呢?因為會影響韌體可以更新的版本,例如下圖 ESP01 (上圖,黑色的)是新版本,Flash size 會比較大喔!

黑色的ESP01(上)是新版本,Flash size 會比較大
耗電量
ESP01的耗電量平常是 100mA,最多是 200mA;它可傳送的距離,原始板子的天線可達到 366M,外掛天線可達 479M!(從這支測試影片裡面還有比較一個在室外 WiFi 可以傳 4KM以上的產品!)
ESP01
ESP01 有八個腳由左到右,由上到下,由內到外,依序為 TX、GND、CH_PD(must be 1 to enable WiFi)、GPIO02、GPIO01、RST(Reset)、VCC(3.3V)、RX。
由於它的腳位設計蠻奇怪的,無法直接插入麵包板,可以按照這影片裡面教的,切一塊板子下來,做一個轉接板,接插座跟接頭弄成適合麵包板插的形式(可參考本文),或者我是到光華買一包公對母的杜比接頭線,公頭就可以直接插到麵包板或者 Arduino 上,只是拔拔插插的要一直看腳位,看到快脫窗。

自製麵包板轉接板
韌體
ESP8266 的 firmware 預設會支援一種叫 AT Command 的協定,讓你可以從 Serial 連進去以後,對它下指令並且會把設定寫入 Flash 中,重開機也還會在。把它設成 AP or WiFi client 模式,或者叫它連線等等,設定跟查詢 WiFi 的 config,實際測試起來還蠻方便的。因為它就像是讓你簡化它跟 Arduino 溝通的一個介面方法,而不用所有事都要透過底層 SDK 呼叫 C 的 API 來做。
與Arduino對接
一開始先測試看看,把 ESP8266 RX、TX 跟 Arduino 的 TX、RX 對接(Arduino RX0 <=> EXP8266 TX、Arduino TX0 <=> EXP8266 RX),然後 VCC 跟 CH_PD 接 Arduino 3.3V,GND 接… GND,如下圖(開發板不同)。

Arduino與ESP8266對接
這裡有個小問題要注意,官方規格寫到 3.3V 只能提供 50mA 的電流(DC Current for 3.3V Pin 50 mA),所以 ESP8266 可能吃超過 100mA 就要另外接電源,但是我自己跑測試,開 Client 模式傳資料時,整個板(USB電壓電流檢測器)最多寫吃 100mA,也沒出什麼問題,所以我就沒另外供電囉,只是可能程式的實作會影響耗電,真的有問題就另外供電吧。另外發現,只要從 Arduino 供電就沒問題,從燒錄線供電,板子就不穩定。
然後下載 Library ITEADLIB_Arduino_WeeESP8266 ,這是把 ESP8266 當模組用的 Library,跑裡面的範例可以測是否正常,改 SSID 跟 PASSWORD 讓它連 AP 看看,Baud Rate 要改成 115200 或 57600 都試試看(要看韌體版本決定),我自己用 115200 試成功一次,成功連線,之後不斷重開再也沒成功過了…。用 Serial 連進去它也一直 check failed ,感覺是韌體真的怪怪的,所以後來就決定要先更新(大家都說要更新)。
這邊在測的時候會遇到一個問題是,如果你是用 Uno ,只要這樣接以後,ESP8266 就佔據了電腦跟 Arduino 的 RX、TX,所以你無法燒錄,要先拔掉才能燒,但是燒完插進去,它又佔據你跟 Arduino 的 Serial ,你就看不到 Serial.print 的結果了。
這時後有兩種解法,一種是改用 Ardunio Mega,它有支援 Serial1~3 可以用,可以讓 ESP8266 接在RX1TX1,保留 TX0 跟 RX0 給 USB 對電腦,或者參考另外一個範例(沒有用到 Library),裡面註解的方法用其他腳位來作為 ESP8266 跟 Arduino 通訊 的SoftwareSerial,前提是 SoftwareSerial 支援 Buad rate 不超過 19200,如果韌體預設不是 9600 的就要改 buad rate 或燒別的韌體。
後來查到 ITEADLIB_Arduino_WeeESP8266 關於 SoftwareSerial 的說明 ITEADLIB_Arduino_WeeESP8266 的 Softwareserial,也有提到它可以換成 SoftwareSerial。
裡面有提到只要把 Software Serial 註解拿掉就能改成用 SoftwareSerial 了。實際的程式在把 Serial 換成 mySerial。
透過電腦連上ESP8622
好,如果真的不行,你要直接從電腦連 USB 上去燒韌體,或用電腦跟它對接連進去下指令測試,那就要找一條 USB 對 TTL 的線,大概長這個樣子,裡面會有一個晶片,或者你直接買這個晶片也可以,我是買這條線裡面的晶片 PL2303HX,大概三四十塊吧,也有其他代替品如 CP2102、FTDI。

一條 USB 對 TTL 的線
它的線路對應是 紅+5V、黑 GND、綠 TXD、白 RXD。好,只是要直接接上 ESP8622 之前有個問題要考慮到,它的紅線是 5V ,但是 ESP8266 吃的是 3.3V,所以接上去以後,可能會讓這個晶片斷開鎖練 - 斷開一切的牽連。所以我們來把這個神秘的 USB 小盒子打開,裡面其實是長這樣:

打開USB 小盒子,裡面的電路板模樣
它其實有 3V 的電源藏在裡面沒拉出來,我們要把 5V 的線解焊改到 3V 上面,就能讓 PL2303 直接接到 ESP8622 囉。然後照著接 Arduino 的接法一樣,把 RX、TX 對接 電源、接地弄好以後,就可以用電腦來連了。
只是要先裝個 Driver,裡面有 PL2303 跟 FTDI 的 MacOS X Driver,裝好重開以後,再裝個 CoolTerm or minicom (brew install) or screen (mac 內建?)就能跟 Serial /dvu/cu.usbserail 連接囉。記得設定:
baudrate: 115200
Data Bits: 8bit
Stop Bits: 1
然後看是用什麼軟體連 Serial,也可以直接開 Arduino IDE 的 Serial Monitor 來看:
就能打一些 AT 指令跟他聊聊天囉,例如
- AT+GMR 取得韌體版本
- AT+RST 重設
- AT+CWLAP 取得 ap 列表
上圖是 CoolTerm 連成功的畫面,如果還是都怪怪不能跟它講話,還是先更新韌體再說吧。我是印出一直 CHECK FAILED。
更新韌體
好,管他有沒有問題(真的有問題),先來更新韌體,準備好燒韌體的軟體 esptool,它是用Python 寫的,下載好記得先 python setup.py install 安裝相依套件。
按照上述 USB 的接法,再把 GPIO0 接地(跟 GND 接起來),如上圖,這是燒錄模式,然後去 Ai-thinker 論壇下載韌體 v1.1.1 ,用 CoolTerm 連連看,確定有回應,但是一直跳針無法溝通,就來給它燒死啦。
試了幾個版本,紀錄差別:
- v0.9.2:AT+UART=9600,8,1,0,0 會一直 ERROR,無法改預設 buad rate(應該試 AT_ISP=9600?)。
- v0.9.5:可以 AT+UART=9600,8,1,0,0 不會出錯。但是實測起來感覺 0.9.2 穩定度比較好耶,0.9.5 一直 createTCP 失敗?
- v1.1.1:AI-thinker 最新板,需要 flash size 是 1MB 的版本(ESP01 黑色版)
最後結論,不同韌體有不同的 AT 指令跟不同的預設 buad rate,還要依照硬體支援度決定韌體版本 > 1.0(1MB) 或 < 1.0 (512KB)。可以穩定的使用就好,也不見得支援範例測試內的每一個指令。
用 esptool 燒錄指令如下,要改成自己的 device 喔,燒錄的重點是要把 GPIO0 接地,平時運作時就不能接地。
測試方式與 AT 指令
再回去跑測試,就開心的通過啦,跑所有模式,印出很多資訊(其實我的韌體一堆 ERROR,但是可以用了)。
附上一個自己寫的小測試,接 mega 的 Serial1,透過 Arduino 跟 ESP8622 聊天,聊天模式很OK喔。
測試的指令:
最後重開 Arduino,它還是會紀錄上一次的連線狀態喔,所以要記得設定時都要先 AT+RST,可參考官方 AT Command 文件。
ITEADLIB_Arduino_WeeESP8266
這個 library 裡面其實實作就是把 API 轉成 AT Commands,所以直接看查 .h 檔 .cpp 檔就可以知道哪個 AT Command 對應到哪個 API,大部分都在範例裡面了,剩下才要看 API,例如 deepSleep(ms),可以計算電池在睡眠跟啟動模式下可以用多久。
應用小範例:
另外接了土壤濕度偵測,把資料 POST 到免費的 IOT 平台 thingspeak,有空再補完…。
範例程式:
https://gist.github.com/mlwmlw/6e250727634591efb1ef
小結:
如果克服韌體更新的痛苦過程,這應該是顆 CP 值爆表的模組吧!未來研究完 BLE or Zigbee 再來比較一下。最後可以試著直接用 ESP8266 with Arduino 專案直接燒程式進去取代 AT Command,可以不透過 Arduino 獨立運作。
(本文經作者同意轉載,原文連結)
相關資源:
延伸閱讀
Getting Started With The Esp8266 And Arduino
ESP8266 Arduino IDE(用來把 ESP8266 當 Arduino 開發板)
Makezine 5美元的WiFi微控器ESP8266已可與Arduino相容 原文連結)
燒韌體教學 Intro Esp8266 firmware update (原文連結)
Upgrading ESP8266 Firmware (原文連結)
ESP8266 官方論壇(找到bug有2000鎂的賞金喔)
ESPTOOL ESP8266 ROM Bootloader utility( 原文連結)
ESP 系列詳細規格比較 (原文連結)
- 便宜大碗的WiFi 晶片 ESP8266入手 - 與Arduino對接 - 2015/08/10
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!
2017/12/14
Hi 您好,我是初學著想請問一個問題,Arduino 開發版上就有一顆ATMEL MCU,ESP01 module 上就有MCU 和 WIFI controller , 為什麼要有兩顆MCU , 那ESP01就可以獨立Run Arduino IDE?????
2017/12/21
歡迎到MakerPRO社群提問:https://www.facebook.com/groups/makerpro.cc/
2016/02/19
您好
我有試著直接用 Arduino 專案直接燒程式進去ESP8266 ,並且也成功使用,但有問題是如果還ESP8266回復成AT Command,該怎麼做,每次上電ESP8266都會直接執行我燒進去的程式,沒辦法下AT Command。
2016/02/22
歡迎到MakerPRO社群提問:https://www.facebook.com/groups/makerpro.cc/
2015/08/11
您好
謝謝您精闢的介紹
真是受用良多
可以請問一下
範例程式為什麼有兩個
分別意義為何呢?
第二個才是溫度監控嗎?
謝謝您
2015/08/12
嗨
第一個範例是讓你把 ESP8266 跟 Arduino 對接,然後可以透過 Arduino IDE Serial 對 ESP8266 下 AT 指令。
第二個就是濕度監控,透過 wifi 上傳濕度到 thingspeak 的範例。