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: //事件 ID 取值 SYSTEM_EVENT_AP_STADISCONNECTED, /*有 STA 断开 ESP32 的 AP*/ |
返回值 |
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相关推荐
- ESP32学习入门:WiFi连接网络
目录 一.ESP32简单介绍 二.ESP32 Wi-Fi模块介绍 三.ESP32 Wi-Fi 编程模型 四.ESP32 Wi-Fi 事件处理流程 五.ESP32 Wi-Fi开发环境 六.ESP32 W ...
- ESPIDF开发ESP32学习笔记【WiFi实现】
WiFi外设配置 ESP32/8266的Wi-Fi库支持配置及监控Wi-Fi连网功能 相关内容参考乐鑫的ESP32/8266文档https://docs.espressif.com/projects/ ...
- 乐鑫Esp32学习之旅② 巧用eclipes编辑器,官方教程在Windows下搭建esp32开发环境,打印 “Hello World”。
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...
- ESP32学习笔记(23)——NVS(非易失性存储)接口使用
一.简介 非易失性存储 (NVS) 库主要用于在 flash 中存储键值格式的数据. NVS适合存储一些小数据,如果对象占用空间比较大,使用负载均衡的FAT文件系统. 如果NVS分区被截断,比如更改分 ...
- 乐鑫Esp32学习之旅28 分享在 esp32 SDK实现驱动 Flash W25Q32 的封装,扩大容量存储更多的资源。(开源源码工程)。
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 系列一:ESP32系列模组基础学习系列笔记 1. 爬坑学习新旅程,虚 ...
- ESP32学习笔记(9)——TCP服务端
一.TCP与UDP优缺点 1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接. 2.TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失 ...
- ESP32学习笔记(七) 复位和时钟
ESP32学习笔记(七) 复位和时钟 目录: ESP32学习笔记(一) 芯片型号介绍 ESP32学习笔记(二) 开发环境搭建 VSCode+platformio ESP32学习笔记(三) 硬件资源介绍 ...
- 乐鑫Esp32学习之旅 19 重磅开源,如何在微信小程序上ble蓝牙配网esp32,blufi的那些事!
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...
- ESP32学习笔记(14)——HTTP服务器
一.HTTP简介 HTTP(Hyper Text Transfer Protocol) 超文本传输协议,是一种建立在 TCP 上的无状态连接,整个基本的工作流程是客户端发送一个 HTTP 请求,说明客 ...
最新文章
- 苹果Siri团队被合并,由谷歌前高管直接领导
- C#的静态方法与静态成员(转)
- 递归实现数字排列组合
- Python对比两个txt文件的不同
- 上海交通大学乐经良高数手写笔记-多元微积分
- linux 开源谷歌浏览器_开发人员浏览器,Google开源版本等
- 单指令流多数据流( SIMD)
- 【java】计算 list 中每一行的合计值
- centos7火狐浏览器上不了网_网络问题备忘:能ping通,就是上不了网
- SQL那些事儿(十二)--DATASET 与 DATAREADER区别
- Yarn的原理与资源调度
- 算法图解——の——二分查找【附带pdf下载链接】
- Fluid mechanics学习笔记--NS方程
- python写字动画_Duang!用Python来实现唱歌、跳舞、写字、画画?无所不能的python
- 【Android】五种常用布局方式详解(图文+示例)持续更新中...
- maven:mirrors和repository的关系区别
- bug解决:如何解决浏览器显示乱码问题?
- C#操作MicroSoft Word的代码
- edge 此项内容已下载并添加到 Chrome 中。_比肩迅雷的下载神器大盘点
- Java并发Future