С какого то момент после обновления системы Android на смартфоне - не подключается esp32 по WiFi- кто сталкивался?
- Войдите на сайт для отправки комментариев
Вс, 17/04/2022 - 18:53
Всем добрейшего!
Довольно часто управляю 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"); }
P.S. забыл добавить: сам WiFi на смартфоне работает отлично - постоянно сижу в интернете со смартфона.
Частоту WiFi у точки доступа на смартфоне - выставляю ту же самую, как и у esp32 (2,4 ГГц), точка доступа не скрытая -всем видна.
Раньше при таких настройках вообще всегда всё без проблем было.
Посмотри на смартфоне на каком канале сидит WiFi точка доступа. Выше 8 канала ESP 32 может не подключаться
Выше 8 канала ESP 32 может не подключаться
что так?
А вот еще забавней: когда на esp32 - запускаю точку доступа - смартфон коннектится к ней без проблем (то есть, соединение напрямую смартфон-esp32).
Когда наоборот (смартфон-точка доступа, а esp32-клиент) - черта с два...Вот такие пироги. :-)
Туточки малость вчера нагуглил - люди жалуются что у всех такой баг на андроиде от 9 и выше. Ругают espressif в одной из веток официального форума...Продолжаю копать...
У меня с автомобильной магнитолой с телефоном подобная "дружба" по wi-fi, рестарт телефона и "сброс сетевых настроек" на магнитоле на некоторое время помогает, а иногда достаточно вкл/выкл хотспота в телефоне (выглядит так, что хотспот должен стартануть после того как прогрузится wi-fi в магнитоле, иначе не цепляется), тоже 9й андроид.
Прям таких чудес начитался.... :( У меня все работает.....
Да же посмотрел версию андроида на своем телефоне... а она аж 12.
Я вот читаю это всё и понимаю одну вещь дурную (для людей делаю проект): что будет "шаляй-валяй" в итоге, даже если решу проблему: у одного глючит - у другого не глючит... Да и вообще, самое удобное: если на esp32 будет настроена точка доступа, к которой будут коннектиться смартфоны. Клиенту вообще ни над чем (типа конфигурирования точки доступа на смарте) думать не надо: присоединился к увиденной в эфире esp32 и всё...
Но есть один нюанс: нужно, чтобы esp32 - ПОЛУЧАЛА ИНТЕРНЕТ со смартфона (при том, что она сама является точкой доступа - и должна РАЗДАВАТЬ инет (теоретически, по логике вещей). То есть, получается довольно извратная система: esp32-точка доступа, к ней коннектится клиент. И точка доступа - получает инет с клиента! Вот такой изврат:-)
Вот и думаю, реально или нет?
P.S. Повторюсь, что весь изврат - исключительно чтобы облегчить жизнь клиентским смартфонам.
Теоретически, на мой взгляд, это можно было сделать, если сотворить нечто подобное тому, что ниже (то, что на картинке - я уже делал из двух esp-шек. А теоретически нечто подобное, можно было бы сотворить с помощью esp32 и смартофна-на котором установлено самописное приложение, которое как бы "форвардит" интернет траффик - на esp-шку.)
Но это всё "какой то позор!" ©Швондер
Где то читал, что к ESP32 точке доступа, максимально может сконнектиться 5 клиентов. И это в лучшем случае. Ну а если ещё и будет раздавать инет, то ????? Это же не полноценный роутер.
Неее...это не для целей раздачи инета. Суть: чтобы esp-шка была доступна из внешнего интернета. Как это сделать - я знаю и умею хорошо. Суть моей задачи в другом: как убрать геморрой с возможными глюками при wifi-соединении между esp и смартфоном.
Пока мне приходит в голову только сделать esp-шку - точкой доступа. Тогда она видна в эфире и к ней просто подключиться (при наличии пароля). Минимум проблем- не надо точки доступа конфигурировать и т.д. Типовые домохозяйки, для кого я делаю этот девайс - не потянут такие мозговые потуги с созданием точек доступа на смартфоне и т.д. :-)
чтоб функционал какого либо устройства был виден из внешнего интернета, совершенно не обязательно ей физически быть видной из оного. Не проще самой ESP подцепляться к серверу, так же как и клиентам. Протоколов обмена как грязи, можно MQTT на OrangePI дешевом развернуть.
Да это всё понятно! Я ж и пишу- вы не зацикливайтесь на том, что говорю о видимости снаружи! (не в обиду, просто весь топик вообще не про это , - я просто для понимания задачи сказал, я эту задачу уже решил).
А топик про то, что: если существует ГИПОТЕТИЧЕСКАЯ возможность глюков, когда esp32 коннектится к смартфону-точке доступа, - эту возможность надо устранить просто жестко. Для примера: у меня именно так и глючит: esp не цепляется к точке доступа на смартфоне (не говоря уже о том, что домохозяйка не настроит точку доступа).
Чтобы esp хоть как то "понюхать" интернет - она должна его хоть как то заиметь. На этом этапе у среднестатистической домохозяйки могут быть проблемы....Пытаюсь упростить процесс и устранить "узкие" места.
для примера: у моего текущего заказчика проблема - периодически МК пропадает отправка телеметрии с ESP32, клиентского холодильного оборудования. Стали разбираться - тупо человеческий фактор, то клиент пароль на WiFi точке поменяет, то роутер выключит, то кастрюлю (образно) на МК наденет, т е проблема организационная! лечению не подлежит. И логика переподключения к WIFi есть, и всякие проверки доступности HTTP сервера есть. Сейчас добавил полную перезагрузку всего устройства принудительно раз в сутки, сам не верю что поможет, но "хозяин-барин". Может и вам для "устранить просто жестко" - что либо такое же добавить.
то клиент пароль на WiFi точке поменяет...
это лечится просто, создается еще одна виртуальная AP со своими логинами/паролями
то клиент пароль на WiFi точке поменяет...
это лечится просто, создается еще одна виртуальная AP со своими логинами/паролями
у обслуживающей организации нет и не будет доступа к клиентскому роутеру, не мое требование - вопрос ыне ко мне.
А топик про то, что: если существует ГИПОТЕТИЧЕСКАЯ возможность глюков,
Да нет такой возможности. Только кривые руки программиста и непонимание оборудования с которым работаешь. Нужно же иногда даташиты читать. У ESP32 радиоканал ОДИН и для точки доступа и для клиента. А это значит если подключится как клиент к внешней точки доступа, то одновременно, ESP как точка доступа будет работать на том же канале, где и внешняя точка доступа. Кроме того, когда делаешь скан wifi сетей, то нужно понимать, что в это время ESP32 "уходит" c текущего канала и как клиент или точка доступа не работает, при этом некоторые роутеры и клиенты воспринимают эту стуацию как обрыв связи.
А если еще использовать и блюпуп, то по глупости можно такого наворотить, что потом ртом не расскажешь.
сам не верю что поможет
Просто в параллельном потоке, который работает на другом ядре (именно на другом ядре) делается виртуальный вачтдог, который следит за наличием связи и перегружает устройство сохраняя контент в памяти RTC.
сам не верю что поможет
Просто в параллельном потоке, который работает на другом ядре (именно на другом ядре) делается виртуальный вачтдог, который следит за наличием связи и перегружает устройство сохраняя контент в памяти RTC.
Спасибо, не знал.
Этот функционал принудительно необходимо включить? Подробности в даташите как я понимаю?
Это брукли предлагает сделать самостоятельно. Штатно такой фичи вроде нет еще.
Но, я думаю, что достаточно только радио передергивать.
Если уверен, что это поможет, то конечно можно и так. Но я встречал ситуации, когда этого бывает недостаточно. Причем виной тому именно родные библиотеки экспресифа. По крайней мере туда ведет лог обратной трассировки.
Смотрите, чего то не выходит, товарищи. Не могу решить...Поможите - чем можите :-)
В общем, возьмём простую ситуацию. Дано:
1) смартфон - точка доступа. Раздаёт инет по wifi.
2) esp32-клиент этого смартфона. Код простецкий- из старпоста.
Как esp32 приконнектить к смарту? Повторюсь - всё работало как часы. После обновления смарта- глупая ситуёвина: перестало работать...
Настройки проверил:
- логин, пароль -совпадают на esp и на смартфоне.
- точка доступа на смартфоне- в видимом для всех режиме.
- диапазон точки доступа: 2,4 ГГц.
Другого на точке доступа не настроить - только это.
На телефоне забыть сеть и подключиться снова.
Для теста использовать простой пароль.
Отключить всякие антивирусы на телефоне.