ESP8266 init with station mode, then it can scan routers nearby.
Code: Select all
/******************************************************************************
* FunctionName : scan_done
* Description : scan done callback
* Parameters : arg: contain the aps information;
status: scan over status
* Returns : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
scan_done(void *arg, STATUS status)
{
uint8 ssid[33];
char temp[128];
if (status == OK)
{
struct bss_info *bss_link = (struct bss_info *)arg;
while (bss_link != NULL)
{
os_memset(ssid, 0, 33);
if (os_strlen(bss_link->ssid) <= 32)
{
os_memcpy(ssid, bss_link->ssid, os_strlen(bss_link->ssid));
}
else
{
os_memcpy(ssid, bss_link->ssid, 32);
}
os_printf("(%d,\"%s\",%d,\""MACSTR"\",%d)\r\n",
bss_link->authmode, ssid, bss_link->rssi,
MAC2STR(bss_link->bssid),bss_link->channel);
bss_link = bss_link->next.stqe_next;
}
}
else
{
os_printf("scan fail !!!\r\n");
}
}
/******************************************************************************
* FunctionName : user_scan
* Description : wifi scan, only can be called after system init done.
* Parameters : none
* Returns : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_scan(void)
{
if(wifi_get_opmode() == SOFTAP_MODE)
{
os_printf("ap mode can't scan !!!\r\n");
return;
}
wifi_station_scan(NULL,scan_done);
}
/******************************************************************************
* FunctionName : user_init
* Description : entry of user application, init user function here
* Parameters : none
* Returns : none
*******************************************************************************/
void user_init(void)
{
os_printf("SDK version:%s\n", system_get_sdk_version());
//Set softAP + station mode
wifi_set_opmode(STATIONAP_MODE);
// wifi scan has to after system init done.
system_init_done_cb(user_scan);
}
If you want to scan a specific AP, for example, scan an AP of which SSID is "ESP8266". You only need to set the value of parameter "SSID" in structure "scan_config" when calling wifi_station_scan.
Code: Select all
void ICACHE_FLASH_ATTR
user_scan(void)
{
if(wifi_get_opmode() == SOFTAP_MODE)
{
os_printf("ap mode can't scan !!!\r\n");
return;
}
struct scan_config config;
os_memset(&config, 0, sizeof(config));
config.ssid = "ESP8266";
wifi_station_scan(&config,scan_done);
}