文章類型
開發平台
解決方案
關注主題
文章類型
開發平台
解決方案
關注主題

便宜大碗的WiFi 晶片 ESP8266入手 - 與Arduino對接

作者:喵喵

超便宜的 WiFi 晶片 - ESP8266

超便宜的 WiFi 晶片 – ESP8266

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。

ESP01 有八個接腳

ESP01 有八個接腳

由於它的腳位設計蠻奇怪的,無法直接插入麵包板,可以按照這影片裡面教的,切一塊板子下來,做一個轉接板,接插座跟接頭弄成適合麵包板插的形式(可參考本文),或者我是到光華買一包公對母的杜比接頭線,公頭就可以直接插到麵包板或者 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。

螢幕截圖 2015-08-10 00.22.38

裡面有提到只要把 Software Serial 註解拿掉就能改成用 SoftwareSerial 了。實際的程式在把 Serial 換成 mySerial。

螢幕截圖 2015-08-10 00.22.25

透過電腦連上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 來看:

螢幕截圖 2015-08-10 00.23.00

就能打一些 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 接地,平時運作時就不能接地。

螢幕截圖 2015-08-10 00.38.21

測試方式與 AT 指令

再回去跑測試,就開心的通過啦,跑所有模式,印出很多資訊(其實我的韌體一堆 ERROR,但是可以用了)。

附上一個自己寫的小測試,接 mega 的 Serial1,透過 Arduino 跟 ESP8622 聊天,聊天模式很OK喔。

螢幕截圖 2015-08-10 22.44.01

測試的指令:

螢幕截圖 2015-08-10 22.44.13

最後重開 Arduino,它還是會紀錄上一次的連線狀態喔,所以要記得設定時都要先 AT+RST,可參考官方 AT Command 文件

ITEADLIB_Arduino_WeeESP8266

這個 library 裡面其實實作就是把 API 轉成 AT Commands,所以直接看查 .h 檔 .cpp 檔就可以知道哪個 AT Command 對應到哪個 API,大部分都在範例裡面了,剩下才要看 API,例如 deepSleep(ms),可以計算電池在睡眠跟啟動模式下可以用多久。

螢幕截圖 2015-08-10 22.44.37

應用小範例:

另外接了土壤濕度偵測,把資料 POST 到免費的 IOT 平台 thingspeak,有空再補完…。

範例程式:

小結:

如果克服韌體更新的痛苦過程,這應該是顆 CP 值爆表的模組吧!未來研究完 BLE or Zigbee 再來比較一下。最後可以試著直接用 ESP8266 with Arduino 專案直接燒程式進去取代 AT Command,可以不透過 Arduino 獨立運作。

(本文經作者同意轉載,原文連結

相關資源:

延伸閱讀

很短又完整的 ESP8266 簡介影片,必看!

Getting Started With The Esp8266 And Arduino

社群的 ESP8266 github & forum

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( 原文連結

Arduino ESP8266 Library

AT指令文件

ESP 系列詳細規格比較 (原文連結

喵喵

想在熱愛技術的同時…保有一些人性。

沒什麼特別擅長的喜好,只是喜歡東摸西摸,曾迷上魔術方塊一段時間,收集了幾十顆不同的,3 階的平均轉 23 秒,也喜歡丟三顆球的雜耍。都是許多幻想擁有但是無法特別出眾的能力,自學一段時間的 photoshop、3dmax 發現自己沒什麼美感,喜歡到處走走看看的旅行,也買了一把烏克麗麗,想知道自己能不能學會一種樂器,太多無法實現的想法,只好窩在書裡,以快不起來的速度閱讀,將思緒懸掛在心靈的角落。

更多介紹: http://mlwmlw.org/about-me/

更多文章:《阿喵就像家》部落格

上一篇: | 下一篇:

4 Comments

  1. 您好
    謝謝您精闢的介紹
    真是受用良多

    可以請問一下
    範例程式為什麼有兩個
    分別意義為何呢?
    第二個才是溫度監控嗎?

    謝謝您

    Post a Reply
    • 第一個範例是讓你把 ESP8266 跟 Arduino 對接,然後可以透過 Arduino IDE Serial 對 ESP8266 下 AT 指令。

      第二個就是濕度監控,透過 wifi 上傳濕度到 thingspeak 的範例。

      Post a Reply
  2. 您好

    我有試著直接用 Arduino 專案直接燒程式進去ESP8266 ,並且也成功使用,但有問題是如果還ESP8266回復成AT Command,該怎麼做,每次上電ESP8266都會直接執行我燒進去的程式,沒辦法下AT Command。

    Post a Reply
    • 歡迎到MakerPRO社群提問:https://www.facebook.com/groups/makerpro.cc/

      Post a Reply

我想回應

你的電子郵件位址並不會被公開。 必要欄位標記為 *

成城共創股份有限公司版權所有、轉載必究.Copyright(c) 2017 MakerPRO