• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Связь с http сервером

VladPTZ

New member
Прошивка 00200.9.4
Для отправки данных на WEB сервер использую команды:
Соединение AT+CIPSTART отправка AT+CIPSEND
На 2-10 цикл отправки данных, модуль перестает соединятся и отправлять данные на вэб сервер, до тех пор пока не переподключусь к точке доступа AT+CWJAP .
Почему перестают передаваться данные?
Сообщение выдает "connect timeout"
Тоже самое происходит при отправке данных на сайт narodmon.ru

Пример кода (основу взял где-то в интернете)
#include <SoftwareSerial.h>
#define SSID "dd-wrt"
#define PASS "88888888"
#define DST_IP "220.181.111.85" //baidu.com
SoftwareSerial wifiport(10, 11); // RX, TX

void setup()
{
// Open wifiport communications and wait for port to open:
wifiport.begin(19200);
//wifiport.setTimeout(5000);
Serial.begin(57600); //can't be faster than 19200 for softwifiport
Serial.println("ESP8266 Demo");+
//test if the module is ready
wifiport.println("AT");
delay(5000);
if(wifiport.find("OK"))
{
Serial.println("Module is ready");
}
else
{
Serial.println("Module have no response.");
while(1);
}
delay(1000);
//connect to the wifi
boolean connected=false;
for(int i=0;i<5;i++)
{
if(connectWiFi())
{
connected = true;
break;
}
}
if (!connected){while(1);}
delay(5000);
//print the ip addr
/*wifiport.println("AT+CIFSR");
Serial.println("ip address:");
while (wifiport.available())
Serial.write(wifiport.read());*/
//set the single connection mode
wifiport.println("AT+CIPMUX=0");
}

void loop()
{
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
wifiport.println(cmd);
Serial.println(cmd);
if(wifiport.find("Error")) return;
cmd = "GET / HTTP/1.0\r\n\r\n";

wifiport.print("AT+CIPSEND=");
wifiport.println(cmd.length());
if(wifiport.find(">"))
{
Serial.print(">");
}else
{
wifiport.println("AT+CIPCLOSE");
Serial.println("connect timeout");
delay(1000);
return;
}
wifiport.print(cmd);
delay(2000);
//wifiport.find("+IPD");
while (wifiport.available())
{
char c = wifiport.read();
Serial.write(c);
if(c=='\r') Serial.print('\n');
}
Serial.println("====");
delay(1000);
}


boolean connectWiFi()
{
wifiport.println("AT+CWMODE=1");
String cmd="AT+CWJAP=\"";
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
Serial.println(cmd);
wifiport.println(cmd);
//delay(2000);
if(wifiport.find("OK"))
{
Serial.println("OK, Connected to WiFi.");
return true;
}else
{
Serial.println("Can not connect to the WiFi.");
return false;
}
}
 
Последнее редактирование:

pvvx

Активный участник сообщества
Если во время AT+CIPSEND сервер передаст disconnect (пакет TCP c [FIN]), то останется висеть вечно процедура в прошивке, вызываемая по таймеру (вызываемая каждые 0.25 сек или меньше - зависит от версии SDK) и кол-во отрытых соединений у AT уменьшиться на одно (их всего 4). При следующей аналогичной итерации - будет висеть уже две процедуры с вызовом по таймеру, а после 4-ой итерации больше никаких соединений не откроется. Придется перезагружать модуль. Но, возможно и другое развитие - при следующем открытии соединения, после "зависа" первого, то "зависшее" сразу закроет новое открытое. По этой причине, в AT не стоит руководствоваться номерами соединений - они путаются. Это всё связано с неисправляемым багом у прошивок от Espressif.
Пока, c помощью текущих AT вы можете сделать только настройку WiFi и всё. Остальное там недоделано и приводит к глюкам. Кое как работает только UDP.
 
Последнее редактирование:
Сверху Снизу