С какого то момент после обновления системы Android на смартфоне - не подключается esp32 по WiFi- кто сталкивался?

SEEK
Offline
Зарегистрирован: 01.02.2013

Всем добрейшего!

Довольно часто управляю esp32 c помощью WiFi (запускаю точку доступа на смартфоне, к которому коннектится esp32).

И на каком то этапе обновил систему андроид и началась ерунда: не коннектится никак и ничего к смартфону! 

Причем! Это была сеть: смартфон-esp32.

Когда делаю сеть с посредником (esp32-роутер-смартфон) - всё ок. 

Напрямую -ну никак просто...Вот и ломаю голову что это...Вчера пришла партия новых esp-шек с али. Подключаю их так же напрямую - опять та же ерунда. С посредником- без проблем.

Может кто сталкивался с таким?

Скетч простецкий, например, вот этот стандартный:

#include <WiFi.h>

const char* ssid     = "testnet";
const char* password = "12345abcd";

const char* host = "data.sparkfun.com";
const char* streamId   = "....................";
const char* privateKey = "....................";

void setup()
{
    Serial.begin(115200);
    delay(10);

    // We start by connecting to a WiFi network

    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
}

int value = 0;

void loop()
{
    delay(5000);
    ++value;

    Serial.print("connecting to ");
    Serial.println(host);

    // Use WiFiClient class to create TCP connections
    WiFiClient client;
    const int httpPort = 80;
    if (!client.connect(host, httpPort)) {
        Serial.println("connection failed");
        return;
    }

    // We now create a URI for the request
    String url = "/input/";
    url += streamId;
    url += "?private_key=";
    url += privateKey;
    url += "&value=";
    url += value;

    Serial.print("Requesting URL: ");
    Serial.println(url);

    // This will send the request to the server
    client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" +
                 "Connection: close\r\n\r\n");
    unsigned long timeout = millis();
    while (client.available() == 0) {
        if (millis() - timeout > 5000) {
            Serial.println(">>> Client Timeout !");
            client.stop();
            return;
        }
    }

    // Read all the lines of the reply from server and print them to Serial
    while(client.available()) {
        String line = client.readStringUntil('\r');
        Serial.print(line);
    }

    Serial.println();
    Serial.println("closing connection");
}

 

SEEK
Offline
Зарегистрирован: 01.02.2013

P.S. забыл добавить: сам WiFi на смартфоне работает отлично - постоянно сижу в интернете со смартфона. 

Частоту WiFi у точки доступа на смартфоне - выставляю ту же самую, как и у esp32 (2,4 ГГц), точка доступа не скрытая -всем видна.

Раньше при таких настройках вообще всегда всё без проблем было.

SAB
Offline
Зарегистрирован: 27.12.2016

Посмотри на смартфоне на каком канале сидит WiFi точка доступа. Выше 8 канала ESP 32 может не подключаться

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

SAB пишет:

Выше 8 канала ESP 32 может не подключаться

что так?

SEEK
Offline
Зарегистрирован: 01.02.2013

А вот еще забавней: когда на esp32 - запускаю точку доступа - смартфон коннектится к ней без проблем (то есть, соединение напрямую смартфон-esp32).

Когда наоборот (смартфон-точка доступа, а esp32-клиент) - черта с два...Вот такие пироги. :-)

SEEK
Offline
Зарегистрирован: 01.02.2013

Туточки малость вчера нагуглил - люди жалуются что у всех такой баг на андроиде от 9 и выше. Ругают espressif в одной из веток официального форума...Продолжаю копать...

Morroc
Offline
Зарегистрирован: 24.10.2016

У меня с автомобильной магнитолой с телефоном подобная "дружба" по wi-fi, рестарт телефона и "сброс сетевых настроек" на магнитоле на некоторое время помогает, а иногда достаточно вкл/выкл хотспота в телефоне (выглядит так, что хотспот должен стартануть после того как прогрузится wi-fi в магнитоле, иначе не цепляется), тоже 9й андроид.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Прям таких чудес начитался.... :( У меня все работает.....

Да же посмотрел версию андроида на своем телефоне... а она аж 12. 

SEEK
Offline
Зарегистрирован: 01.02.2013

Я вот читаю это всё и понимаю одну вещь дурную (для людей делаю проект): что будет "шаляй-валяй" в итоге, даже если решу проблему: у одного глючит - у другого не глючит... Да и вообще, самое удобное: если на esp32 будет настроена точка доступа, к которой будут коннектиться смартфоны. Клиенту вообще ни над чем (типа конфигурирования точки доступа на смарте) думать не надо: присоединился к увиденной в эфире esp32 и всё...

Но есть один нюанс: нужно, чтобы esp32 - ПОЛУЧАЛА ИНТЕРНЕТ со смартфона (при том, что она сама является точкой доступа - и должна РАЗДАВАТЬ инет (теоретически, по логике вещей). То есть, получается довольно извратная система: esp32-точка доступа, к ней коннектится клиент. И точка доступа - получает инет с клиента! Вот такой изврат:-) 

Вот и думаю, реально или нет?

P.S. Повторюсь, что весь изврат - исключительно чтобы облегчить жизнь клиентским смартфонам.

Теоретически, на мой взгляд, это можно было сделать, если сотворить нечто подобное тому, что ниже  (то, что на картинке - я уже делал из двух esp-шек. А теоретически нечто подобное, можно было бы сотворить с помощью esp32 и смартофна-на котором установлено самописное приложение, которое как бы "форвардит" интернет траффик -  на esp-шку.)

Но это всё "какой то позор!" ©Швондер

SAB
Offline
Зарегистрирован: 27.12.2016

Где то читал, что к ESP32 точке доступа, максимально может сконнектиться 5 клиентов. И это в лучшем случае. Ну а если ещё и будет раздавать инет, то ????? Это же не полноценный роутер.

SEEK
Offline
Зарегистрирован: 01.02.2013

Неее...это не для целей раздачи инета. Суть: чтобы esp-шка была доступна из внешнего интернета. Как это сделать - я знаю и умею хорошо. Суть моей задачи в другом: как убрать геморрой с возможными глюками при wifi-соединении между esp и смартфоном. 

Пока мне приходит в голову только сделать esp-шку - точкой доступа. Тогда она видна в эфире и к ней просто подключиться (при наличии пароля). Минимум проблем- не надо точки доступа конфигурировать и т.д. Типовые домохозяйки, для кого я делаю этот девайс - не потянут такие мозговые потуги с созданием точек доступа на смартфоне и т.д. :-)

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

чтоб функционал какого либо устройства был виден из внешнего интернета, совершенно не обязательно ей физически быть видной из оного. Не проще самой ESP подцепляться к серверу, так же как и клиентам. Протоколов обмена как грязи, можно MQTT на OrangePI дешевом развернуть.

SEEK
Offline
Зарегистрирован: 01.02.2013

Да это всё понятно! Я ж и пишу- вы не зацикливайтесь на том, что говорю о видимости снаружи! (не в обиду, просто весь топик вообще не про это , - я просто для понимания задачи сказал, я эту задачу уже решил). 

А топик про то, что: если существует ГИПОТЕТИЧЕСКАЯ возможность глюков, когда esp32 коннектится к смартфону-точке доступа, - эту возможность надо устранить просто жестко. Для примера: у меня именно так и глючит: esp не цепляется к точке доступа на смартфоне (не говоря уже о том, что домохозяйка не настроит точку доступа).

Чтобы esp хоть как то "понюхать" интернет - она должна его хоть как то заиметь. На этом этапе у среднестатистической домохозяйки могут быть проблемы....Пытаюсь упростить процесс и устранить "узкие" места.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

для примера: у моего текущего заказчика проблема - периодически МК пропадает отправка телеметрии с ESP32, клиентского холодильного оборудования. Стали разбираться - тупо человеческий фактор, то клиент пароль на WiFi точке поменяет, то роутер выключит, то кастрюлю (образно) на МК наденет, т е проблема организационная! лечению не подлежит. И логика переподключения к WIFi есть, и всякие проверки доступности HTTP сервера есть. Сейчас добавил полную перезагрузку всего устройства принудительно раз в сутки, сам не верю что поможет, но "хозяин-барин". Может и вам для "устранить просто жестко" - что либо такое же добавить.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andycat пишет:

то клиент пароль на WiFi точке поменяет...


это лечится просто, создается еще одна виртуальная AP со своими логинами/паролями

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

ua6em пишет:

andycat пишет:

то клиент пароль на WiFi точке поменяет...


это лечится просто, создается еще одна виртуальная AP со своими логинами/паролями

у обслуживающей организации нет и не будет доступа к клиентскому роутеру, не мое требование - вопрос ыне ко мне.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

SEEK пишет:

А топик про то, что: если существует ГИПОТЕТИЧЕСКАЯ возможность глюков, 

Да нет такой возможности. Только кривые руки программиста и непонимание оборудования с которым работаешь. Нужно же иногда даташиты читать. У ESP32 радиоканал ОДИН и для точки доступа и для клиента. А это значит если подключится как клиент к внешней точки доступа, то одновременно, ESP как точка доступа будет работать на том же канале, где и внешняя точка доступа. Кроме того, когда делаешь скан wifi сетей, то нужно понимать, что в это время ESP32 "уходит" c текущего канала и как клиент или точка доступа не работает, при этом некоторые роутеры и клиенты воспринимают эту стуацию как обрыв связи.

А если еще использовать и блюпуп, то по глупости можно такого наворотить, что потом ртом не расскажешь. 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

andycat пишет:

 сам не верю что поможет

Просто в параллельном потоке, который работает на другом ядре (именно на другом ядре) делается виртуальный вачтдог, который следит за наличием связи и перегружает устройство сохраняя контент в памяти RTC.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

brokly пишет:

andycat пишет:

 сам не верю что поможет

Просто в параллельном потоке, который работает на другом ядре (именно на другом ядре) делается виртуальный вачтдог, который следит за наличием связи и перегружает устройство сохраняя контент в памяти RTC.


Спасибо, не знал.
Этот функционал принудительно необходимо включить? Подробности в даташите как я понимаю?

sadman41
Offline
Зарегистрирован: 19.10.2016

Это брукли предлагает сделать самостоятельно. Штатно такой фичи вроде нет еще.
Но, я думаю, что достаточно только радио передергивать.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

sadman41 пишет:
Это брукли предлагает сделать самостоятельно. Штатно такой фичи вроде нет еще. Но, я думаю, что достаточно только радио передергивать.

Если уверен, что это поможет, то конечно можно и так. Но я встречал ситуации, когда этого бывает недостаточно. Причем виной тому именно родные библиотеки экспресифа. По крайней мере туда ведет лог обратной трассировки.

mu_ssina
Offline
Зарегистрирован: 30.08.2013

Смотрите, чего то не выходит, товарищи. Не могу решить...Поможите - чем можите :-)

В общем, возьмём простую ситуацию. Дано:

1) смартфон - точка доступа. Раздаёт инет по wifi.

2) esp32-клиент этого смартфона. Код простецкий- из старпоста.

Как esp32 приконнектить к смарту? Повторюсь - всё работало как часы. После обновления смарта- глупая ситуёвина: перестало работать...

Настройки проверил:

- логин, пароль -совпадают на esp и на смартфоне.

- точка доступа на смартфоне- в видимом для всех режиме.

- диапазон точки доступа: 2,4 ГГц.

 

Другого на точке доступа не настроить - только это.

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

На телефоне забыть сеть и подключиться снова.

Для теста использовать простой пароль.

Отключить всякие антивирусы на телефоне.