注:使用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。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐