当前位置: 首页 > news >正文

ESP32学习笔记(基于IDF):IOT应用——WIFI连接

前言

学习esp32的wifi连接,并尝试把开发板连接到手机的热点

一、ESP32的WIFI的三种工作方式

工作方式描述典型场景特点
STAESP32 作为 Wi-Fi 客户端,连接到现有的无线网络(如家用路由器、热点),就像手机、电脑连接 Wi-Fi 一样接入互联网获取数据(如从服务器拉取信息、上报传感器数据到云端)。与同一局域网内的其他设备(如电脑、手机)通信。需知道目标网络的 SSID(名称)和密码,连接后获取路由器分配的 IP 地址,融入现有网络。
APESP32 自身作为 Wi-Fi 热点(类似路由器),允许其他设备(如手机、电脑、其他 ESP32)连接到它。构建小型局域网,让其他设备直接与 ESP32 通信(如手机连接 ESP32 热点后,通过网页配置设备参数)。无需外部路由器的场景(如两个 ESP32 直接互联传输数据)。ESP32 会广播自己的 SSID,其他设备需输入 ESP32 热点的密码(可设置无密码)才能连接,ESP32 作为网关为连接的设备分配 IP 地址。
STA+AP同时开启 STA 模式和 AP 模式,ESP32 既可以连接到外部路由器(STA 角色),又可以作为热点供其他设备连接(AP 角色)。物联网网关:ESP32 连接互联网(STA 模式),同时本地设备(如传感器节点)连接到 ESP32 的热点(AP 模式),ESP32 负责转发本地数据到云端。中继功能:扩展现有 Wi-Fi 覆盖(但 ESP32 本身不支持自动中继,需手动编程实现数据转发)。兼顾两种模式的功能,适合需要同时与外部网络和本地设备通信的场景,但会增加功耗。

二、我尝试的是STA 模式

1、在根目录下使用以下指令新建一个工程,名字就叫”sta“

idf.py create-project sta

在这里插入图片描述
2、进到sta目录下,使用以下指令,对工程编译一下

idf.py build

在这里插入图片描述
3、编译完成后,打开VSCode,通过SSH,远程登录到我们的Ubuntu系统
在这里插入图片描述
4、然后打开刚刚我们创建的sta这个工程
在这里插入图片描述
5、按住Ctrl+Shift+P,然后选中图示这个选项,不然包含头文件啥的会报错
在这里插入图片描述
6、在sta.c文件下写入如下代码:

#include <stdio.h>
#include "nvs_flash.h"// NVS闪存初始化库(用于存储Wi-Fi等配置信息的非易失性存储)
#include "esp_wifi.h"// Wi-Fi功能库(ESP32 Wi-Fi相关API)
#include "esp_event.h"// 事件处理库(用于处理Wi-Fi连接、IP获取等事件)
#include "esp_log.h"// 日志库(用于打印调试信息)
#include "esp_err.h"// 错误处理库(定义ESP32错误码)
#include <string.h>#define TEST_SSID "Xiaomi 14 Pro"// 要连接的Wi-Fi热点名称(SSID)
#define TEST_PASSWORD "12345678"// 要连接的Wi-Fi密码#define TAG "sta"// 日志标签(打印日志时的标识,方便筛选)/*** Wi-Fi事件处理函数* 用于响应Wi-Fi连接状态变化、IP地址获取等事件* @param event_handler_arg: 事件处理参数(未使用)* @param event_base: 事件类型(如WIFI_EVENT、IP_EVENT)* @param event_id: 具体事件ID(如连接成功、断开连接)* @param event_data: 事件相关数据(未使用)*/
void wifi_event_handle(void* event_handler_arg,esp_event_base_t event_base,int32_t event_id,void* event_data)
{if(event_base == WIFI_EVENT)// 处理Wi-Fi相关事件(WIFI_EVENT类型){switch(event_id){case WIFI_EVENT_STA_START: //事件1:STA模式启动完成(Wi-Fi已准备好连接)esp_wifi_connect();// 调用连接函数,尝试连接到指定Wi-Fibreak;case WIFI_EVENT_STA_CONNECTED:// 事件2:STA成功连接到Wi-Fi热点ESP_LOGI(TAG,"esp32 connected to ap!");break;case WIFI_EVENT_STA_DISCONNECTED:// 事件3:STA与Wi-Fi热点断开连接esp_wifi_connect(); // 自动重试连接ESP_LOGI(TAG,"esp32 connect the ap faild! retry!");break;default:break;}}else if(event_base == IP_EVENT)//处理IP相关事件(IP_EVENT类型){switch(event_id){case IP_EVENT_STA_GOT_IP://事件:STA成功获取IP地址(此时可正常联网)ESP_LOGI(TAG,"esp32 get ip address");break;}}
}void app_main(void)
{// 1. 初始化NVS闪存(用于存储Wi-Fi配置等信息,必须先初始化)// ESP_ERROR_CHECK:检查函数返回值,若出错则终止程序并打印错误ESP_ERROR_CHECK(nvs_flash_init());//2. 初始化网络接口(创建网络协议栈,如TCP/IP)ESP_ERROR_CHECK(esp_netif_init());// 3. 创建默认事件循环(用于处理Wi-Fi、IP等事件的消息队列)ESP_ERROR_CHECK(esp_event_loop_create_default());// 4. 创建默认的STA模式网络接口(绑定Wi-Fi STA与TCP/IP协议栈)esp_netif_create_default_wifi_sta();// 5. 初始化Wi-Fi配置(使用默认配置,包含MAC地址、信道等基础参数)wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK(esp_wifi_init(&cfg));// 应用Wi-Fi初始化配置// 6. 注册事件处理器(将事件与处理函数绑定)// 注册所有Wi-Fi事件(ESP_EVENT_ANY_ID)到wifi_event_handle函数esp_event_handler_register(WIFI_EVENT,ESP_EVENT_ANY_ID,wifi_event_handle,NULL);// 注册IP获取事件(IP_EVENT_STA_GOT_IP)到wifi_event_handle函数esp_event_handler_register(IP_EVENT,IP_EVENT_STA_GOT_IP,wifi_event_handle,NULL);// 7. 配置要连接的Wi-Fi参数(热点名称、密码、加密方式等)wifi_config_t wifi_config = {.sta.threshold.authmode = WIFI_AUTH_WPA2_PSK,// 加密方式(WPA2-PSK,常见家用Wi-Fi加密).sta.pmf_cfg.capable = true,// 支持PMF.sta.pmf_cfg.required = false,// 不强制要求路由器支持PMF};// 清空SSID数组(避免残留垃圾数据)memset(&wifi_config.sta.ssid,0,sizeof(wifi_config.sta.ssid));// 将TEST_SSID(热点名称)复制到Wi-Fi配置中memcpy(wifi_config.sta.ssid,TEST_SSID,strlen(TEST_SSID));// 清空密码数组(避免残留垃圾数据)memset(&wifi_config.sta.password,0,sizeof(wifi_config.sta.password));// 将TEST_PASSWORD(密码)复制到Wi-Fi配置中memcpy(wifi_config.sta.password,TEST_PASSWORD,strlen(TEST_PASSWORD));// 8. 设置Wi-Fi工作模式为STA(客户端模式,连接其他热点)ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));// 应用Wi-Fi配置(将上面设置的热点信息传入Wi-Fi驱动)ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA,&wifi_config));// 启动Wi-Fi(开始执行连接流程)ESP_ERROR_CHECK(esp_wifi_start());return;}

7、然后在手机打开热点,名称跟密码写上热点所对应的
在这里插入图片描述
8、代码编写完成后,在工程目录下,执行以下指令,自动完成编译、烧录、打开串口日志监控

idf.py flash monitor

在这里插入图片描述
9、观察打印,发现自动重连了两次,然后连接到热点,然后分配到IP,自此,我们就成功连接上了wifi
在这里插入图片描述

http://www.dtcms.com/a/496103.html

相关文章:

  • 网站现状分析seo优化快速排名技术
  • 前景互联应急救援指挥平台接入大疆机场3无人机
  • python(入门)map内置函数及import模块导入,as别名
  • 做外贸的网站域名怎么买网站营销队伍
  • 【电源专题】环境温度对PPTC保持电流(Ihold)和动作电流(Itrip)的影响
  • 上海做电缆桥架的公司网站如何查网站开发商
  • 中国遵义门户网站建设银行网站 查余额
  • 十五、kubernetes 1.29 之 容忍、污点、固定节点
  • 福州企业建站软件做企业评价的有哪些网站
  • dw用设计视图做网站视频网站做推广有没有效果
  • 伪静态WordPress/Vue
  • 《理解进制问题--剖析存储底层奥秘》
  • Vue 指令详解笔记:从内置到自定义(初学者实战指南)
  • 河南网站营销seo电话灵感网站
  • seo下载站东莞网站推广优化网站
  • jQuery Mobile 网格
  • 青岛网站开发青岛网站建设搜q.479185700
  • NX3303X,一款HDMI转VGA 2K*4K自带DAC,CS5213国产替代芯片
  • 【C++】C++风格的类型转换
  • MLIR 中的 Linalg Dialect
  • 昆明网站建设系统有哪些wordpress seo链接
  • MySQL基础随堂笔记1
  • 【开题答辩实录分享】以《住宅小区在线服务平台》为例进行答辩实录分享
  • C标准库--浮点<float.h>
  • 大学生兼职做网站做行业导航网站好
  • 怎样做个网站手机网页视频下载软件
  • 麻涌镇做网站医疗器械注册证查询
  • 青浦郑州阳网站建设邹城网站建设
  • 状态机的介绍
  • 算法---位运算