用過ESP8266這塊模組,才知道物聯網的魅力有多大。
ESP8266不但便宜得要命,功能又相當齊全,拿來做物聯網真的再適合不過了。
之前在網拍買了三顆ESP8266-ESP01,因為沒時間,只研究了一陣子就停擺,結果現在竟然出到ESP12了,實在讓人措手不及啊...。
ESP8266-ESP01有引出八支腳,雖然不多,但只要能接上Arduino就不是什麼大問題,唯一的缺點就是沒辦法直接插麵包板,有需求的話需要再另外加工,我都是直接插杜邦線比較快一些。
ESP8266-ESP01需要3.3V的輸入,用5V電源可能會有燒壞的危險,雖然Arduino本身就有提供3.3V的電源,但是為了保險跟方便,我還是順手從網拍購買了電源穩壓模組AMS1117-3.3V來使用,避免一時疏忽接錯線導致損壞。
不過關於這顆穩壓模組,有段小插曲,不知道是不是我買來放太久的關係,測試的時候出現電壓不穩的情形,ESP8266-ESP01上的LED忽明忽滅,甚至熄滅,估計是已經損壞了,到最後我乾脆都用Arduino給的3.3V,所以需不需要加裝這顆模組就見仁見智了。
目前我打算搭配Arduino來做一些簡易的開關控制,因為Arduino的操作比較簡單,網路上可查詢的資源也比較多,所以我希望可以單利用Arduino來完成這次的測試,而不再用到其他的硬體,待熟悉之後再來發展其他應用。
這次的測試很簡單,目標是完成以下兩個步驟:
1.利用Arduino幫ESP8266更新韌體。
2.讓Arduino傳遞AT指令給ESP8266。
不過看起來好像很簡單的兩個步驟,卻花了我大把時間,因為之前一直找不到利用Arduino傳遞訊息給ESP8266的方法,韌體更新也一直出包。這篇就是把我遇到的瓶頸當做筆記寫下,也希望能幫到需要的人。
1.利用Arduino幫ESP8266更新韌體。
2.讓Arduino傳遞AT指令給ESP8266。
不過看起來好像很簡單的兩個步驟,卻花了我大把時間,因為之前一直找不到利用Arduino傳遞訊息給ESP8266的方法,韌體更新也一直出包。這篇就是把我遇到的瓶頸當做筆記寫下,也希望能幫到需要的人。
硬體的部分基本上就是準備好Arduino跟ESP8266-ESP01而已,大致準備就緒之後,就可以開始動工囉。
參考:
參考:
1.1 韌體燒錄:準備檔案
必須先到官方下載需要的韌體跟燒錄程式,當然還有Arduino IDE。
#Arduino.cc
#燒錄程式 Flash Download Tools V2.4
#韌體 ESP8266 NONOS SDK V2.0.0
#入門指南 ESP8266 Non-OS SDK AT 指令集
#Arduino.cc
#燒錄程式 Flash Download Tools V2.4
#韌體 ESP8266 NONOS SDK V2.0.0
#入門指南 ESP8266 Non-OS SDK AT 指令集
1.2 韌體燒錄:接線
注意電源的輸入是3.3V,如果使用5V的話,需要另外串接電阻或是電源穩壓模組。
1.3 韌體燒錄:燒錄程式與韌體
Arduino RX - URXD ESP8266 Arduino TX - UTXD ESP8266 Arduino 2 - GPIO0 ESP8266 Arduino 3 - CH_PD ESP8266 Arduino 3.3V - VCC ESP8266 Arduino GND - GND ESP8266
都沒問題的話就可以直接開啟Arduino將程式碼編譯上傳。
程式碼:
int ch_pd = 3; int io0 = 2; void setup() { pinMode(ch_pd, OUTPUT); pinMode(io0, OUTPUT); digitalWrite(io0, LOW); digitalWrite(ch_pd, LOW); delay(1000); digitalWrite(ch_pd, HIGH); } void loop(){ }Arduino確定沒問題之後就可以開始進行燒錄了,需要燒錄的檔案,官方的說明文件都有寫,基本上不難看懂。
只要照著說明文件將檔案導入燒錄程式就可以了,選擇相應的FLASH SIZE,傳輸速率選擇115200。
整個燒錄過程可以參考我製作的影片。
2.1 AT指令測試:接線
參考:
#ESP8266 Wi-Fi Module Revisited
#ESP8266 NODEMCU UART to Exosite HTTP API bridge
與燒錄韌體不同,Arduino要跟ESP8266-ESP01進行通訊的話,接線方式要更改。
Arduino 4 - UTXD ESP8266 Arduino 5 - URXD ESP8266 Arduino 3.3V - CH_PD ESP8266 Arduino 3.3V - VCC ESP8266 Arduino GND - GND ESP8266
接線時記得要注意電源是不是有接錯,接到5V的話,ESP8266-ESP01工作時會持續高溫,有可能會導致損壞。
2.2 AT指令測試:程式碼編譯與通訊測試
硬體的部分準備好之後,就可以直接將程式碼上傳至Arduino。
程式碼:
#include <SoftwareSerial.h> esp8266(4,5); void setup() { Serial.begin(9600); Serial.println("Arduino...OK"); esp8266.begin(115200); esp8266.write("AT+UART_DEF=9600,8,1,0,0\r\n"); delay(1500); esp8266.begin(9600); Serial.println("ESP8266...OK"); } void loop() { if (esp8266.available()) { Serial.write(esp8266.read()); } if (Serial.available()) { esp8266.write(Serial.read()); } }上傳完畢後就可以直接在序列埠視窗測試AT指令了。ESP8266預設的傳輸速率是115200,需要先改成9600才有辦法跟Arduino互相聊天,修改的步驟已經一起寫進Arduino了,每次Arduino一打開就會自動輸入一次AT指令進行修改。
官方給的AT指令集裡寫的其實都很清楚,整個程式碼編譯與測試的過程可以參考我製作的影片。
如果測試過程有不斷的跳出奇怪的訊息,或是發生ESP8266不斷自己重啟的狀況,極有可能是電壓不穩所造成的,試著檢查ESP8266上的紅色LED光源是否呈現微弱或是閃爍的情形。
韌體燒錄跟AT指令測試都沒問題,到這邊就告一段落囉!
你好 想請問燒錄時鮑率有辦法調成9600嗎
回覆刪除您好,請教一下,esp01燒錄後,AT指令沒有反應
回覆刪除我esp8266 燒錄成功 同了 WiFiScan example 正常, 用了\r\n 試了 9600 115200 , AT 都沒反應
回覆刪除請問你的軟硬體設備跟操作方式有跟文章內容完全一樣嗎?
刪除你的問題看起來只是兩端通訊出了問題
剛上電時
PC <<9600>> Arduino <<115200>> esp8266
更改鮑率後
PC <<9600>> Arduino <<9600>> esp8266
Arduino的程式碼還滿關鍵的
印象中當初我摸索了許久才弄懂
畢竟是很多年前的文章
官方給的資料跟軟韌體與當初都不同了
我不太確定這篇文章還適用目前的環境
所以沒辦法確實的回答你,不好意思。