Arduino Uno + ESP8266阅读服务器的响应

时间:2016-01-29 13:41:44

标签: arduino arduino-uno esp8266

我正在使用ESP8266从Arduino Uno发送GET请求。请求已发送,但我无法打印收到的回复。

我使用https://elementztechblog.wordpress.com/2015/05/13/esp8266-based-temperature-data-logger-using-arduino/

中的代码

我已经更改了连接到服务器的代码,我可以在服务器的日志中看到GET请求。

我尝试了

 while (ser.available())
 {
     Serial.write(ser.read());
 }

Serial.println("AT+CIPCLOSE");声明之后。

但我在"AT+CIPCLOSE"

之后没有在串口显示器上获得任何内容

修改 这是我的整个代码:

// connect 10 to TX of Serial USB
// connect 11 to RX of serial USB
SoftwareSerial ser(10, 11); // TX, RX

// this runs once
void setup()
{

    // enable debug serial
    Serial.begin(9600);
    // enable software serial
    ser.begin(9600);

    // reset ESP8266
    ser.println("AT+RST");
}
// the loop
void loop()
{

    // TCP connection
    String cmd = "AT+CIPSTART=\"TCP\",\"";
    cmd += "192.168.0.25"; 
    cmd += "\",3000";
    ser.println(cmd);

    if(ser.find("Error"))
    {
        Serial.println("AT+CIPSTART error");
        return;
    }

    // prepare GET string
    String getStr = "GET /api/myservice";

    getStr += "\r\n\r\n";

    // send data length
    cmd = "AT+CIPSEND=";
    cmd += String(getStr.length());
    ser.println(cmd);

    if(ser.find(">")){
    ser.print(getStr);
}
else
{ 
    ser.println("AT+CIPCLOSE");
    // alert user
    Serial.println("AT+CIPCLOSE");

    // CODE I FOUND FOR READING THE REPLY FROM SERVER:
    while (ser.available())
    {
         // char c = ser.read();
         Serial.write(ser.read());
         // if (c == '\r') Serial.print('\n');
    }
}

delay(1000);
}

ESP详细信息:

ESP-01

AT版本:0.40.0.0

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您只是努力阅读回复,那么答案很简单;

在尝试阅读之前,您正在关闭TCP连接:

ser.println("AT+CIPCLOSE");
// alert user
Serial.println("AT+CIPCLOSE");

// CODE I FOUND FOR READING THE REPLY FROM SERVER:
while (ser.available())
{

将读数移动到ser.print(getStr);正下方的上方块中,但也会在两者之间添加延迟。