2016-11-05 12991 views
0

我正在嘗試使用Arduino和ESP8266模塊,現在我試圖將一些傳感器數據發送到TCP服務器。爲此,我使用AT + CIPSTART命令(建立TCP連接)和AT + CIPSEND來發送數據。ESP8266:如何使用AT + CIPSEND命令發送TCP消息

如果我使用串行監視器測試它,它工作正常。輸入CIPSEND命令後,我可以在終端中寫入一些文本,並將此消息/文本發送到TCP服務器。

當我試圖使它在Arduino草圖中時,它會發送一條空的消息。連接有效,但我沒有看到任何數據。

如何使用我的TCP數據包發送消息文本(msg)?

下面的代碼片段

// ESP8266 Client 
String cmd = "AT+CIPSTART=\"TCP\",\"";// Setup TCP connection 
    cmd += IP; 
    cmd += "\",3103"; 
    sendDebug(cmd); 
    delay(2000); 
    if(Serial.find("Error")) 
    { 
    debug.print("RECEIVED: Error\nExit1"); 
    return; 
    } 

    String msg = "test"; 
    Serial.print("AT+CIPSEND="); 
    Serial.println(msg.length()); 
    if(Serial.find(">")) 
    { 
    debug.print(">"); 
    debug.print(msg); 
    Serial.print(msg); 
    } 
    else 
    { 
    sendDebug("AT+CIPCLOSE");//close TCP connection 
    } 
    if(Serial.find("OK")) 
    { 
    debug.println("RECEIVED: OK"); 
    } 
    else 
    { 
    debug.println("RECEIVED: Error\nExit2"); 
    } 
} 
+0

你發送AT + CIPMUX = 0是否只有一個連接?在你的AT + CIPSEND = len之後它是否會返回'''以外的東西?你可以發佈日誌嗎? – leetibbett

回答

0

首先,選擇多少字符或字節需要傳輸。最好使用softwareSerial庫來連接ESP8266併發送AT命令。

假設yow想要發送5個字節。鍵入以下AT命令並且在發送數據之前必須給出大於100毫秒的延遲。這裏「\ r」是回車符,「\ n」是新行。包括這個之後,ESP8266可以理解你已經結束了命令。

esp.print("AT+CIPSEND=5\r\n"); 
delay(1000); 
esp.print("Hello"); 

您的代碼不工作,因爲你正在使用透傳模式。因此,要完成一個數據包,您需要傳輸2048個字節,而不是您寫的數據。