Benoetige bitte Hilfe bei Wifi Scan

Hallo zusammen,

ich habe mir einen webserver ich ahbe es mit einem esp32 und esp8266 ausprobiert beides mal dasselbe ergebnis mit Hilfe von einem Access point gestartet und nun moechte ich alle Wifis in meiner Umgebung anzeigen. Leider wird entwededer -1 oder 0 zureckgegeben.

Was mache ich falsch?

Hier ist mein Code:

void startAP() {
    Serial.println("Starting AP mode");
    WiFi.mode(WIFI_AP_STA);
    WiFi.softAP("Test", "");
    Serial.println("AP mode started");
    server.on("/wifi", HTTP_GET, [](AsyncWebServerRequest *request){
        int n = WiFi.scanNetworks();
        Serial.println(n);
        DynamicJsonDocument doc(1024);
        JsonArray array = doc.to<JsonArray>();

        for (int i = 0; i < n; ++i) {
            JsonObject network = array.createNestedObject();
            network["ssid"] = WiFi.SSID(i);
            network["rssi"] = WiFi.RSSI(i);
        }

        String output;
        serializeJson(doc, output);
        request->send(200, "application/json", output);
    });
server.begin();
}

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


    
        startAP();
}

void loop(){
}

Versuch mit normalem Modus, und nicht als AP.
Vor ab, es kann was dauern Scan ist nicht gleich verbinden.

Hallo,
warum nutzt Du nicht das mitgelieferte Beispiel und baust darauf auf.

Er könnte auch STA und AP mischen (AP_STA). Dann könnte er über STA (auch ohne Connect) scannen und über AP die Daten bereit stellen. Da wird es aber nichts fertiges geben, da muss der TO ein klein wenig programmieren.

Gruß Tommy

Sollte ein WiFi.scanNetworks() nicht sogar vor der Entscheidung ob STA oder AP möglich sein?
Wenn ich meinen Radiocode aus 2022 noch richtig verstehe habe ich mir da die Netzwerkliste vor dem Verbindungsaufbau geholt.

Ja, deshalb schrieb ich STA ohne Connect. Aber er braucht STA, da es beim reinen AP nicht dabei ist.

Gruß Tommy

Hallo,

ich habe doch den Mode genommen?

WiFi.mode(WIFI_AP_STA);

oder ist es der Falsche?

Habe auch versucht dieses Bsp. hier arduino-esp32/libraries/WiFi/examples/WiFiScanAsync/WiFiScanAsync.ino at master · espressif/arduino-esp32 · GitHub umzusetzen

 unsigned long startAttemptTime = millis();
        
        while (WiFi.scanComplete() < 0 && millis() - startAttemptTime < 30000) {
        WiFi.scanNetworks(true);
    }

Läuft das Beispiel so, wie es im Netz steht?

Gruß Tommy

ja

Scan done
19:45:34.097 -> 6 networks found
19:45:34.097 -> Nr | SSID                             | RSSI | CH | Encryption
19:45:34.097 ->  1 | FRITZ!Box 7490                   |  -83 |  1 | 
19:45:34.097 ->  2 | dlink                            |  -82 |  1 | 
19:45:34.129 ->  3 | FRITZ!Box Gastzugang             |  -82 |  1 | 
19:45:34.129 ->  4 | FRITZ!Box 7590 DE                |  -85 |  6 | 
19:45:34.129 ->  5 | FRITZ!Box 27031986               |  -67 | 13 | 
19:45:34.161 ->  6 | RE_3993511878                    |  -64 | 13 | 
19:45:34.161 -> 
19:45:34.161 -> Scan start
19:45:34.418 -> Loop running...
19:45:34.675 -> Loop running

Dann probiere das mal mit AP_STA. Wenn das nicht geht, dann den Scan in ein Array schreiben und danach einen AP auf machen und die Werte aus dem Array anzeigen.

Gruß Tommy

Hey,

ja, laueft auch mit AP_STA und ich ahbe sogar nen wifi AP aufgemacht und er scannt trotzdem...

alerdings stuerzt er bei meiner Funktion ab ...also macht ein reset aber warum?

int n = WiFi.scanNetworks(true);
        Serial.println(n);
        unsigned long startAttemptTime = millis();
          int16_t WiFiScanStatus = WiFi.scanComplete();

        while ( WiFiScanStatus< 0 && millis() - startAttemptTime < 30000) {
        if (WiFiScanStatus == WIFI_SCAN_FAILED) {
        WiFi.scanNetworks(true);
        }
    }

Baue serielle Ausgaben rein, um zu sehen, wo er abraucht. Zum Test auch mal delay(500) nach der Ausgabe, damit die vor der nächsten Aktion noch raus kommt.
Es könnte sein, dass Du vorm neuen Scan den AP disconnecten/Schließen musst.

Gruß Tommy

Nach dieser Dokumentation könnte der zweite Aufruf von scanNetworks() nach Ablauf der 30s problematisch sein - wenn ein zweiter gleichzeitiger asynchroner Scan nicht möglich ist.

Rückgabewert -1 heißt: Noch nicht fertig.

int n = WiFi.scanNetworks(true);
        Serial.println(n);
        unsigned long startAttemptTime = millis();
          int16_t WiFiScanStatus = WiFi.scanComplete();

        while ( WiFiScanStatus< 0 && millis() - startAttemptTime < 30000) {
        Serial.println("while");
        if (WiFiScanStatus == WIFI_SCAN_FAILED) {
        Serial.println("if");
        //WiFi.scanNetworks(true);
        }
        WiFiScanStatus = WiFi.scanComplete();
        delay(500);
    }

In der Konsole kam "while", "while" nichts anderes und irgendwann ist er abgebrochen

Mit der Funktion geht es

https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/scan-class.html

scanNetworksAsync

Mist die Funktion gibts beim ESP32 nicht

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.