Arduino Uno+;ESP01模块HTTP请求问题

Arduino Uno+;ESP01模块HTTP请求问题,arduino,httprequest,at-command,Arduino,Httprequest,At Command,我一直在使用我的Arduino Uno板和ESP01模块。我的目标是向远程服务器发送HTTP请求,并获取远程数据库的最后一个条目。此条目是远程切换按钮的状态,可通过远程服务器上的网页进行修改。我正在使用AT命令 要检查切换按钮的状态,每秒都会从Arduino Uno发送HTTP请求 我编写的Arduino草图配置了ESP01,将其连接到wifi,并发送HTTP请求 Arduino草图: #包括 软件串行串行串行esp8266(2,3);//接收,发送 String server=“someSer

我一直在使用我的Arduino Uno板和ESP01模块。我的目标是向远程服务器发送HTTP请求,并获取远程数据库的最后一个条目。此条目是远程切换按钮的状态,可通过远程服务器上的网页进行修改。我正在使用AT命令

要检查切换按钮的状态,每秒都会从Arduino Uno发送HTTP请求

我编写的Arduino草图配置了ESP01,将其连接到wifi,并发送HTTP请求

Arduino草图:

#包括
软件串行串行串行esp8266(2,3);//接收,发送
String server=“someServer”;
字符串cadena=“”//存储HTTP请求
无效设置(){
SerialESP8266.begin(9600);
Serial.begin(9600);
SerialESP8266.setTimeout(5000);
//检查ESP8266响应
SerialESP8266.println(“AT”);
if(SerialESP8266.find(“OK”))
Serial.println(“正常”);
其他的
Serial.println(“ESP8266上的错误”);
//ESP8266处于STA模式。
SerialESP8266.println(“AT+CWMODE=1”);
if(SerialESP8266.find(“OK”))
Serial.println(“ESP8266站模式…”);
//连接到wifi
SerialESP8266.println(“AT+CWJAP=\“mySSID\”,“somePassword\”);
Serial.println(“连接…”);
SerialESP8266.setTimeout(10000);//正在等待连接
if(SerialESP8266.find(“OK”))
Serial.println(“WIFI正常”);
其他的
Serial.println(“无法连接…”);
SerialESP8266.setTimeout(2000);
//禁用多个连接
SerialESP8266.println(“AT+CIPMUX=0”);
if(SerialESP8266.find(“OK”))
Serial.println(“禁用多个连接”);
}
void循环(){
SerialESP8266.println(“AT+CIPSTART=\“TCP\”,\“+server+”,80”);
//连接到服务器
if(SerialESP8266.find(“OK”)){
Serial.println();
Serial.println();
Serial.println();
Serial.println(“服务器连接成功…”);
//阿玛莫斯·埃尔·恩卡贝扎多·德拉佩蒂西奥http
字符串peticionHTTP=“GET/readLast.php”;
peticionHTTP=peticionHTTP+“HTTP/1.1\r\n”;
peticionHTTP=peticionHTTP+“主机:someserver\r\n\r\n”;
peticionHTTP=peticionHTTP+“主机:本地主机\r\n\r\n”;
//发送HTTP请求的长度
SerialESP8266.print(“AT+CIPSEND=”);
SerialESP8266.println(peticionHTTP.length());
//正在等待“>”以发送HTTP请求
if(SerialESP8266.find(“>”){
//我们可以在显示>时发送HTTP请求
Serial.println(“发送HTTP请求…”);
SerialESP8266.println(peticionHTTP);
if(SerialESP8266.find(“发送确定”)){
println(“HTTP请求已发送…”);
Serial.println();
序列号println(“待命…”);
布尔值fin_respuesta=false;
long tiempo_inicio=millis();
cadena=“”;
while(fin_respuesta==false){
while(SerialESP8266.available()>0){
char c=SerialESP8266.read();
串行写入(c);
concat(c);//将请求字符串存储在“cadena”上
}
//如果“cadena”长度大于3500,则终止
如果(cadena.length()>3500){
Serial.println(“请求超出了最大长度…”);
SerialESP8266.println(“AT+CIPCLOSE”);
if(SerialESP8266.find(“OK”))
Serial.println(“连接终止…”);
fin_respuesta=真;
}
如果((毫秒()-tiempo_inicio)>10000){
//如果连接时间超过最大值,则终止
Serial.println(“超过连接时间…”);
SerialESP8266.println(“AT+CIPCLOSE”);
if(SerialESP8266.find(“OK”))
Serial.println(“连接终止”);
fin_respuesta=真;
}
如果(cadena.indexOf(“关闭”)>0){
Serial.println();
Serial.println(“字符串正常,连接终止”);
fin_respuesta=真;
}
}
}否则{
Serial.println(“HTTP请求出错…”);
}
}
}否则{
Serial.println(“找不到服务器…”);
}
延迟(1000);//新循环前延迟1秒
}
HTTP请求(GET请求)由服务器上的
readLast.php
处理,该服务器连接到数据库并返回切换按钮的最后状态。可能有两种状态:encender(打开)或apagar(关闭)

readLast.php


第一个HTTP请求正确返回切换按钮的状态。但下一个HTTP请求返回错误的HTTP请求:

IPD,298:HTTP/1.1 200 OK
Date: Fri, 01 Dec 2017 01:40:56 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: awex
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Request-ID: cf44e42dbd53cb7cb5456e4b70e3399d

10
accion: encender

+IPD,5:0

+IPD,428:HTTP/1.1 400 Bad Request
Date: Fri, 01 Dec 2017 01:40:56 GMT
Content-Type: text/html
Content-Length: 170
Connection: close
Server: awex
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Request-ID: d8ffa7b4eece5d1e88c7786fea5ace9f

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>openresty</center>
</body>
</html>
CLOSED
IPD,298:HTTP/1.1200正常
日期:2017年12月1日星期五01:40:56 GMT
内容类型:text/html;字符集=UTF-8
传输编码:分块
连接:保持活力
服务器:awex
X-Xss-Protection:1;模式=块
X-Content-Type-Options:nosniff
X-Request-ID:CF44E42DB53CB7CB5456E4B70E3399D
10
疫苗:恩森德
+知识产权署,5:0
+IPD,428:HTTP/1.1400错误请求
日期:2017年12月1日星期五01:40:56 GMT
内容类型:text/html
内容长度:170
连接:关闭
服务器:awex
X-Xss-Protection:1;模式=块
X-Content-Type-Options:nosniff
X-Request-ID:d8ffa7b4eece5d1e88c7786fea5ace9f
400错误请求
400错误请求
openresty
关闭

我做错了什么?

我也有同样的问题,但能够通过以下方法解决:

     while(SerialESP8266.available()>0) {
        char c=SerialESP8266.read();
        Serial.write(c);
        cadena.concat(c); //store the request string on "cadena"
        if (cadena.length() > 50) cadena = "";
      }
这个问题是由于
string.indexof()的限制造成的


支持的最大字符数为170,任何较大的字符都无法使用。

我也遇到了同样的问题,但可以通过以下方式解决:

     while(SerialESP8266.available()>0) {
        char c=SerialESP8266.read();
        Serial.write(c);
        cadena.concat(c); //store the request string on "cadena"
        if (cadena.length() > 50) cadena = "";
      }
这个问题是由于
string.indexof()的限制造成的

支持的最大字符数为170,任何较大的字符都无法使用