ESP32学习笔记(十三)——WIFI AP模式
注:使用VSCode中的ESP-IDF插件进行开发,笔记基于B站UP主艾谷科技的视频教程。
·
注:使用VSCode中的ESP-IDF插件进行开发,笔记基于B站UP主艾谷科技的视频教程
ESP32S3+ESPIDF入门教程 程序纯手打 手把手教学 中文字幕 持续更新中_哔哩哔哩_bilibili
一、建立工程项目
(1).复制工程文件夹
复制SPILCD的工程文件夹,并改名为WIFIAP,在components文件夹下创建新的文件夹并取名WIFIAP,在WIFIAP文件夹中创建相应的WIFIAP.c、WIFIAP.h文件。
(2).在VSCode中打开新的工程文件夹
打开工程文件后,先点击垃圾桶按钮清理之前编译程序产生的中间文件,清理完成后再进行编译。
(3).在components中的CMakeList文件中添加WIFIAP文件路径

(4).编写WIFIAP.c文件
#include "wifiap.h"
#include "esp_wifi.h"
#include <string.h>
#include "lcd.h"
void wifista_event_handler(void* event_handler_arg,esp_event_base_t event_base,int32_t event_id,void* event_data)
{
if(event_base == WIFI_EVENT)
{
if(event_id == WIFI_EVENT_AP_STACONNECTED)
{
LCD_ShowString( 32, 32, "connected ", YELLOW, BLACK, 16, 0);
}
else if(event_id == WIFI_EVENT_AP_STADISCONNECTED)
{
LCD_ShowString( 32, 32, "disconnected", YELLOW, BLACK, 16, 0);
}
}
}
void wifiap_init(void)
{
//初始化NVS是通用步骤放在main.c中进行
esp_netif_init();
esp_event_loop_create_default();
esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifista_event_handler, NULL);
//esp_event_base_t事件组当前需要了解的是WIFI_EVENT和IP_EVENT事件组
//第二个参数表示要监听的事件,可以选择其中的其部分进行监听,也可以选择全部监听(由WIFI_EVENT跳转定义可以看到所有的WIFI_EVENT事件)
//跳转到函数声明中可以看到监听全部事件组的宏定义(ESP_EVENT_ANY_BASE表示所有事件组,ESP_EVENT_ANY_ID表示所有事件编号)
//第三个参数表示事件回调函数,当WIFI_EVENT和IP_EVENT事件组中的事件发生时,会调用该函数进行处理
//第四个参数表示事件回调函数中需要传入的参数,该参数会在事件回调函数中使用,这里我们传入NULL,表示不传入参数
esp_netif_create_default_wifi_ap();//创建默认的WIFI AP接口
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); //此处官方已经给这些参数配置好了默认值,只需要调用宏定义即可
esp_wifi_init(&cfg);//初始化WIFI
esp_wifi_set_mode(WIFI_MODE_AP);//设置为WIFI AP模式
wifi_config_t wifiap_config = {
.ap = {
.ssid = DEFAULT_SSID, //Wifi名称
.ssid_len = strlen(DEFAULT_SSID), //Wifi名称长度,使用strlen函数自动计算wifi名称的长度
.password = DEFAULT_PWD, //Wifi密码
.max_connection = 2, //支持的最大设备连接数量
.authmode = WIFI_AUTH_WPA_WPA2_PSK, //Wifi的加密方式
}
};
//wifi_config_t是一个联合体,同一时间只能配置一个,此处配置为AP模式
esp_wifi_set_config(WIFI_IF_AP, &wifiap_config);//设置WIFI配置
//第一个参数用于选择配置哪一个模式的参数
//第二个参数用于设置WIFI配置
esp_wifi_start();//启动WIFI
LCD_ShowString( 0, 0,"ID:", GREEN, BLACK, 16, 0);
LCD_ShowString( 24, 0, DEFAULT_SSID, YELLOW, BLACK, 16, 0);
LCD_ShowString( 0, 16,"PWD:", GREEN, BLACK, 16, 0);
LCD_ShowString( 32, 16, DEFAULT_PWD, YELLOW, BLACK, 16, 0);
LCD_ShowString( 0, 32, "STA:", GREEN, BLACK, 16, 0);
LCD_ShowString( 32, 32, "disconnected", YELLOW, BLACK, 16, 0);
}
(5).编写WIFIAP.h文件
#ifndef _WIFISTA_H
#define _WIFISTA_H
#define WIFI_SSID "设置ESP32的WIFI的名称"
#define WIFI_PASSWORD "设置ESP32的WIFI的密码"
void wifiap_init(void);
#endif
(6).编写main.c文件
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "lcd.h"
#include "lcdinit.h"
#include "spi.h"
#include "WIFISTA.h"
#include "nvs_flash.h"
void app_main(void)
{
nvs_flash_init(); //wifi使用第一步是初始化nvs_flash
LCD_Init();
LCD_Fill(0, 0, 128, 160,BLACK);
wifiap_init();
while(1) {
vTaskDelay(500);
}
}
(7).编译
(8).连接电路

(9).下载并运行
LCD屏幕第一行显示WIFI名称,第二行显示WIFI密码,第三行显示连接状态。当WIFI处于连接状态时显示connected,当处于断开状态时,显示disconnected。

更多推荐



所有评论(0)