• 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
    ",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! 
    ");
            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
    ");
    
        //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秒(或更多)就不会出现这种情况了.

  • 相关阅读:
    发邮件
    Django 管理多个APP且在后台显示 自定义APP的名称
    MySQL的sql_mode模式说明及设置
    Go语言 基础 函数
    Go语言 基础 map
    Selenium 3 -how to locate the chromedriver and geckodriver place?
    Selenium3笔记-WebDriver源码初探
    MySQL 学习用employee数据库表参考使用
    hibernate spring annotation setup
    Maven full settings.xml
  • 原文地址:https://www.cnblogs.com/kmist/p/11574545.html
Copyright © 2020-2023  润新知