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

Заливаем скетчи в ESP8266, управляем каналами по Wi-Fi, создаем свои сети.

Paul_B

Member
Такое впечатление, что client.flush();
тут не к месту
Спасибо, вечером попробую.
Т.е. client.flush() вставлять надо тогда, когда ты все получил и больше тебя ничего не интересует, т.е. практически перед client.stop()?
Странно, я где-то читал, что это что-то типа ожидания отправки посылок.
 

Сергей_Ф

Moderator
Команда форума
client.flash() - очистка непрочитанного буфера.
Это не очистка! Это слив, просто в конкретном случае он не нужен. И, да, он не ждёт, а просто принудительно сливает. Конкретную реализацию надо смотреть уже в SDK esp.
Функция flush() на C/C++ - С++ для начинающих - Киберфорум
 

kab

New member
Это не очистка! Это слив, просто в конкретном случае он не нужен. И, да, он не ждёт, а просто принудительно сливает. Конкретную реализацию надо смотреть уже в SDK esp.
Функция flush() на C/C++ - С++ для начинающих - Киберфорум
Я тоже не до конца понимаю смысл этой функции.
Правильно, ли я предполагаю, что если flush() нет, то данные из буферов забираются принимающей стороной по мере её (принимающей стороны) технической готовности - по какому-то сигналу готовности.
А по команде flush данные из буфера принудительно отправляются на выходные (для буфера) цепи. Что, в случае технической неготовности принимающей стороны к приёму - аналогично уничтожению содержания буфера?

Это так?
 
Последнее редактирование:

Paul_B

Member
Правильно, ли я предполагаю, что если flush() нет, то данные из буферов забираются принимающей стороной по мере её (принимающей стороны) технической готовности - по какому-то сигналу готовности.
А по команде flush данные из буфера принудительно отправляются на выходные (для буфера) цепи. Что, в случае технической неготовности принимающей стороны к приёму - аналогично уничтожению содержания буфера?
Я так понял, что при поступлении информации она хранится в буфере и может быть считана по команде
while (client.available())
при выполнении команды client.flush(), буфер очищается и client.available()=0
 

Сергей_Ф

Moderator
Команда форума
Вот что написано для Java:
Код:
void flush() - финализирует выходное состояние, очищая все буферы вывода
Ни о каком входном буфере речи не идёт. Она должна работать только для записи. По идеи, принудительно финализировать запись из буфера, что приводит к его очистке. Но конкретную реализацию надо смотреть в SDK. Что там сделали китайцы, только они и знают.
 

Paul_B

Member
Еще вопрос. Выше я описывал как два модуля могут общаться друг с другом посредством организации на них tcp-сервера через
Код:
WiFiServer server(80);
Обмен информацией идет, поскольку в адресате явно можно прописать IP-адрес и обмен будет вестись даже если два модуля находятся в одной сети, а не один является клиентом другого:
Код:
String Send(IPAddress ip, int port, String Subj)
{
     WiFiClient client;
     if (client.connect(ip, port))
       {
         client.flush();
         client.print(Subj+"\r");
         unsigned long timeout = millis();
         while (client.available() == 0) 
           {
           if (millis() - timeout > 5000) 
              {
               Serial.println(">>> Client Timeout !");
               client.stop();
               return("");
              }
           }   
          while(client.available())
            {
              String line = client.readStringUntil('\r');
              Serial.print(line);
              return(line);
             } 

       }     
     else {
           Serial.println("connection failed");
           return("");
           }
}
А вот могут ли они аналогичным образом общаться, если на обоих организован http-сервер через
Код:
ESP8266WebServer server(80);
И как в этом случае выглядит команда на посылку сообщения? Смотрел в примерах - там нет реализации клиента. И если это нельзя сделать, то допустимо ли на одном модуле одновременной реализации обоих типов серверов?
 

Paul_B

Member
Отвечу себе сам. HTTP и TCP сервера одновременно вполне могут сосужествовать, только надо вешать их на разные порты
Код:
ESP8266WebServer server(80);
WiFiServer tcpserver(81);
 

kab

New member
Отвечу себе сам. HTTP и TCP сервера одновременно вполне могут сосужествовать, только надо вешать их на разные порты
Код:
ESP8266WebServer server(80);
WiFiServer tcpserver(81);
Я вам в этой теме уже отвечал на этот вопрос, что отличия библиотек описаны:

Заливаем скетчи в ESP8266, управляем каналами по Wi-Fi, создаем свои сети.
 

ZoAnd

New member
Информация к размышлению.
Если домашняя сеть на eSP не связана с интернет, то зачем использовать роутер?
Более того, с роутером сеть может быть построена лишь вокруг роутера. т е нельзя удаляться от роутера далеко.
А если роутер кирдык, то и сеть кирдык. Да и установление связи с роутером -процесс не быстрый.
Есть ли принципиально другое решение на ESP без этих недостатков?
Есть!!! Протокол ESP-NOW и сеть на его основе.
С учетом ограничений от ESSPRESIF
  • Broadcast is not supported.

  • Limited encrypted peers. 10 encrypted peers at the most are supported in Station mode; 6 at the most in SoftAP or SoftAP + Station mode. Multiple unencrypted peers are supported, however, their total number should be less than 20, including encrypted peers.

  • Payload is limited to 250 bytes.
 

nikolz

Well-known member
С учетом ограничений от ESSPRESIF
  • Broadcast is not supported.
  • Limited encrypted peers. 10 encrypted peers at the most are supported in Station mode; 6 at the most in SoftAP or SoftAP + Station mode. Multiple unencrypted peers are supported, however, their total number should be less than 20, including encrypted peers.
  • Payload is limited to 250 bytes.
• For ESP8266_NONOS_SDK_V2.1 and later versions, ESP-NOW supports sending
broadcast packets
; however, please make sure that the packets are unencrypted.
• In station mode, ESP8266 supports 10 encrypt ESP-NOW peers at most, with the
unencrypted peers, it can be 20 peers in total at most.
• In the SoftAP mode or SoftAP + Station mode, the ESP8266 supports 6 encrypt ESPNOW
peers at most, with the unencrypted peers, it can be 20 peers in total at most.
-------------------------------------
1) В ESP-Now нет надобности устанавливать соединение т к обмен осуществляется по мас адресам.
Поэтому время сеанса может быть всего 120 мс вместо 4 сек как при установке соединения по WiFi
--------------------------------------
2) ESP-Now прекрасно совмещается с WiFI (см мои посты)
Поэтому возможно создание мостов от сети ESP-NoW в интернет.
--------------------------------------
3) так как связь осуществляется по мас адресу то нет ограничений на число узлов в сети .
Ограничение в 20 станций - это автоматическая рассылка по списку.
 

tutu222

New member
Такое дело.Приобрёл два модуля ESP8266 12e.Есть возможность залить в них код.В итоге мне нужно соединить эти два модуля ,что бы один был точкой доступа ,второй клиентом.На клиенте кнопка, при нажатии которой на втором модуле моргнул светодиот на каком нибуть выходе.Может есть у кого готовое рещение?.
 

kab

New member
Такое дело.Приобрёл два модуля ESP8266 12e.Есть возможность залить в них код.В итоге мне нужно соединить эти два модуля ,что бы один был точкой доступа ,второй клиентом.На клиенте кнопка, при нажатии которой на втором модуле моргнул светодиот на каком нибуть выходе.Может есть у кого готовое рещение?.
Нет, но Вы определитесь более четко. Ваша просьба не совсем понятна. Как минимум возникают два варианта, исходя из Вашей целевой задачи:
1. Вы желаете, не вникая в суть работы с ESP, решить какую-то конкретную задачу, возможно, коммерческую. Тогда Вам четко надо описать задание, сроки, предложения по оплате.
2. Вы, всё-таки, желаете научится самостоятельно работать с ESP. Тогда устанавливаете Arduino IDE, разбираетесь с примерами, смотрите учебные ролики (ссылки можно найти на этом сайте), думаете, как на основе примеров подойти к решению Вашей задачи. Не получается ? Тогда свои представления и проблемы выкладываете в более подробном изложении, в отдельном топике. И люди к Вам потянуться, уверяю...
 
Сверху Снизу