我正在试验 Arduino 和 ESP8266 模块,现在我正在尝试将一些传感器数据发送到 TCP 服务器。为此,我使用 AT+CIPSTART 命令(建立 TCP 连接)和 AT+CIPSEND 发送数据。
如果我使用串行监视器测试它,它工作正常。输入 CIPSEND 命令后,我可以在终端中写入一些文本,该消息/文本将发送到 TCP 服务器。
当我尝试将其放入 Arduino sketch 中时,它会发送一条空消息。连接有效,但我看不到任何数据。
如何使用 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" );
}
}
首先选择需要传输多少字符或字节。最好使用软件串口库来连接ESP8266并发送AT命令。
假设您要发送 5 个字节,请输入以下 AT 命令,并且必须延迟 100 毫秒以上才能发送数据。这里 ” " 是回车符并且 " " 是新行。包含此行后,ESP8266 可以理解您已结束命令。
esp.print("AT+CIPSEND=5\r\n");
delay(1000);
esp.print("Hello");
您的代码无法正常工作,因为您使用的是 unvarnished 传输模式。因此,要完成一个数据包,您需要传输 2048 个字节,而您没有写入这些字节。