ESP32学习8:WIFI

一、概述

        WIFI是ESP32的核心功能之一,作为一款专为IOT设计的芯片,ESP32的WIFI功能是非常完善的,可以作AP,也可以做STA,还可以同时作为STA和AP。

二、ESP32的WIFI配置

ESP32的WIFI特点: 

  • WIFI可作为AP、STA以及AP+STA三种模式
  • 作为 AP 时,可以被 4 个 STA 连接
  • AP 是 (Wireless) AccessPoint 的缩写,即 (无线) 访问接入点。简单来讲就像是无线路由器一样,设备打开后进入 AP 模式,在手机的网络列表里面,可以搜索到类似TPLINK_XXX 的名字(SSID)
  • STA 是每一个连接到无线网络中的终端(如笔记本电脑、手机、PAD 及其它可以联网的用
    户设备)都可称为一个站点,STA 本身并不接受无线的接入,它可以连接到 AP。

 ESP32开启WIFI热点流程:

         按照以上流程,通过调用API函数,以及设置一些自定义参数,如SSID,PASSWORD等,可以实现创建WIFI的目的。

        在 ESP-IDF 中,整个 wifi 协议栈是一个状态机,它在各个时刻都有一个状态。用户可以根据自己的需要,让协议栈在某个状态时自动处理某些工作。在调用 esp_event_loop_init()函数时 ,我们传入了一个参数 event_handler,它是一个函数指针,当wifi状态机的状态变化时,会调用函数 event_handler(),并给它传递适当的参数。

 ESP32 WIFI状态机工作原理流程图如下:

 状态机解析函数:

回调原型static esp_err_t event_handler
(
void   *ctx,
system_event_t   *event
)
函数功能WIFI状态机回调函数(状态发生改变时回调)
参数

[in] event:
typedef struct {
system_event_id_t event_id; /*事件 ID*/
system_event_info_t event_info; /*事件信息*/
} system_event_t;

//事件 ID 取值
typedef enum {
  SYSTEM_EVENT_WIFI_READY = 0, /*WiFi 准备好*/
  SYSTEM_EVENT_SCAN_DONE, /*扫描 AP 完成*/
  SYSTEM_EVENT_STA_START, /*作为 STA 开始工作*/
  SYSTEM_EVENT_STA_STOP, /*作为 STA 结束工作*/
  SYSTEM_EVENT_STA_CONNECTED, /*作为 STA 连接上 AP*/
  SYSTEM_EVENT_STA_DISCONNECTED, /*作为 STA 断开 AP*/
  SYSTEM_EVENT_STA_AUTHMODE_CHANGE, /*作为 STA 连接的 AP 改变了*/
  SYSTEM_EVENT_STA_GOT_IP, /*作为 STA 从 AP 获取了 IP*/
  SYSTEM_EVENT_STA_LOST_IP, /*作为 STA 丢掉了 IP,也就是错了*/
  SYSTEM_EVENT_STA_WPS_ER_SUCCESS, /*wps succeeds in enrollee mode */
  SYSTEM_EVENT_STA_WPS_ER_FAILED, /* wps fails in enrollee mode */
  SYSTEM_EVENT_STA_WPS_ER_TIMEOUT, /* wps timeout in enrollee mode */
  SYSTEM_EVENT_STA_WPS_ER_PIN, /*wps pin code in enrollee mode */
  SYSTEM_EVENT_AP_START, /*AP 开始*/
  SYSTEM_EVENT_AP_STOP, /*AP 结束*/
  SYSTEM_EVENT_AP_STACONNECTED, /*有 STA 连上 SP32 的 AP*/

  SYSTEM_EVENT_AP_STADISCONNECTED, /*有 STA 断开 ESP32 的 AP*/
  SYSTEM_EVENT_AP_PROBEREQRECVED, /*从 AP 中接收包*/
  SYSTEM_EVENT_GOT_IP6, /*获取 IPv6*/
  SYSTEM_EVENT_ETH_START, /*有线开始*/
  SYSTEM_EVENT_ETH_STOP, /*有线停止*/
  SYSTEM_EVENT_ETH_CONNECTED, /*有线上线*/
  SYSTEM_EVENT_ETH_DISCONNECTED, /*有线掉线*/
  SYSTEM_EVENT_ETH_GOT_IP, /*有线获取了 IP*/
  SYSTEM_EVENT_MAX
} system_event_id_t;

返回值ESP_OK:成功
ESP_ERR_INVALID_ARG : 参数错误

1. AP模式

        本节将ESP32配置在AP模式下,作为一个wifi热点。手机或电脑可以通过TCP协议链接ESP32,进行通讯。

以下为WIFI初始化API介绍:

  • 设置 WiFi 回调函数 esp_event_loop_init();
回调原型

esp_err_t esp_event_loop_init

(

    system_event_cb_t cb,

    void *ctx

)

函数功能初始化事件 loop,设置 WiFi 回调函数
参数 [in] cb:回调函数指针
 [in] ctx:系统调用回调函数时需要传递给回调函数的参数
返回值ESP_OK:成功
other: 失败
  • esp_wifi_set_mode(WIFI_MODE_AP)   设置wifi工作模式
  • esp_wifi_start() 启动

wifi.h文件内容: 

#ifndef COMPONENTS_WIFI_INCLUDE_WIFI_H_
#define COMPONENTS_WIFI_INCLUDE_WIFI_H_

#include <stdio.h>
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event_loop.h"
#include "esp_log.h"
#include "esp_err.h"
#include "nvs_flash.h"
#include "esp_event.h"

#define PORT                        CONFIG_EXAMPLE_PORT
#define KEEPALIVE_IDLE              CONFIG_EXAMPLE_KEEPALIVE_IDLE
#define KEEPALIVE_INTERVAL          CONFIG_EXAMPLE_KEEPALIVE_INTERVAL
#define KEEPALIVE_COUNT             CONFIG_EXAMPLE_KEEPALIVE_COUNT

void wifi_init_softap(void);
static esp_err_t event_handler(void *ctx, system_event_t *event); //事件处理函数

#endif /* COMPONENTS_WIFI_INCLUDE_WIFI_H_ */

wifi.c文件内容:

#include "wifi.h"

/**
 * wifi事件处理函数
 */
static esp_err_t event_handler(void *ctx, system_event_t *event)
{
    switch (event->event_id)
    {
    case SYSTEM_EVENT_AP_START:
        printf("\nwifi_softap_start\n");
        break;
    case SYSTEM_EVENT_AP_STACONNECTED:
        printf("\nwifi_softap_connectted\n");
        break;
    case SYSTEM_EVENT_AP_STADISCONNECTED:
    	printf("\nwifi_softap_disconnectted\n");
        break;
    default:
        break;
    }
    return ESP_OK;
}

/**
 * wifi初始化
 */
void wifi_init_softap(){


    ESP_ERROR_CHECK( nvs_flash_init() );
    tcpip_adapter_init();
    ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL)); 

    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_wifi_init(&cfg));
    //配置热点
    wifi_config_t wifi_config = {
        .ap = {
            .ssid = "wangy_wifi",
            .ssid_len = 0,
            /* 最多只能被4个station同时连接,这里设置为只能被一个station连接 */
            .max_connection = 1,
            .password = "20211219",
            .authmode = WIFI_AUTH_WPA_WPA2_PSK,
        },
    };
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP)); //设置AP模式
    ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config));//配置AP模式参数
    ESP_ERROR_CHECK(esp_wifi_start()); //启动

}

 2. STA模式

        ESP32配置为STA模式非常简单,只需要修改上述AP模式参数即可。

 三、结束

        本节介绍了ESP32 使用wifi功能时的两种模式,分别为AP以及STA模式。

  • 3
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值