ESP32——WIFI

2023-11-06

WiFi

Wi-Fi 库支持配置及监控 ESP32 Wi-Fi 连网功能。

WiFi工作模式

  1. 基站模式(即 STA 模式或 Wi-Fi 客户端模式),此时 ESP32 连接到接入点 (AP)。
  2. AP 模式(即 Soft-AP 模式或接入点模式),此时基站连接到 ESP32。
  3. AP-STA 共存模式(ESP32 既是接入点,同时又作为基站连接到另外一个接入点)。
  4. 上述模式的各种安全模式(WPA、WPA2 及 WEP 等)。
  5. 扫描接入点(包括主动扫描及被动扫描)。
  6. 使用混杂模式监控 IEEE802.11 Wi-Fi 数据包。

常用功能

头文件

components/esp_wifi/include/esp_wifi.h

WiFi初始化

esp_err_t esp_wifi_init(const wifi_init_config_t *config)
初始化WiFi为WiFi驱动程序分配资源,如WiFi控制结构,RX/TX缓冲区,WiFi NVS结构等。此 WiFi 也会启动 WiFi 任务。
**注意**必须先调用此 API,然后才能调用所有其他 WiFi API
  参数:config:配置 – 指向 WiFi 初始化配置结构的指针;可以指向临时变量
  返回值:
    ESP_OK:成功
    ESP_ERR_NO_MEM:内存不足
    其他


const wifi_init_config_t *config
wifi初始化配置结构体。


#define WIFI_INIT_CONFIG_DEFAULT() { \
    .event_handler = &esp_event_send_internal, \
    .osi_funcs = &g_wifi_osi_funcs, \
    .wpa_crypto_funcs = g_wifi_default_wpa_crypto_funcs, \
    .static_rx_buf_num = CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM,\
    .dynamic_rx_buf_num = CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM,\
    .tx_buf_type = CONFIG_ESP32_WIFI_TX_BUFFER_TYPE,\
    .static_tx_buf_num = WIFI_STATIC_TX_BUFFER_NUM,\
    .dynamic_tx_buf_num = WIFI_DYNAMIC_TX_BUFFER_NUM,\
    .cache_tx_buf_num = WIFI_CACHE_TX_BUFFER_NUM,\
    .csi_enable = WIFI_CSI_ENABLED,\
    .ampdu_rx_enable = WIFI_AMPDU_RX_ENABLED,\
    .ampdu_tx_enable = WIFI_AMPDU_TX_ENABLED,\
    .amsdu_tx_enable = WIFI_AMSDU_TX_ENABLED,\
    .nvs_enable = WIFI_NVS_ENABLED,\
    .nano_enable = WIFI_NANO_FORMAT_ENABLED,\
    .rx_ba_win = WIFI_DEFAULT_RX_BA_WIN,\
    .wifi_task_core_id = WIFI_TASK_CORE_ID,\
    .beacon_max_len = WIFI_SOFTAP_BEACON_MAX_LEN, \
    .mgmt_sbuf_num = WIFI_MGMT_SBUF_NUM, \
    .feature_caps = g_wifi_feature_caps, \
    .sta_disconnected_pm = WIFI_STA_DISCONNECTED_PM_ENABLED,  \
    .magic = WIFI_INIT_CONFIG_MAGIC\
}

默认配置,如果要设置自己的初始值,请覆盖WIFI_INIT_CONFIG_DEFAULT设置的默认值。

配置示例:

static void WiFi_init(void){
    wifi_init_config_t inf = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&inf);
}

设置配置

设置 ESP32 STA 或 AP 的配置

esp_err_t esp_wifi_set_config(wifi_interface_t interface, wifi_config_t *conf)
参数:
  interface:
    STA模式下:WIFI_IF_STA
    AP模式下:WIFI_IF_AP
  conf:
    wifi_config_t结构体,如果是STA模式,则配置要连接WiFi的SSID、
    Password和连接方式;如果是AP模式,则配置释放的WiFi的SSID和Password等参数
返回值:
  ESP_OK:成功
  ESP_ERR_WIFI_NOT_INIT:WiFi 未通过esp_wifi_init初始化
  ESP_ERR_INVALID_ARG:参数无效
  ESP_ERR_WIFI_IF:接口无效
  ESP_ERR_WIFI_MODE:无效模式
  ESP_ERR_WIFI_PASSWORD:密码无效
  ESP_ERR_WIFI_NVS:WiFi 内部 NVS 错误
  其他:参考 esp_err.h 中的 ERRO 代码

设置wifi工作模式

esp32的WiFi常用工作模式有三种分别是AP,STA和AP STA共存模式。在初始化WiFi之后需要设置WiFi的工作模式,使用函数: esp_err_t esp_wifi_set_mode(wifi_mode_t mode)

esp_err_t esp_wifi_set_mode(wifi_mode_t mode)
参数:mode
    WIFI_MODE_NULL = 0,  /**< null mode */
    WIFI_MODE_STA,       /**< WiFi station mode */
    WIFI_MODE_AP,        /**< WiFi soft-AP mode */
    WIFI_MODE_APSTA,     /**< WiFi station + soft-AP mode */
    WIFI_MODE_MAX
返回值:
  ESP_OK:成功
  ESP_ERR_WIFI_NOT_INIT:WiFi 未通过esp_wifi_init初始化
  ESP_ERR_INVALID_ARG:参数无效
  其他:请参阅 esp_err.h 中的错误代码

连接wifi

ESP32设置为STA模式时使用函数esp_err_t esp_wifi_connect(void) 连接WiFi

esp_err_t esp_wifi_connect(void)
参数:无
返回值:
  ESP_OK:成功
  ESP_ERR_WIFI_NOT_INIT:WiFi 未通过esp_wifi_init初始化
  ESP_ERR_WIFI_NOT_STARTED:esp_wifi_start无法启动 WiFi
  ESP_ERR_WIFI_CONN:WiFi 内部错误、工作站或软 AP 控制块错误
  ESP_ERR_WIFI_SSID:工作站连接的AP的SSID无效

启动WiFi

根据当前配置启动WiFi,如何WiFi模式为WIFI_MODE_STA 则启动站控制块并启动站;如果WiFi模式为WIFI_MODE_AP 则创建软AP控制块并启动软AP 如果模式WIFI_MODE_APSTA,则创建软AP和站控制块并启动软AP和站

esp_err_t esp_wifi_start(void)
参数:无
返回值:
  ESP_OK:成功
  ESP_ERR_WIFI_NOT_INIT:WiFi 未通过esp_wifi_init初始化 
  ESP_ERR_INVALID_ARG:参数无效
  ESP_ERR_NO_MEM:内存不足 
  ESP_ERR_WIFI_CONN:WiFi 内部错误、工作站或软 AP 控制块错误
  ESP_FAIL:其他 WiFi 内部错误

更多API参考官网: 乐鑫文档——WiFi配置

实例1:配置esp32为STA模式,连接到WiFi

#include <stdio.h>

#include "esp_system.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "nvs_flash.h"
#include "esp_log.h"
#include "esp_wifi.h"


const static char *TAG = "WIFI";


static void System_Init(void);
static void WiFi_init(void);


void app_main(void){
    ESP_LOGI(TAG,"System initilation");
    System_Init();
    ESP_LOGI(TAG,"WiFi initilation");
    WiFi_init();
    while (1){
        vTaskDelay(500 / portTICK_PERIOD_MS);
        ESP_LOGI(TAG, "...");
    }
    
}

static void System_Init(void){
    esp_err_t ret = nvs_flash_init();

    if(ret==ESP_ERR_NVS_NOT_FOUND || ret == ESP_ERR_NVS_NEW_VERSION_FOUND){
        ESP_ERROR_CHECK(ret);

        ret = nvs_flash_init();
    }

    ESP_ERROR_CHECK(ret);
}

static void WiFi_init(void){
    wifi_init_config_t inf = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&inf);
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
    wifi_config_t conf = {
        .sta={
            .ssid="FAST_FFBD",
            .password="123456789",
            .threshold.authmode=WIFI_AUTH_WPA2_PSK
        }
    };

    ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA,&conf));

    ESP_ERROR_CHECK(esp_wifi_start());
    ESP_ERROR_CHECK(esp_wifi_connect());
}

运行结果:
lbxcnrrn.png
在输出日志WiFi:connected中,看到已经成功连接上WiFi。

实例2

将ESP32WiFi设置为AP模式。

#include <stdio.h>

#include "esp_system.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "nvs_flash.h"
#include "esp_log.h"
#include "esp_wifi.h"


const static char *TAG = "WIFI";


static void System_Init(void);
static void WiFi_init(void);
static void app_main(void){
    System_Init();
    ESP_LOGI(TAG,"System initilation");
    WiFi_Init();
    ESP_LOGI(TAG,"WiFi initilation");

    while (1){
        vTaskDelay(500 / portTICK_PERIOD_MS);
        ESP_LOGI(TAG,"...");
    }
    
}

static void System_Init(void){
    esp_err_t ret = nvs_flash_init();
    if(ret == ESP_ERR_NVS_NEW_VERSION_FOUND || ret == ESP_ERR_NVS_NO_FREE_PAGES){
        ESP_ERROR_CHECK(ret);
        ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK(ret);
}

static void WiFi_Init(void){
    wifi_init_config_t conf = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&conf);
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));
    wifi_config_t con = {
        .ap={
            .ssid="ESP-32",
            .password="123456789"
        }
    };
    ESP_ERROR_CHECK(esp_wifi_set_config(&con));
    ESP_ERROR_CHECK(esp_wifi_start());
}

运行结果:
lefie9db.png
可以看到ESP32的WiFi名称。
lefifavp.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP32——WIFI 的相关文章

  • 深度学习之 python pandas

    在数据科学领域 pandas是非常有用的工具 在数据科学细分领域大数据 通常和深度学习有关 这部分 本篇博客从pandas重要函数开始 到数据变换以及数据分析 pandas提供了数据变换 数据清理 数据可视化以及数据提取等主要数据处理功能
  • tar -xf_linux 解压缩命令tar

    linux环境下常见的压缩文件格式 tar tar gz tar bz2 tar xz 参数 c create create a new archive 创建文件 x extract get extract files from an ar
  • 静态资源上传七牛云

    一 七牛云SDK function 请参考demo的index js中的initQiniu 方法 若在使用处对options进行了赋值 则此处config不需要赋默认值 init options 即updateConfigWithOptio
  • Python爬虫实战(五) :下载百度贴吧帖子里的所有图片

    准备工作 目标网址 https tieba baidu com p 5113603072 目的 下载该页面上的所有楼层里的照片 第一步 分析网页源码 火狐浏览器 gt 在该页面上右击 查看页面源代码 会打开一个新的标签页 第二步 查找图片源
  • ue4蓝图中的customevent和function的细微差别。

    在调用第三方库时 我用customEvent时 可以调用LowEntryHttpRequest中的 Executes the request This blueprint can NOT execute several HTTP Reque
  • 记录一下浏览器缩放和移动端缩放的区别,其实两者是有很大的不同的,之前一直搞不明白。

    直接问AI它们之间的区别的话 是这么回答的 浏览器缩放和移动端缩放是两种不同的概念 它们涉及到用户在不同设备上改变网页内容大小的方式 以下是它们的主要区别 浏览器缩放 Desktop Browser Zoom 浏览器缩放是指在桌面计算机浏览
  • 以太坊学习计划1

    1 如果链接远程链 需要上链才可以 打开服务才可以 2 开启本地geth 服务 下载https geth ethereum org downloads 默认启动geth服务 不启动rpc服务 手动用命令行启动 geth rpc 代码端调用
  • C++的使用小教程8——多态与接口

    C 的使用小教程8 多态与接口 1 什么是多态与接口 2 实现方式 3 应用实例 学习好幸苦 1 什么是多态与接口 C 多态意味着调用成员函数时 会根据调用函数的对象的类型来执行不同的函数 接口描述了类的行为和功能 而不需要完成类的特定实现
  • Qgis国际化

    参考文章 QT实现多国语言 几点需要注意的 1 pro文件生成方法 2 ts文件生成方法 输入命令 lupdate f code QT Code QtApplication2 QtApplication2 QtApplication pro

随机推荐

  • Vit,DeiT,DeepViT,CaiT,CPVT,CVT,CeiT简介

    Vit 最基础的 就是将transformer的encoder取出来 输入图像大小维度 B C H W 将图片不重叠地划分为H patch height w patch weight个patch 每个patch为patch height p
  • Spark相关问题

    Spark相关问题 Hadoop FileFormat接口问题 Hadoop FileOutputFormat在写入数据的时候先写到临时目录 最后写入最终目录 临时目录到最终目录的过程中需要做文件树合并 合并过程中有大量Rename操作 F
  • Hash函数

    概述 Hash函数 散列函数 是一种将任意长度的数据映射到有限长度的域上 通俗来讲 就是将一串任意长度的数据进行打乱混合 转换为一段固定长度的数据输出 这段数据便成为输入数据的一个 指纹 特征 Hash函数的首要目标是保证数据的完整性 而不
  • css连续的纯数字或字母强制换行

    white space normal word break break all
  • 一些网站1

    N1BOOK平台 Nu1L Team Nu1L Team 0004 Median of Two Sorted Arrays LeetCode Cookbook 题库 力扣 LeetCode 全球极客挚爱的技术成长平台
  • 解决shell断开后java进程被结束

    偶尔会碰到用SecureCRT在shell启动java进程并后台运行 命令最后加 的时候 因为断电死机等原因断开shell 然后进程被结束了 运维大佬也说用他们的工具启动进程后一断开连接进程就结束了 后来查到是因为shell在断开的时候会向
  • 漫谈数据挖掘从入门到进阶

    做数据挖掘也有些年头了 写这篇文一方面是写篇文 给有个朋友作为数据挖掘方面的参考 另一方面也是有抛砖引玉之意 希望能够和一些大牛交流 相互促进 让大家见笑了 入门 数据挖掘入门的书籍 中文的大体有这些 Jiawei Han的 数据挖掘概念与
  • Day_1 Part_4 Structures of R

    1 Vector Matrix Array 1 1 What are they Collection of observations Vector 1 dimensional Matrix 2 dimensional Array 3 dim
  • 常见web漏洞及防范(转)

    单个漏洞 需要进行排查与整改 借着别人的智慧 做一个简单的收集 最好能够将常见漏洞 不限于web类的 进行一个统一的整理 这是今年的任务 进行漏洞的工具的收集 为未来的工作做好基础 一 SQL注入漏洞 SQL注入攻击 SQL Injecti
  • MMDetection 3.x中的PackDetInputs

    MMDetection 3 X 里面对pipeline有一个重点修改是新增了 PackDetInputs 有利于统一 进行检测 语义分割 全景分割任务 从配置文件中我们可以看出包含LoadImageFromFile LoadAnnotati
  • electron在BrowserWindow中禁止右键菜单

    最近使用 electron vite solid js 做一个网络流量实时监控的小工具 其中需要禁止用户在获取 BrowserWindow 焦点后弹出默认右键菜单 解决方案 在 new BrowserWindow 后中添加以下代码 禁止右键
  • 静默执行bat文件

    让bat隐藏运行需要用vbs文件才能实现 方式一 使用vbs文件 新建一个 文本文档后缀改为 vbs 可以这样写 set ws WScript CreateObject WScript Shell ws Run d yy bat 0 其中d
  • 《区块链技术与应用》学习笔记2——BTC数据结构

    Hash pointer 哈希指针 指针 在程序运行过程中 需要用到数据 最简单的是直接获取数据 但当数据本身较大 需要占用较大空间时 明显会造成一定麻烦 因此可以引用指针 每次获取相应的数据即可 实际使用中 指针实际上存储的是逻辑地址更多
  • C语言用scanf来判断键盘输入数据类型

    2 可以用来判断是否和定义的类型一致 如 int n if scanf d n 1 else 可以用来判断键盘输入的数据是否是整数
  • 打不开微软自带的软件,或者初次安装sql server 提示下载不了,版本不支持的,一定检查一下这里

    检查这里 这里一定要把代理模式关掉 血的教训啊
  • 吉首大学_编译原理实验题_基于预测方法的语法分析程序的设计【通过代码】

    一 实验要求 实验二 基于预测方法的语法分析程序的设计 一 实验目的 了解预测分析器的基本构成及用自顶向下的预测法对表达式进行语法分析的方法 掌握预测语法分析程序的手工构造方法 二 实验内容 1 了解编译程序的基于预测方法的语法分析过程 2
  • GFS论文解读

    文章目录 1 设计概述 1 1 假设 1 2 GFS架构 1 3 读取流程 1 4 元数据 1 5 操作日志 1 6 一致性模型 2 系统交互 2 1 契约机制 2 2 数据写入过程 2 3 数据流 2 4 原子的记录追加 1 设计概述 1
  • Leetcode[链表] 反转链表 -- 双指针法

    0 题目描述 leetcode原题链接 反转链表 1 双指针法 定义两个指针 pre 和 cur pre 在前 cur 在后 每次让 pre 的 next 指向 cur 实现一次局部反转 局部反转完成之后 pre 和 cur 同时往前移动一
  • Kotlin 31. Kotlin 如何删除文件或文件夹

    Kotlin 如何删除文件或文件夹 比如 我们想要删除 Documents 年月日 文件夹下面的所有文件 包括这个文件夹 我们首先需要获得 Documents 的路径 val extDir File Environment getExter
  • ESP32——WIFI

    WiFi Wi Fi 库支持配置及监控 ESP32 Wi Fi 连网功能 WiFi工作模式 基站模式 即 STA 模式或 Wi Fi 客户端模式 此时 ESP32 连接到接入点 AP AP 模式 即 Soft AP 模式或接入点模式 此时基