2016-05-31 126 views
0

我有一個Arduino兆2560的Arduino:與ESP8266連接的Arduino又名ESP-01

我想將它連接到ESP8266又名ESP 01模塊。

首先我打開並編譯一個空的草圖。當我啓動串行監視器時,我在串行監視器中寫入AT命令(如連接WIFI),然後單擊發送按鈕。在這種情況下,一切正常。

我測試了命令後,我想寫一個Arduino草圖,其中我實現了自動發送命令而不用寫入串口監視器的功能。

爲此,我寫這樣的代碼:

#define SSID "test" 
#define PASS "1111" 

void connectWiFi() { 
Serial.write(「AT+CWJAP=\"SSID\",\"PASS\""); 
} 

void setup() { 

Serial.begin(9600); 

connectWiFi(); 

} 

void loop() { 
} 

當我嘗試以執行串行監控代碼,它是隻打印字符串,但該命令不起作用。

爲什麼當我在串口監視器上編寫這個命令的時候,當我嘗試上面的代碼時,這個命令不起作用?

有沒有辦法從arduino草圖傳遞和執行命令?如果錯誤,我的代碼中有什麼問題?

在此先感謝您的回覆。

對不起,我的英文。

+0

到底是這個應該怎麼辦?大多數運行代碼已被註釋掉。你的模塊如何連接?要軟件串行或硬件串行?你實際上並沒有讀回任何東西。 –

+0

我編輯帖子。但它連接到硬件串行。 – Federico

+0

嘗試使用println函數,如Serial.println(「您的AT命令」);而不是寫入功能 – Fruchtzwerg

回答

2

Serial.write(...)使arduino通過其串行端口(即USB或引腳0和1)寫入。讓Arduino直接向ESP發送指令的更好方法是定義「軟件串行」引腳與ESP通信。

例如,您需要包含SoftwareSerial.h並使用SoftwareSerial esp8266(2,3);使引腳2和3與ESP串行通信。

您的代碼應該是這個樣子:

#include <SoftwareSerial.h> 

#define SSID "test" 
#define PASS "1111" 

SoftwareSerial esp8266(2,3); 
void setup(){ 
    Serial.begin(9600); 
    esp8266.begin(9600); //ensure this baudrate is similar to your ESP's 
    delay(500); //give it some time 

    esp8266.println(「AT+CWJAP=\"SSID\",\"PASS\""); //send to ESP this way 
} 

void loop(){ 
    if(esp8266.available()){ 
    while(esp8266.available()){ 
     Serial.write(esp8266.read()); //make serial monitor print what ESP sends 
    } 
    } 
} 

您也可以參考this example進一步詳細