zoukankan      html  css  js  c++  java
  • ESP8266 RTOS 开发笔记(1)STA+AP模式(共存)

    RTOS的示例程序里面分别有STA和AP的示例,由于项目需要,要是用STA+AP工作模式;
    之前将STA和AP的参数放在一起定义,导致一直只能启动STA;分开单独定义即可。

    STA和AP参数定义

    wifi_config_t wifi_config_ap = {
            .ap = {
                .ssid = EXAMPLE_ESP_WIFI_SSID,
                .ssid_len = strlen(EXAMPLE_ESP_WIFI_SSID),
                .password = EXAMPLE_ESP_WIFI_PASS,
                .max_connection = EXAMPLE_MAX_STA_CONN,
                .authmode = WIFI_AUTH_WPA_WPA2_PSK
            },
        };
    wifi_config_t wifi_config_sta = {       
            .sta = {
                .ssid = WIFI_SSID,
                .password = WIFI_PASS
            },
        };
    

    WiFi初始化

    void wifi_init()
    {
        tcpip_adapter_init();
        ESP_ERROR_CHECK(esp_event_loop_create_default());
    
        wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
        ESP_ERROR_CHECK(esp_wifi_init(&cfg));
    
        ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL));
    
        
        if (strlen(EXAMPLE_ESP_WIFI_PASS) == 0) {
            wifi_config_ap.ap.authmode = WIFI_AUTH_OPEN;
        }
        if (strlen((char *)wifi_config_sta.sta.password)) {
            wifi_config_sta.sta.threshold.authmode = WIFI_AUTH_WPA2_PSK;
        }
    
        ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_APSTA));         
        ESP_ERROR_CHECK(esp_wifi_start());
    
        ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config_sta));    
        ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config_ap)); 
        ESP_LOGI(TAG, "wifi_init_softap&sta finished.AP->SSID:%s password:%s	STA->SSID:%s password:%s",EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS,WIFI_SSID, WIFI_PASS);
    }
    

    所有WiFi状态处理在wifi_event_handler(void* arg, esp_event_base_t event_base,int32_t event_id, void* event_data)函数中处理即可

    wifi事件定义(esp_wifi_types.h)

    /** WiFi event declarations */
    typedef enum {
        WIFI_EVENT_WIFI_READY = 0,           /**< WiFi ready */
        WIFI_EVENT_SCAN_DONE,                /**< finish scanning AP */
        WIFI_EVENT_STA_START,                /**< station start */
        WIFI_EVENT_STA_STOP,                 /**< station stop */
        WIFI_EVENT_STA_CONNECTED,            /**< station connected to AP */
        WIFI_EVENT_STA_DISCONNECTED,         /**< station disconnected from AP */
        WIFI_EVENT_STA_AUTHMODE_CHANGE,      /**< the auth mode of AP connected by station changed */
        WIFI_EVENT_STA_BSS_RSSI_LOW,         /**< AP's RSSI crossed configured threshold */
        WIFI_EVENT_STA_WPS_ER_SUCCESS,       /**< station wps succeeds in enrollee mode */
        WIFI_EVENT_STA_WPS_ER_FAILED,        /**< station wps fails in enrollee mode */
        WIFI_EVENT_STA_WPS_ER_TIMEOUT,       /**< station wps timeout in enrollee mode */
        WIFI_EVENT_STA_WPS_ER_PIN,           /**< station wps pin code in enrollee mode */
        WIFI_EVENT_AP_START,                 /**< soft-AP start */
        WIFI_EVENT_AP_STOP,                  /**< soft-AP stop */
        WIFI_EVENT_AP_STACONNECTED,          /**< a station connected to soft-AP */
        WIFI_EVENT_AP_STADISCONNECTED,       /**< a station disconnected from soft-AP */
        WIFI_EVENT_AP_PROBEREQRECVED,        /**< Receive probe request packet in soft-AP interface */
    } wifi_event_t;
    
  • 相关阅读:
    OO第三单元总结
    oo第二单元总结
    oo第一单元总结
    OO助教工作总结
    当QSY遇上XL尺码的小黄衫
    终点亦是起点
    敏捷开发规范化
    Beta阶段性总结
    需求存在,功能存在——Alpha阶段性总结
    Gitlab Burndown Chart
  • 原文地址:https://www.cnblogs.com/hztd/p/14000344.html
Copyright © 2011-2022 走看看