ESP32-WiFi配网(AP和STA模式及配置界面)下

ESP32-WiFi配网(AP和STA模式及配置界面)下

浏览器显示wifi配置界面;AP模式(ESP32自己是热点);STA模式(ESP32是终端,去连接别人热点);AP&STA共存模式(自己既是热点也可以连接别人热点) 本文介绍如何开启ESP32AP模式及STA模式和双开模式。

1.WiFi ap模式

AP模式下的宏观场景,分了5个任务,前两个和后面两个任务通过Event task来进行通信,它们不能直接进行通信。

同时看上面两个图,可以发现都一一对应上了;截取其中一段代码可以看的更清晰

js 复制代码
void wifi_init_softap(void)
{
    ESP_ERROR_CHECK(esp_netif_init());
    ESP_ERROR_CHECK(esp_event_loop_create_default());
    esp_netif_create_default_wifi_ap();
 
    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));

event_base:是我们要听的事件,比如现在我们要听的就是wifi_event

event_id:是我们要听取的这个wifi_event的什么信息

event_handler:是听取到这个信息之后,我们该怎么处理这个信息,要做什么

第二阶段配置,第三阶段启动流程都很清晰;WIFI启动之后,看图有一重要点是通过event task告诉我们已经启动了!

WiFi STA模式

WIFI AP&STA模式整合

二者同时开启,主要通过消息队列和事件进行联系。 创建一个消息队列

js 复制代码
xQueueHandle wifi_event_queue;

创建一个事件组

js 复制代码
typedef enum{
    AP_STA_START = 0,//开启
    AP_STA_UPDATE,//更新
    AP_STA_STOP,//关闭
}WIFI_SET_EVENT_E;

根据事件来进行相应的操作

js 复制代码
static void wifi_net_task(void* arg)
{
   
    ds_http_server_init();
    for(;;) {
        WIFI_SET_EVENT_E evt;
        xQueueReceive(wifi_event_queue, &evt, portMAX_DELAY);//接收事件
        printf("get wifi set event %d\n",evt);
        switch (evt)
        {
        case AP_STA_START:
            set_is_ap_sta_open(true);
            set_wifi_sta_status(WIFI_STA_MODE_INIT);
            set_wifi_ap_status(WIFI_AP_MODE_DISCONNECT);
            ds_wifi_ap_sta_start();
            break;
        case AP_STA_UPDATE:
            ds_wifi_ap_sta_update_info();
            break;
        case AP_STA_STOP:
            set_is_ap_sta_open(false);
            ds_wifi_ap_sta_stop();
            break;
        default:
            break;
        }
    }
}

创建任务

js 复制代码
void ds_wifi_ap_sta_init(){
    wifi_event_queue = xQueueCreate(10, sizeof(WIFI_SET_EVENT_E));
    xTaskCreate(wifi_net_task, "wifi_net_task", 4096, NULL, 10, NULL);    
}

发送事件函数

js 复制代码
void ds_wifi_send_event(WIFI_SET_EVENT_E event){
	WIFI_SET_EVENT_E evt;
    evt = event;
	xQueueSend(wifi_event_queue, &evt, 0);
}

至此,我们就可以在任何地方,根据需求去启动、更新、停止我们的WiFi了。 比如:

在接收到数据后,设置事件,就可以实现更新。

ESP32API参考官网:docs.espressif.com/projects/es...

相关推荐
ajassi200016 小时前
开源 Objective-C IOS 应用开发(二)Xcode安装
ios·objective-c·xcode
BianHuanShiZhe1 天前
ios 26的tabbar 背景透明
macos·objective-c·cocoa
郑州光合科技余经理1 天前
乡镇外卖跑腿小程序开发实战:基于PHP的乡镇同城O2O
java·开发语言·javascript·spring cloud·uni-app·php·objective-c
开开心心loky5 天前
[iOS] GCD - 线程与队列
macos·ios·objective-c·cocoa
2501_916008898 天前
App 上架需要什么?从开发者账号到开心上架(Appuploader)免 Mac 上传的完整流程指南
macos·ios·小程序·uni-app·objective-c·cocoa·iphone
2501_915918419 天前
App 上架苹果商店全流程详解 从开发者账号申请到开心上架(Appuploader)跨平台免 Mac 上传实战指南
macos·ios·小程序·uni-app·objective-c·cocoa·iphone
AirDroid_cn9 天前
在 iOS 18 的照片应用,如何批量隐藏截屏?
macos·objective-c·cocoa
pop_xiaoli11 天前
SQLite3语句以及FMDB数据存储初步学习
学习·ios·sqlite·objective-c·cocoa
2501_9387802812 天前
Objective-C 类的协议(Protocol)应用:解耦父子类与跨类通信实践
开发语言·macos·objective-c
2501_9387739913 天前
Objective-C 类的归档与解档:NSCoding 协议实现对象持久化存储
开发语言·ios·objective-c