乐鑫技术交流
直播中

建立建利12

8年用户 1380经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

wifi_station_scan每次运行都会失败要怎么解决?

我最近一直在玩 SDK,我可以连接到 AP 并闪烁 LED 等等,但是当我尝试扫描附近的 AP 时,状态代码总是显示 FAIL。
这是我的代码,我已经 3 天改变了一些东西,但没有任何效果。希望任何人都可以提示
谢谢!
代码:全选#include "ets_sys.h"
#include "osapi.h"
#include "gpio.h"
#include "os_type.h"
#include "ip_addr.h"
#include "espconn.h"
#include "user_interface.h"
#include "user_config.h"

#define user_procTaskPrio        0
#define user_procTaskQueueLen    1
os_event_t user_procTaskQueue[user_procTaskQueueLen];
static void loop(os_event_t *events);


/** WIFI Functions **/
void ICACHE_FLASH_ATTR wifiInit() {
    os_printf(">>>%s\n", __FUNCTION__);
    //wifi_station_set_hostname("autolocator");
    wifi_set_opmode(STATION_MODE);
    os_printf("<<<%s\n", __FUNCTION__);
}

static void ICACHE_FLASH_ATTR wifiScan_cb(void *arg, STATUS status) {
    os_printf(">>>%s\n", __FUNCTION__);

    uint8 ssid[33];

    switch (status ) {
    case OK:
      os_printf("Status OK\n");
       struct bss_info *bss_link = (struct bss_info *)arg;
      bss_link = bss_link->next.stqe_next;//ignore first

      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_sprintf("+CWLAP:(%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;
      }
      break;
   case FAIL:
       os_printf("Status FAIL\n");
         break;
   case PENDING:
       os_printf("Status PENDING\n");
         break;
   case BUSY:
       os_printf("Status BUSY\n");
         break;
   case CANCEL:
       os_printf("Status CANCEL\n");
         break;
   default:
       os_printf("Status UNKNOWN\n");
         break;
    }
    os_printf("<<<%s\n", __FUNCTION__);
}

/** UART Functions **/
void ICACHE_FLASH_ATTR uartInit() {
    os_printf(">>>%s\n", __FUNCTION__ );
    uart_div_modify( 0, UART_CLK_FREQ / ( 115200 ) );
    os_printf("<<<%s\n", __FUNCTION__);
}

/** GPIO Functions **/
void ICACHE_FLASH_ATTR gpioInit() {
    os_printf(">>>%s\n", __FUNCTION__ );
    gpio_init();
    os_printf("<<<%s\n", __FUNCTION__);
}

/** Entry point **/
//Main code function
void ICACHE_FLASH_ATTR loop(os_event_t *events) {
    os_printf(">>>%s\n", __FUNCTION__ );
    os_delay_us(1*1000000);

    wifi_promiscuous_enable(0);
    os_printf("mode=%u\n",wifi_get_opmode());
    os_printf("set mode=%u\n", wifi_set_opmode(STATION_MODE));
    os_printf("mode_afterset=%u\n",wifi_get_opmode());
    os_printf("scan_result=%u\n",wifi_station_scan(NULL,wifiScan_cb));

    system_os_post(user_procTaskPrio,
                   0,
                   0);
    os_printf("<<<%s\n", __FUNCTION__);
}

void ICACHE_FLASH_ATTR user_rf_pre_init(void) {}

//Init function
void ICACHE_FLASH_ATTR user_init( void ) {
    os_printf(">>>%s\n", __FUNCTION__ );
   uartInit();
    os_delay_us(0.1*1000000);
   gpioInit();
    wifiInit();
   
    //Start os task
    //os_delay_us(5*1000000);
    system_os_task(loop,
                   user_procTaskPrio,
                   user_procTaskQueue,
                   user_procTaskQueueLen);
    system_os_post(user_procTaskPrio,
                   0,
                   0);
    os_printf("<<<%s\n", __FUNCTION__);
}

更多回帖

发帖
×
20
完善资料,
赚取积分