Код сканирования Wi-Fi для esp32 wroom 32

Я пытаюсь сканировать Wi-Fi в режиме sta_ap в своем модуле esp32 wroom 32, но он не сканирует новый Wi-Fi .Может ли кто-нибудь рассказать больше о том, как работает режим Wi-Fi в этом модуле и в чем проблема в моем коде.Тот же код работает в esp8266.

КОД:

#include <WiFi.h>

const char *ap_ssid = "ESP32";
const char *ap_password = "";

const char *sta_ssid = "KKACT"; 
const char *sta_password = "kk25990418";
void setup() {
  Serial.begin(115200);
  
  WiFi.mode(WIFI_AP_STA);
  WiFi.disconnect();
  delay(100);
  Serial.print("Configuring access point...");
  WiFi.softAP(ap_ssid, ap_password);

  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);

  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(sta_ssid);
  WiFi.begin(sta_ssid, sta_password);

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

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

void loop() {
   Serial.println("Now scanning wifi continously");
   int n=WiFi.scanNetworks();
   for (int i = 0; i < n; ++i)
  {
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
    
  }
    delay(2000);
}

, 👍1

Обсуждение

А если вы отключитесь перед сканированием?, @Majenko

Я попытался отключиться в конце основного цикла void ,но результаты были те же, я получал список Wi-Fi, но новый Wi-Fi не обнаруживается или, возможно, не сканируется, @Ayush Yadav


2 ответа


Лучший ответ:

1

Это вопрос, поднятый на github по этому поводу:

https://github.com/espressif/arduino-esp32/issues/3294

И проблема, похоже, в том, что неудачное подключение предотвращает сканирование, и решение заключается в следующем:

Итак, что я сделал, войдя в портал:

WiFi.mode(WIFI_OFF); // в противном случае Wifi.Scannetworks() завершится неудачно

delay(5000);

Это, по-видимому, останавливает процессы, препятствующие сканированию.

После этого немедленное сканирование работает без проблем.

,

итак ,где я должен добавить эту строку в конце такой настройки void? `Серийный номер.println(""); Serial.println("подключен Wi-Fi"); Serial.println("IP-адрес: "); Serial.println(WiFi.localIP()); Wi-Fi.режим(WIFI_OFF); задержка(5000);`, @Ayush Yadav


0

Вы делаете это неправильно. Для выполнения сканирования Wi-Fi:

  1. Он должен быть в режиме WIFI_STA;
  2. Он должен быть отключен от точки доступа;
  3. После того, как вы закончите с отсканированными SSID, BSSID и RSSI, вам необходимо вызвать WiFi.scanDelete (), если вы собираетесь выполнить сканирование снова, в противном случае вы получите тот же результат предыдущего сканирования.

Итак, вкратце, вот код:

#include <WiFi.h>

void setup() {
  Serial.begin(115200);
  Serial.println();
}

void loop() {
  Serial.println("Scanning WiFi Networks...");
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  int n = WiFi.scanNetworks();
  for (int i=0; i<n; i++) {
    Serial.printf("%2d SSID=%-20s RSSI=%d\n", i+1, WiFi.SSID(i).c_str(), WiFi.RSSI(i));
  }
  WiFi.scanDelete();

  delay(10000);
}
,

я попробовал WiFi.scanDelete(); но это не сработало ,я знаю ,что могу использовать режим wifi_sta, но в esp32 есть wifi_sta_ap, в котором есть как режим станции, так и режим точки доступа, поэтому он тоже должен работать в этом режиме. Я попробовал тот же код в esp8266,и он сработал, что-то в настройке void нарушает сканирование Wi-Fi., @Ayush Yadav

Вы используете свой код, просто добавив " WiFi.scanDelete ()", или вы используете мой пример?, @hcheung

я использую только ваш код, но с Wi-Fi.mode(WIFI_AP_STA );, @Ayush Yadav