2016-11-09 105 views
0

我正在做一個任務,發送傳感器數據通過WIFI從esp到PC應用程序進行可視化。除了將軟件序列中的傳感器數據從UNO發送到ESP之外,本項目的所有部分都已完成。Arduino UNO和ESP8266 HUZZAH突破之間的軟件序列

接線:

  • 連接的Rx(0)UNO的引腳(12)在ESP。作爲Tx

  • 將UNO的Tx(1)連接到分壓器以將3.3 v連接到ESP。引腳(14)爲Rx。

  • ESP的地面。到UNO的地面。
  • ESP的V +。到UNO的3v3。

代碼:

Attached兩個代碼,如果它是工作或沒有測試這個過程。一個在ESP上,另一個在arduino上

建設後我發現根據下面的屏幕顯示,有什麼是因爲while循環的條件和我設置的延遲,但輸出轉換爲數字不是字符串,隨機數!

enter image description here

+0

我使用的軟件序列號:https://github.com/plerup/espsoftwareserial – ahmadeb

+0

串行監視器輸出是來自Uno還是ESP8266?你應該編輯你的帖子,在你的草圖中包含在計算器上。 – per1234

+0

來自ESP8266。最近我認爲這個過程會有一個代碼,沒有兩個單獨的代碼。我的主要問題是如何使用ESP8266作爲模塊到arduino UNO?! – ahmadeb

回答

1
  • V ESP的+。到UNO的3v3。

在一個標準的烏諾的3V3引腳將不會提供一個ESP8266可靠地工作,足夠的電流。

Uno上的Serial連接到Arduino的引腳0和1,它們用於輸出到計算機上的串行監視器(以及上傳草圖)。您還使用引腳0和1使用軟件串行與ESP8266進行通信。您不能同時使用相同的引腳來實現這些目的。您需要爲軟件序列使用不同的引腳,或者由於您目前沒有對串行進行任何有用的操作,因此您可以切換到使用Uno上的串行與ESP8266進行通信並刪除軟件串行代碼。

如果你打算繼續在Uno上使用軟件串口,那麼你應該使用低於115200的波特率,因爲Arduino SoftwareSerial庫在那個速度下不可靠。

我不知道你怎麼想這個代碼是這樣做的:

char x = "ahmad,54,54,45"; 
while (ESPserial.available()) { 
ESPserial.write(x); 

但它絕對行不通的。

行:

char x = "ahmad,54,54,45"; 

是等價的:

char x = 16; 

也許你想用一個字符數組:

char x[] = "ahmad,54,54,45"; 

但是不會與

兼容
ESPserial.write(x); 

所以你要麼需要將其更改爲:

ESPserial.print(x); 

,它將打印完整的字符串一次,或者你可以通過數組一個字符時工作:

ESPserial.write(x[i]); 

的line:

while (ESPserial.available()) { 

檢查是否有來自ESP8266的輸入數據可用,但這永遠不會是真的,因爲您不需要ver通過軟件串行發送來自ESP8266的任何數據。如果它曾經接收過任何數據,那麼它將永久停留在while循環中,因爲你從不讀取接收到的數據。然後,而不是讀的是不存在的輸入數據,你寫ESP8266 16號:

ESPserial.write(x); 

我建議你閱讀documentation for the Arduino SoftwareSerial library時間。相同的信息也應該適用於ESP8266上的ESP8266 SoftwareSerial library you're using