[Arduino,ESP8266]使用Arduino測試/自動下達AT Command給ESP8266

前言

網路上關於ESP8266資源滿少的,而且有些也是存在錯誤,這邊除了修正一些錯誤和不明確的地方,另外還有自動下達AT Command的code給大家參考,特別注意是接收資料的地方因為是序列(Serial)阜,不能使用到Delay不然會發生問題

注意

如果你的ESP8266非透過外置電源運作(例如Arduino上的5V降壓3.3V)建議ESP8266的鮑率設置不要高過9600,因為可能會有鮑率不穩定的情況發生(吃電不足)

※新版本的ESP8266鮑率都是預設115200

暫時設置鮑率:
AT+UART_CUR=9600,8,1,0,0

設置並且保存鮑率:
AT+UART_DEF=9600,8,1,0,0

測試AT Command

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <SoftwareSerial.h>

//8266TX->4,8266RX->5
SoftwareSerial esp8266(4,5);

void setup() {
Serial.begin(9600);
esp8266.begin(9600);
}

void loop() {
if (esp8266.available()) {
Serial.write(esp8266.read()); //讀8266的資料
}
if (Serial.available()) {
esp8266.write(Serial.read()); //下達命令
}
}


自動下達AT Command

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <SoftwareSerial.h>

//8266TX->4,8266RX->5
SoftwareSerial esp8266(4,5);

void setup() {
  //鮑率設定
  Serial.begin(9600); //arduino 鮑率
  esp8266.begin(9600); //8266 鮑率
  delay(500);

  //測試
  Serial.write("ESP8266 TEST\n");
  at8266("AT\r\n");
 
}

void loop() {
  at8266("AT+GMR\r\n");
  while(1); //空轉
  
  
}

int at8266(char *AT){
   
   const long interval = 50; //延遲間隔
   unsigned long currentMillis = millis(); //最近一次執行時間
   unsigned long previousMillis = millis(); //上次執行時間
     
    esp8266.write(AT);
    
    while(1){
       currentMillis = millis();
      if(currentMillis - previousMillis >= interval) //等待接受資料
        break;

       if (esp8266.available()) {
          Serial.write(esp8266.read());
        }
  
   }
  return 0;
}

留言

這個網誌中的熱門文章

[Arduino]電子秤平 重量感測條+HX711AD模組

cpe練習筆記 UVa401 Palindromes

cpe練習筆記 UVa10019 Funny Encryption Method