一、概述

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_COUNTvoid 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模式。

ESP32学习8:WIFI相关推荐

  1. ESP32学习入门:WiFi连接网络

    目录 一.ESP32简单介绍 二.ESP32 Wi-Fi模块介绍 三.ESP32 Wi-Fi 编程模型 四.ESP32 Wi-Fi 事件处理流程 五.ESP32 Wi-Fi开发环境 六.ESP32 W ...

  2. ESPIDF开发ESP32学习笔记【WiFi实现】

    WiFi外设配置 ESP32/8266的Wi-Fi库支持配置及监控Wi-Fi连网功能 相关内容参考乐鑫的ESP32/8266文档https://docs.espressif.com/projects/ ...

  3. 乐鑫Esp32学习之旅② 巧用eclipes编辑器,官方教程在Windows下搭建esp32开发环境,打印 “Hello World”。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  4. ESP32学习笔记(23)——NVS(非易失性存储)接口使用

    一.简介 非易失性存储 (NVS) 库主要用于在 flash 中存储键值格式的数据. NVS适合存储一些小数据,如果对象占用空间比较大,使用负载均衡的FAT文件系统. 如果NVS分区被截断,比如更改分 ...

  5. 乐鑫Esp32学习之旅28 分享在 esp32 SDK实现驱动 Flash W25Q32 的封装,扩大容量存储更多的资源。(开源源码工程)。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 系列一:ESP32系列模组基础学习系列笔记 1. 爬坑学习新旅程,虚 ...

  6. ESP32学习笔记(9)——TCP服务端

    一.TCP与UDP优缺点 1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接. 2.TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失 ...

  7. ESP32学习笔记(七) 复位和时钟

    ESP32学习笔记(七) 复位和时钟 目录: ESP32学习笔记(一) 芯片型号介绍 ESP32学习笔记(二) 开发环境搭建 VSCode+platformio ESP32学习笔记(三) 硬件资源介绍 ...

  8. 乐鑫Esp32学习之旅 19 重磅开源,如何在微信小程序上ble蓝牙配网esp32,blufi的那些事!

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  9. ESP32学习笔记(14)——HTTP服务器

    一.HTTP简介 HTTP(Hyper Text Transfer Protocol) 超文本传输协议,是一种建立在 TCP 上的无状态连接,整个基本的工作流程是客户端发送一个 HTTP 请求,说明客 ...

最新文章

  1. 苹果Siri团队被合并,由谷歌前高管直接领导
  2. C#的静态方法与静态成员(转)
  3. 递归实现数字排列组合
  4. Python对比两个txt文件的不同
  5. 上海交通大学乐经良高数手写笔记-多元微积分
  6. linux 开源谷歌浏览器_开发人员浏览器,Google开源版本等
  7. 单指令流多数据流( SIMD)
  8. 【java】计算 list 中每一行的合计值
  9. centos7火狐浏览器上不了网_网络问题备忘:能ping通,就是上不了网
  10. SQL那些事儿(十二)--DATASET 与 DATAREADER区别
  11. Yarn的原理与资源调度
  12. 算法图解——の——二分查找【附带pdf下载链接】
  13. Fluid mechanics学习笔记--NS方程
  14. python写字动画_Duang!用Python来实现唱歌、跳舞、写字、画画?无所不能的python
  15. 【Android】五种常用布局方式详解(图文+示例)持续更新中...
  16. maven:mirrors和repository的关系区别
  17. bug解决:如何解决浏览器显示乱码问题?
  18. C#操作MicroSoft Word的代码
  19. edge 此项内容已下载并添加到 Chrome 中。_比肩迅雷的下载神器大盘点
  20. Java并发Future

热门文章

  1. 二、Solr搜索原理
  2. 获取通讯录、通话记录、短信
  3. python+openCV+pyqt5实现播放器
  4. VB中API函数的调用
  5. 2023寒假集训通知
  6. 【运维管理】IT管理员常用的管理、运维工具有哪些?
  7. Python气象绘图之Cartopy
  8. 猫眼电影Top100爬取数据(期末项目)
  9. python循环爬取页面_使用for或while循环来处理处理不确定页数的网页数据爬取
  10. hasp运行不成功_条码打印软件安装提示HASP错误代码处理方法