2016-11-05 6 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

接続が1つしかないことを伝えるためにAT + CIPMUX = 0を送信しましたか?あなたのAT + CIPSEND = lenの後に '> '以外のものを返していますか?ログを投稿できますか? – leetibbett

答えて

0

まずあり、送信するために必要とされているどのくらいの文字またはバイトを選択してください。 ESP8266に接続してATコマンドを送信するには、softwareSerialライブラリを使用する方がよいでしょう。

yowが5バイトを送信したいと仮定します。次のATコマンドを入力し、データを送信する前に100ミリ秒以上の遅延を与えなければなりません。ここでは "\ r"は改行で、 "\ n"は改行です。これを含めると、ESP8266はコマンドを終了したことを理解できます。

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

未塗装の送信モードを使用しているため、コードが機能しません。パケットを完成させるために、あなたが書いていない2048バイトを送信する必要があります。

関連する問題