8266station初始化和智能配网问题

代码思路是:

    //station
    //Esp8266_Station_mode_init();
    wifi_set_opmode(STATION_MODE); //Station_mode


    //定时器任务创建
    Esp8266_Timer1_init(1000,1);    //1000ms, 1:重复定时
/** timer1 init **/
ICACHE_FLASH_ATTR
void Esp8266_Timer1_init(u32 mstime, u8 mode)
{
    os_timer_disarm(&K_Timer01); //先关闭定时器
    os_timer_setfn(&K_Timer01,(os_timer_func_t *)K_Timer01_cb,NULL);
    os_timer_arm(&K_Timer01, mstime, mode);

}
/* Timer1回调函数 */
ICACHE_FLASH_ATTR
void K_Timer01_cb(void)
{
    u8 K_WIFI_STA_Connect;            //表示wifi当前的连接状态
    struct ip_info ap_ip_info;
    u8 ESP8266_IP[4];
    u8 K_LED_Flash = 0;
    K_WIFI_STA_Connect = wifi_station_get_connect_status();

    if(K_WIFI_STA_Connect == STATION_GOT_IP)    //如果已经连接wifi
    {
        wifi_get_ip_info(STATION_IF,&ap_ip_info);
        ESP8266_IP[0] = ap_ip_info.ip.addr;
        ESP8266_IP[1] = ap_ip_info.ip.addr>>8;
        ESP8266_IP[2] = ap_ip_info.ip.addr>>16;
        ESP8266_IP[3] = ap_ip_info.ip.addr>>24;

        os_printf("ESP8266_IP:%d.%d.%d.%d\n",ESP8266_IP[0],ESP8266_IP[1],ESP8266_IP[2],ESP8266_IP[3]);

        //OLED_SHOW
        for(;K_LED_Flash <=5; K_LED_Flash++)
        {
            GPIO_OUTPUT_SET(GPIO_ID_PIN(4),(K_LED_Flash%2));
            delay_ms(100);
        }
        os_printf(" ESP8266 Connect Wifi success! \n");
        os_timer_disarm(&K_Timer01);//关闭定时器,


        ESP8266_SNTP_Init();        //连接服务器

    }
    else if(K_WIFI_STA_Connect == STATION_NO_AP_FOUND ||        //如果未能连接wifi,进入智能配网模式
            K_WIFI_STA_Connect == STATION_WRONG_PASSWORD ||
            K_WIFI_STA_Connect ==  STATION_CONNECT_FAIL )
    {
        os_timer_disarm(&K_Timer01);//关闭定时器, 进入配网模式

        //wifi_set_opmode(STATION_MODE);
        smartconfig_set_type(SC_TYPE_AIRKISS);
        smartconfig_start(ESP8266_Smartconfig_Cb);

    }
    else
        os_printf("uknow error\n");

    //ESP8266_NetConnect_Init();     //TCP

}

 

8266上电后进入配网模式.

1.先设置成station模式

2.然后进入1秒重复定时器

3.在定时器的回调函数中定义:

  如果flash中保存的wifi 可以连接就自动连接

  如果无法连接就进入配网模式.

 

那么问题来了,在家里测试的时候,很正常,但是在公司测试的时候,

8266的状态都不是 STATION_NO_AP_FOUND, STATION_NO_AP_FOUND, STATION_CONNECT_FAIL

而是IDLE模式. 百度无果. 

 

后来仔细想了想,好像并没有看到扫描wifi结束的提示

于是我有了一个大胆的猜测

1秒定时器,1秒定时器,如果没有进入配网模式,在一秒之后就会重新复位,那么 1秒真的就够了吗?

 

若然,把1秒定时改成3秒(或更多)就不会出现这种情况了.

posted @ 2019-09-23 20:21  kmist  阅读(1027)  评论(0编辑  收藏  举报