Skip to content

WiFiScan.ino ported to CoopTask libraries doesn't find any networks #7969

Closed
@dok-net

Description

@dok-net

Preparation (MCVE)

Let's trivially port the libraries\ESP8266WiFi\examples\WiFiScan\WiFiScan.ino to the Arduino CoopTask library, like so:

/*
    This sketch demonstrates how to scan WiFi networks.
    The API is almost the same as with the WiFi Shield library,
    the most obvious difference being the different file you need to include:
*/

#include <ESP8266WiFi.h>
#include <CoopTask.h>

void loop1() {
    String ssid;
    int32_t rssi;
    uint8_t encryptionType;
    uint8_t* bssid;
    int32_t channel;
    bool hidden;
    int scanResult;

    for (;;) {
        Serial.println(F("Starting WiFi scan..."));

        scanResult = WiFi.scanNetworks(/*async=*/false, /*hidden=*/true);

        if (scanResult == 0) {
            Serial.println(F("No networks found"));
        }
        else if (scanResult > 0) {
            Serial.printf(PSTR("%d networks found:\n"), scanResult);

            // Print unsorted scan results
            for (int8_t i = 0; i < scanResult; i++) {
                WiFi.getNetworkInfo(i, ssid, encryptionType, rssi, bssid, channel, hidden);

                Serial.printf(PSTR("  %02d: [CH %02d] [%02X:%02X:%02X:%02X:%02X:%02X] %ddBm %c %c %s\n"),
                    i,
                    channel,
                    bssid[0], bssid[1], bssid[2],
                    bssid[3], bssid[4], bssid[5],
                    rssi,
                    (encryptionType == ENC_TYPE_NONE) ? ' ' : '*',
                    hidden ? 'H' : 'V',
                    ssid.c_str());
                yield();
            }
        }
        else {
            Serial.printf(PSTR("WiFi scan error %d"), scanResult);
        }

        // Wait a bit before scanning again
        delay(5000);
    }
}

BasicCoopTask<CoopTaskStackAllocatorAsMember<1600>> task1("l1", loop1);

void setup() {
  Serial.begin(115200);
  Serial.println(F("\nESP8266 WiFi scan example"));

  // Set WiFi to station mode
  WiFi.mode(WIFI_STA);

  // Disconnect from an AP if it was previously connected
  WiFi.disconnect();
  delay(100);

  task1.scheduleTask();
}

void loop() {
    runCoopTasks();
}

Without additional tasks, this looks a bit lost, but the utility is obvious if you consider that one can add additional tasks, and as long as they don't need to guard shared resources, it's basically copy&paste from example code and there you go, without stackless coroutines, async programming or anything advanced. [full disclosure: I am the author/maintainer of CoopTask]

Issue

In master, no networks are found:

Starting WiFi scan...
No networks found
Starting WiFi scan...
No networks found
Starting WiFi scan...
No networks found

Resolution

The PR #6782 fixes this.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions