• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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.
 
Последнее редактирование:
Сверху Снизу