[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; } |
留言
張貼留言