ESP32-Station Mode例程解析

本文针对ESP32的Station模式Wi-Fi功能进行解析,通过理解并分析ESP32的Wi-Fi编程模型及配置流程,展示了如何使ESP32连接到WiFi热点,以实现单片机的联网与手机控制功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于毕设需要单片机实现联网功能进而实现手机控制,我对ESP32的Wi-Fi的Station的程序进行一番理解和整理。
ESP32例程下载地址

我们先分析每一句代码所蕴含的信息:

/* WiFi station Example
This example code is in the Public Domain (or CC0 licensed, at your option.)
Unless required by applicable law or agreed to in writing, this
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.*/

#include <string.h>//内存和字符串函数的定义
#include "freertos/FreeRTOS.h"//实时操作系统freertos头文件
#include "freertos/task.h"//freertos任务(线程)头文件
#include "freertos/event_groups.h"//freertos事件组
#include "esp_system.h"//ESP32系统头文件(包括系统枚举的定义和函数的声明)
#include "esp_wifi.h"//ESP32Wi-Fi功能头文件
#include "esp_event_loop.h"//ESP32事件轮询头文件
#include "esp_log.h"//ESP32日志信息头文件(打印输出代码信息)
#include "nvs_flash.h"//Non-volatile storage (NVS)非易失性存储库。用于把数据存储到 flash中,掉电或重启后数据仍然存在
#include "lwip/err.h"//轻量级TCP/IP协议栈之错误代码相应的头文件
#include "lwip/sys.h"//轻量级TCP/IP协议栈之系统相应的头文件
/* The examples use WiFi configuration that you can set via 'make menuconfig'.
If you'd rather not, just change the below entries to strings with
the config you want - ie #define EXAMPLE_WIFI_SSID "mywifissid"
*/
//可以通过make menuconfig(Linux下)进行配置Wi-Fi Station要连接的AP的SSID和PSW

#define EXAMPLE_ESP_WIFI_SSID CONFIG_ESP_WIFI_SSID//AP对应的SSID
#define EXAMPLE_ESP_WIFI_PASS CONFIG_ESP_WIFI_PASSWORD//AP对应的连接密钥
#define EXAMPLE_ESP_MAXIMUM_RETRY CONFIG_ESP_MAXIMUM_RETRY//Station连接AP时重试的次数
//上面这三个宏定义可以直接修改(注意SSID和PSW都是字符串形式)或者在Kconfig.projbuild文件中进行修改。

/* FreeRTOS event group to signal when we are connected*/
static EventGroupHandle_t s_wifi_event_group;
/* The event group allows multiple bits for each event, but we only care about one event
* - are we connected to the AP with an IP? */
const int WIFI_CONNECTED_BIT = BIT0;//事件组允许每个事件有多个位,但是我们只关心一个事件,所以只设置一位(可追溯程序找到#define BIT0 0x00000001)
static const char *TAG = "wifi station";//该程序的标签为WiFi基站
static int s_retry_num = 0;//重试次数计数
static esp_err_t event_handler(void *ctx, system_event_t *event)//事件句柄(WiFi状态机)
{
   
   
ESP32 C3是一款基于Espressif Systems的单片机平台,它整合了RISC-V CPU和Wi-Fi/Bluetooth功能。在物联网(IoT)项目中,配网(网络配置)通常涉及到连接到Wi-Fi网络以便设备能够接入互联网。 下面是一个简单的ESP32 C3配网的例子,这个例子可能会使用第三方库如`esp_wifi`和`freertos`: ```c #include "esp_log.h" #include "esp_wifi.h" #include "freertos/event_groups.h" // 定义WiFi SSID和密码常量 const char *ssid = "your_SSID"; const char *password = "your_PASSWORD"; void connect_to_wifi(void) { esp_event_group_clear_bits(wifi_event_group, WIFI_EVENT_STA_START); wifi_config_t wifi_cfg = { .sta = { .ssid = ssid, .password = password, .bssid_set = false // 如果你知道AP的BSSID,可以设置为true } }; if (esp_netif_start_station(&wifi_cfg)) { ESP_LOGE(TAG, "Failed to start station mode."); return; } xEventGroupWaitBits(wifi_event_group, WIFI_EVENT_STA_CONNECTED | WIFI_EVENT_STA_DISCONNECTED, false, true, portMAX_DELAY); } int main() { eventグループ_t wifi_event_group = xEventGroupCreate(); ESP_ERROR_CHECK(esp_event_loop_create_default()); // 初始化WiFi模块 ESP_ERROR_CHECK(esp_event_loop_init(wifi_event_group, NULL)); connect_to_wifi(); // 这里添加更多的程序逻辑,比如网络请求、数据处理等 vTaskDelete(NULL); // 主任务结束 return 0; } ``` 在这个例程中,首先初始化了Wi-Fi事件组和事件循环,然后设置了网络配置,并尝试连接到指定的Wi-Fi网络。如果连接成功,会等待`WIFI_EVENT_STA_CONNECTED`事件;如果连接失败,则会等待`WIFI_EVENT_STA_DISCONNECTED`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值