• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ESP Теряет соединение.

_Toor

New member
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>


const char *ssid = "ESP";

WiFiServer server(80);

const char *str = "qwertyuiop[asdfghjklzxcvbnm,qwertyuiosdfghjkxcvbnedrfgthn";
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_AP_STA);
WiFi.softAP(ssid);
server.begin();
Serial.println(ssid);
delay(0);
}

void loop() {
WiFiClient client = server.available();
while (client.connected()) {
client.write("d");
}
}

отправляет d от 1 до 6 раз и отваливается соединение через телнет, wifi остается.
 

Юрий Ботов

Moderator
Команда форума
1 апреля не закончилось?
- wifi client или ap_sta?
- кого вы называете словом telnet?
- где используется "str"?
или мне уже поря спать...
 

_Toor

New member
1 апреля не закончилось?
- wifi client или ap_sta?
- кого вы называете словом telnet?
- где используется "str"?
или мне уже поря спать...
Стринг не используется.
Подключаюсь через утилиту в прикрепленной фотографии она.
- wifi client или ap_sta? не понял вопроса, кажется я чего то не понимаю. Это даа.
Нет дело не в 1 апреле, просто я руконог.
 

Вложения

Юрий Ботов

Moderator
Команда форума
Судя по подключаемым H - файлам у вас web server он ожидает запросы по протоколу HTTP. Например что то вроде "GET путьдофайла HTTP/1.1\r\n...". Вы цепляетесь к нему по протоколу Telnet. У него свои протоколы. При старте он посылает серверу запрос на авторизацию, который http абсолютно не знаком... В принципе, даже повиснуть может. Для начала поставьте в Putty "connection type: Raw" вместо Telnet, чтобы он не удивлял сервер незнакомыми протоколами и посылайте http серверу команды на понятном для него языке HTTP запросов.
 

_Toor

New member
WiFi тоже хочет, чтобы ему дали время для выполнения своих задач.
У вас прога зацикливается в этом цикле, пока собака не сбросит, ну или пока клиент сам не отвалится.
Именно этого мне и нужно, что бы он просто отправлял d без остановки, пробовал добавить delay(100); Что бы как вы сказали дать время wifi, где то читал, что это и дает ему время, хотя не уверен. Все равно отваливается.

Собачку как я понимаю отключить нельзя.
 
Последнее редактирование:

CodeNameHawk

Moderator
Команда форума
Попробуйте не задерживаться в основном цикле loop.
Типа "вошли" в цикл - передали "несколько байт" и "вышли" из основного цикла.
 

Сергей_Ф

Moderator
Команда форума
@_Toor client.flush(); дожидается окончания отправки буфера. А у Вас он переполнялся, наверное.
 

_Toor

New member
@_Toor
Попробуйте
Код:
while (client.connected()) {
client.write("d");
client.flush();
delay(0);
}
замените Ваш while на if, например.
Просто дайте программе дойти до конца основного цикла, а дальше она сама все сделает, даже без client.flush();
>>Попробуйте не задерживаться в основном цикле loop.
>>Типа "вошли" в цикл - передали "несколько байт" и "вышли" из основного цикла.
но ведь loop идентичен while(true){}
и если я его закрою я туда больше не вернусь. Или я вас не правильно понял. Дожидаться окончания отправки хороший вариант как мне кажется.
и мне все еще интересно, если я вывалюсь из loop() по return куда я попаду? Без отладчика СЛОЖНО СЛОЖНО :)

>>замените Ваш while на if, например.
>> тогда можно не проверять на подключения, а просто отсылать данные.
Хотя да, возможно с if оно бы и заработало. Но нынешнее решение меня устраивает.

Есть еще один маленький вопросик, есть какие то пути отладки?
Например так как это делается в C# или С++. Точки останова, просмотр переменных?
Использую VisualStudio 15 + Visual.Micro.Arduino.Studio
( Кстати последний очень советую, подсветка intellisense и все такое)
По железу напрямую подключаю к ардуино, замыкая reset на землю.

В любом случае, огромное вам спасибо)
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
ведь loop идентичен while(true){}
в общем случае это так, но не применительно к Ардуино ИДЕ для esp8266. Здесь окончание loop позволяет делать esp обслуживание wifi. На счёт того, что не понадобится flush() в этом случае, я не совсем уверен. Может понадобится. А вот логику работы можно будет выстроить правильную.

Вываливаться из loop можно, но не нужно. Ничего хорошего не будет.
 

Paul_B

Member
client.flush(); дожидается окончания отправки буфера. А у Вас он переполнялся, наверное.
Да, вот тут, я оказывается и находил, что client.flush() якобы дожидается отправки буфера. Но так же есть мнение, что на самом деле он очищает буфер, полученный но не прочитанный.
 
Сверху Снизу