菜單

ESP8266韌體燒錄與AT指令測試 with Arduino


用過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的方法,韌體更新也一直出包。這篇就是把我遇到的瓶頸當做筆記寫下,也希望能幫到需要的人。

硬體的部分基本上就是準備好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 指令集

1.2 韌體燒錄:接線
注意電源的輸入是3.3V,如果使用5V的話,需要另外串接電阻或是電源穩壓模組。
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

1.3 韌體燒錄:燒錄程式與韌體

都沒問題的話就可以直接開啟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指令測試:接線
韌體燒錄完成之後,接下來當然就是測試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指令測試都沒問題,到這邊就告一段落囉!



4 則留言:

  1. 你好 想請問燒錄時鮑率有辦法調成9600嗎

    回覆刪除
  2. 您好,請教一下,esp01燒錄後,AT指令沒有反應

    回覆刪除
  3. 我esp8266 燒錄成功 同了 WiFiScan example 正常, 用了\r\n 試了 9600 115200 , AT 都沒反應

    回覆刪除
    回覆
    1. 請問你的軟硬體設備跟操作方式有跟文章內容完全一樣嗎?
      你的問題看起來只是兩端通訊出了問題
      剛上電時
      PC <<9600>> Arduino <<115200>> esp8266
      更改鮑率後
      PC <<9600>> Arduino <<9600>> esp8266

      Arduino的程式碼還滿關鍵的
      印象中當初我摸索了許久才弄懂

      畢竟是很多年前的文章
      官方給的資料跟軟韌體與當初都不同了
      我不太確定這篇文章還適用目前的環境
      所以沒辦法確實的回答你,不好意思。

      刪除