• Система автоматизации с открытым исходным кодом на базе 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. Там может быть что угодно. Не удачно выразился, наверное.
 
Сверху Снизу