Пример #1
0
/**
 * Start scan WiFi networks available
 * @param async         run in async mode
 * @param show_hidden   show hidden networks
 * @return Number of discovered networks
 */
int8_t WiFiScanClass::scanNetworks(bool async, bool show_hidden)
{
    if(WiFiScanClass::_scanStarted) {
        return WIFI_SCAN_RUNNING;
    }

    WiFiScanClass::_scanAsync = async;

    WiFi.enableSTA(true);

    scanDelete();

    wifi_scan_config_t config;
    config.ssid = 0;
    config.bssid = 0;
    config.channel = 0;
    config.show_hidden = show_hidden;
    if(esp_wifi_scan_start(&config, WiFiScanClass::_scanAsync) == ESP_OK) {
        WiFiScanClass::_scanComplete = false;
        WiFiScanClass::_scanStarted = true;

        if(WiFiScanClass::_scanAsync) {
            return WIFI_SCAN_RUNNING;
        }
        while(!(WiFiScanClass::_scanComplete)) {
            delay(10);
        }
        return WiFiScanClass::_scanCount;
    } else {
        return WIFI_SCAN_FAILED;
    }

}
Пример #2
0
static void esp_now_scan_peers_start (void)
{
    DEBUG("%s\n", __func__);

    wifi_scan_config_t scan_cfg = {
        .ssid = NULL,
        .bssid = NULL,
        .channel = esp_now_params.channel,
        .show_hidden = true,
        .scan_type = WIFI_SCAN_TYPE_ACTIVE,
        .scan_time.active.min = 0,
        .scan_time.active.max = 120 /* TODO tune value */
    };

    esp_wifi_scan_start(&scan_cfg, false);
}

#define ESP_NOW_EVENT_SCAN_PEERS 1

static kernel_pid_t esp_now_event_handler_pid;
char esp_now_event_handler_stack [THREAD_STACKSIZE_DEFAULT];

static void *esp_now_event_handler (void *arg)
{
    msg_t event;
    while (1) {
        msg_receive(&event);
        switch (event.content.value) {
            case ESP_NOW_EVENT_SCAN_PEERS:
                esp_now_scan_peers_start ();
                break;
        }
    }
    return NULL;
}
Пример #3
0
static void scan_task(void *pvParameters)
{
	while(1) {
		xEventGroupWaitBits(wifi_event_group, SCAN_DONE_BIT, false, true, portMAX_DELAY);
        ESP_LOGI(TAG, "WIFI scan doen");
		xEventGroupClearBits(wifi_event_group, SCAN_DONE_BIT);

		uint16_t apCount = 0;
		esp_wifi_scan_get_ap_num(&apCount);
		printf("Number of access points found: %d\n", apCount);
		if (apCount == 0) {
			ESP_LOGI(TAG, "Nothing AP found");
			return;
		}
		wifi_ap_record_t *list = (wifi_ap_record_t *)malloc(sizeof(wifi_ap_record_t) * apCount);
		ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&apCount, list));
		int i;
		printf("======================================================================\n");
		printf("             SSID             |    RSSI    |           AUTH           \n");
		printf("======================================================================\n");
		for (i=0; i<apCount; i++) {
			char *authmode;
			switch(list[i].authmode) {
			case WIFI_AUTH_OPEN:
               authmode = "WIFI_AUTH_OPEN";
               break;
            case WIFI_AUTH_WEP:
               authmode = "WIFI_AUTH_WEP";
               break;           
            case WIFI_AUTH_WPA_PSK:
               authmode = "WIFI_AUTH_WPA_PSK";
               break;           
            case WIFI_AUTH_WPA2_PSK:
               authmode = "WIFI_AUTH_WPA2_PSK";
               break;           
            case WIFI_AUTH_WPA_WPA2_PSK:
               authmode = "WIFI_AUTH_WPA_WPA2_PSK";
               break;
            default:
               authmode = "Unknown";
               break;
			}
			printf("%26.26s    |    % 4d    |    %22.22s\n",list[i].ssid, list[i].rssi, authmode);
		}
		free(list);
		printf("\n\n");

		// scan again
		vTaskDelay(2000 / portTICK_PERIOD_MS);
		//The true parameter cause the function to block until the scan is done.
		ESP_ERROR_CHECK(esp_wifi_scan_start(&scanConf, true));
	}


}
Пример #4
0
int app_main(void)
{
	nvs_flash_init();
	tcpip_adapter_init();
	initialise_wifi();

	xTaskCreate(&scan_task, "scan_task", 2048, NULL, 15, NULL);

	ESP_ERROR_CHECK(esp_wifi_scan_start(&scanConf, true));    //The true parameter cause the function to block until
															  //the scan is done.
	return 0;
}
Пример #5
0
/**
 * Start scan WiFi networks available
 * @param async         run in async mode
 * @param show_hidden   show hidden networks
 * @return Number of discovered networks
 */
int8_t WiFiScanClass::scanNetworks(bool async, bool show_hidden, bool passive, uint32_t max_ms_per_chan)
{
    if(WiFiScanClass::_scanStarted) {
        return WIFI_SCAN_RUNNING;
    }

    WiFiScanClass::_scanAsync = async;

    WiFi.enableSTA(true);

    scanDelete();

    wifi_scan_config_t config;
    config.ssid = 0;
    config.bssid = 0;
    config.channel = 0;
    config.show_hidden = show_hidden;
    if(passive){
        config.scan_type = WIFI_SCAN_TYPE_PASSIVE;
        config.scan_time.passive = max_ms_per_chan;
    } else {
        config.scan_type = WIFI_SCAN_TYPE_ACTIVE;
        config.scan_time.active.min = 100;
        config.scan_time.active.max = max_ms_per_chan;
    }
    if(esp_wifi_scan_start(&config, false) == ESP_OK) {
        WiFiScanClass::_scanComplete = false;
        WiFiScanClass::_scanStarted = true;

        if(WiFiScanClass::_scanAsync) {
            return WIFI_SCAN_RUNNING;
        }
        while(!(WiFiScanClass::_scanComplete)) {
            delay(10);
        }
        return WiFiScanClass::_scanCount;
    } else {
        return WIFI_SCAN_FAILED;
    }

}