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

Как работает WiFiClient класс?

Alex Vesna

New member
Собственно ситуация следующая: ESP-10 запускается и подключается к Wemos D1 который в свою очередь запущен как SoftAP. Подключение происходит, и ESP-10 получает свой 192.168.2.2 IP
Так же на D1 запущен веб сервер на нестандартном 2999 порту.

Я тестирую работу вебсервера, с мобильника, устанавливая банально телнетом соединение на заданный порт(естественно предварительно подцепившись к D1 как к точке).
Соединение абсолютно нормально отрабатывается. Т.е. в сериале с d1 я вижу "new client" и так же вижу принятые данные(совпадают с отправленными в телнет на мобе)

Вот куски кода, которые отвечают за данный процесс:

D1:
в сетапе - server.begin();
в лупе:
WiFiClient client = server.available();
while(!client.available()){
client.read(income,4);
-------------------------------- это всё нормально затестированно с моба и работает.

ESP-10:
WiFiClient client;
if(client.connect(host, 2999)){
Serial.println("tcp connection OK");
client.print(income[0]+income[1]+income[2]+income[3],BIN);
}
else{
Serial.println("tcp NOT CONNECTING");


----------------------------------------- а вот это вот стабильно выдаёт tcp NOT CONNECTING в сериал.
ещё раз напомню что само соединение с точкой нормально проходит.

Собственно вопрос:
Я просмотрел миллиард примеров кода откуда только возможно, и местами откуда никак не возможно. Везде клиент работает именно так как и у меня в коде. Сначала я думал что что-то не так с переменной host, поэтому для эксперимента пробывал задавать её всеми тремя возможными способами, ни один никак не повлиял на результат. :(
const char * host = "192.168.4.1";
или через IPAddress тип,
или тупо влоб арраем типа unsigned int
Каждый из способов, компилятор нормально переварил.

Так же я заметил что во всех найденных примерах, нету такого что бы вебсервер и точка, были одновременно на одном девайсе, - но с моба то все отлично работает?!


Что блин не так с client.connect(host, 2999)??? Ну или со мной.. Или с миром целом?? И как чёрт возьми заставить десятку подрубиться к вебсерверу?
 

Сергей_Ф

Moderator
Команда форума
@pvvx я так понял, что ТС с 10-ки стучит на SoftAP D1. Только непонятно, почему и кто выдает адрес для 10-ки в другой подсети.
 

pvvx

Активный участник сообщества
@pvvx я так понял, что ТС с 10-ки стучит на SoftAP D1. Только непонятно, почему и кто выдает адрес для 10-ки в другой подсети.
Тогда куда "стучиться" ESP-10? К самой себе?
Причина там, не смотря на другие ошибки в кусках "кода", может быть только одна - неверный IP (конфликт IP - у одного и другого одинаковые IP у части SoftAP - см к себе и стучится :) ).
 
Последнее редактирование:

Alex Vesna

New member
Нет, я просто очепятался. Разумеется 192.168.4.1 это IP D1, который работает в режиме softAP и при коннекте, выдаёт 192.168.4.2 подключившемуся. Это отлично видно, если подключиться к D1 с телефона, ему будет выдан 4.2. Могу лог загрузки ESP-10 кинуть из сериала, но поверьте на слово, она коннектится по указанному SSID и пассу, и получает правильный IP, - такой же как если конектиться телефоном. И с него же прекрасно пингуется D1 - 4.1 А так же, если с телефона телнетом зайти на 2999 порт, то можно прям с клавы набить что ни будь, и увидеть это в сериале с D1.
Так что мне кажется, проблема именно в функции client.connect, либо в WiFiClient client;
Вероятнее всего что я неправильно понимаю как работает класс client, но документации по данной теме нету вообще, - там где она должна быть, - "извините, но пока данный раздел ещё не готов". Единственный способ разобраться это копать в сорцах либы, чем я собственно сейчас и занимаюсь.

Просто думал что не первый с такой проблемой, и мне кто нибудь укажет на что-то типа ошибки синтаксиса или передачи параметров, не ловимые компилятором. :)
 

Сергей_Ф

Moderator
Команда форума
@Alex Vesna ну, если Вы весь свой код сервера и клиента не приведете здесь полностью, то можно только гадать. Маленьких кусочков недостаточно почти всегда. Тем более, с такими опечатками в предоставлении данных, как неверный ip.
 

Alex Vesna

New member
Всем спасибо, наводка тут полученная помогла. Я правда так и не понял что именно там за путаница с IP была, но факт - это было именно оно. В итоге решение следующее:
1. На сервере при поднятии SoftAP прямо конфигурировались параметры, - IP gateway и маска. В качестве гейта указан его же ip. Знаю что это не хорошо есть, но работает. :)
2. На клиенте после wifi.Begin так же жёстко заданны те же параметры, естественно с другим IP но из той же подсети что и сервер, в качестве гейта - сервер.
Надо так же сказать, что использовалась НЕ дефолтная сеть 4.1/24 дабы избежать подобных ошибок дальнейшем.
Всем огромное спасибо! Не передать отчаянья, пока я бился об эту проблему всеми чем только можно. :)
 

Alex Vesna

New member
Угу, но функция config не позволяет указывать произвольное кол-во параметров, либо никак, либо все три.
 

Сергей_Ф

Moderator
Команда форума
В качестве гейта указан его же ip. Знаю что это не хорошо есть, но работает.
config не позволяет указывать произвольное кол-во параметров, либо никак, либо все три.
Я к тому, что не обязательно указывать собственный ip. Там может быть что угодно. Не удачно выразился, наверное.
 
Сверху Снизу