2017-02-28 90 views
1

Arduino的我建立了一個系統,它可以跟使用ESP8266與火力的Arduino庫我的火力地堡的應用程序,ESP8266談話藉助串行通訊

一切完美的作品,但是我現在已經做了ESP8266談一個問題,並聽取了微控制器這是獨立的Atmega328P(在Arduino Uno中使用的)。

這裏是要點 1-不能使用softwareSerial,因爲所有的數字引腳都被佔用。 2-嘗試不同的Bauds有同樣的問題。 3-只有一次工作,Arduino能夠正確收聽串口。但無法通過ESP從串行讀取。

我絕對可以將字符串寫入到從ESP串行和Arduino的看,而是嘗試使用IF語句時,無法識別字符串,

所以,我想給println字符串的4倍,這是我得到的。

鎖門

鎖門

鎖門

鎖門

如果有人能解決這個問題,我發佈的代碼爲雙方的Arduino和ESP

ESP碼

void getData(){ 

FirebaseObject object = Firebase.get(EspMac); 
String Door = object.getString("Door"); 
String Connection = object.getString("Connect"); 
if(Door == "Open Door"){ 
    Serial.println(Door); 
    delay(100); 
    Firebase.set(path3,""); 
    Door = ""; 
}else if(Door == "Lock Door"){ 
    Serial.println(Door); 
    delay(100); 
    Firebase.set(path3,""); 
    Door = ""; 
}else if (Connection == "Connect"){ 
    Firebase.set(path5,"Received"); 
    Connection = ""; 
    } 

} 

ARDUINO代碼

do { 
    if(digitalRead(wipeB) == LOW) 
     servoDoorOpen(); 
    while (Serial.available() > 0){ 
    String Door = Serial.readString(); 
    delay(100); 
    Serial.println(Door); 
    Serial.println(Door); 
    Serial.println(Door); 
    Serial.println(Door); 


    if (Door.equals("Open Door")){ 
     //Serial.println("We open Doors"); 
     servoDoorOpen(); 
     Door = ""; 
    } 
    else if (Door.equals("Lock Door")){ 
     //Serial.println("We Lock Doors"); 
     servoDoorLock(); 
     Door = ""; 
    } 
    } 

謝謝。

+0

你的佈線是什麼?您需要在ESP8266和Arduino之間使用邏輯電平轉換器,因爲它們分別是3.3V和5V器件。硬件串行(RX,TX)連接可以在電平轉換時正常工作,我自己以250,000波特的波特率完成了多次,完美無瑕。 –

+0

我正在使用分壓器,它是兩個電阻之間的1k和第二個2.2k之間的Arduino TX和ESP8266 RX。我是否需要將電阻器更換爲其他東西? @MaximilianGerhardt – RamiRihawi

回答

0

最後,我已經解決了自己的問題, 還沒相當,但知道我怎麼解決這個問題,但我在代碼中增加了一些延遲,而不是一切都很正常

void getData(){ 
    FirebaseObject object = Firebase.get(EspMac); 
    String Door = object.getString("Door"); 
    String Connection = object.getString("Connect"); 
    if(Door == "Open Door"){ 
     Serial.println(Door); 
     Firebase.set(path3,""); 
     Door = ""; 
    }else if(Door == "Lock Door"){ 
     Serial.println(Door); 
     Firebase.set(path3,""); 
     Door = ""; 
    }else if (Connection == "Connect"){ 
     Firebase.set(path5,"Received"); 
     Connection = ""; 
    } 
} 

void loop() { 
    getData(); 
    while (Serial.available() > 0){ 
    delay (100); 
    String h = Serial.readString(); 
    String DoorStat = h.substring(0,11); 
    if (DoorStat.equals("Door Opened")){ 
     Firebase.set(path2, DoorStat.c_str()); 
     DoorStat=""; 
     delay(100); 
    }else if (DoorStat.equals("Door Locked")) 
     Firebase.set(path2, DoorStat.c_str()); 
    } 
} 

的Android代碼

do { 
    if(digitalRead(wipeB) == LOW) 
     servoDoorOpen(); 
    while (Serial.available() > 0){ 
    delay (100); 
    String h = Serial.readString(); 
    String Door = h.substring(0,9); 

    if (Door.equals("Open Door")){ 
     //Serial.println("We open Doors"); 
     servoDoorOpen(); 
     Door = ""; 
    } 
    else if (Door.equals("Lock Door")){ 
     //Serial.println("We Lock Doors"); 
     servoDoorLock(); 
     Door = ""; 
    } 
    }