ESP32 WiFi功能配置(STA模式)

参考官方例程: (wifi-->getstart-->station

注意:刚开始烧录官方的例程后,程序跑起来后,会不断复位,报错提示:

        ESP32 Brownout detector was triggered,failed to load RF calibration data

        原因及解决办法:(触发断电探测器,模板的WiFi程序功能可能需要较大电流,有些笔记本的USB口供电不稳定,供电电压突然下降引起程序复位;可以更换别的USB或者绿联的USB线即可解决)

#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"

#include "lwip/err.h"
#include "lwip/sys.h"


#define EXAMPLE_ESP_WIFI_SSID      CONFIG_ESP_WIFI_SSID
#define EXAMPLE_ESP_WIFI_PASS      CONFIG_ESP_WIFI_PASSWORD
#define EXAMPLE_ESP_MAXIMUM_RETRY  5            //定义 连接失败时的重连次数
static const char *TAG = "wifi station";

static int s_retry_num = 0;

//WiFi初始化
void wifi_init_sta(void)
{
    ESP_ERROR_CHECK(esp_netif_init());

    ESP_ERROR_CHECK(esp_event_loop_create_default());
    esp_netif_create_default_wifi_sta();

    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_wifi_init(&cfg));

    esp_event_handler_instance_t instance_any_id;
    esp_event_handler_instance_t instance_got_ip;

    //注册事件回调函数
    ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
                                                        ESP_EVENT_ANY_ID,
                                                        &event_handler,
                                                        NULL,
                                                        &instance_any_id));
    ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,
                                                        IP_EVENT_STA_GOT_IP,
                                                        &event_handler,
                                                        NULL,
                                                        &instance_got_ip));

    wifi_config_t wifi_config = {
        .sta = {
            .ssid = EXAMPLE_ESP_WIFI_SSID,            //路由器账号    
            .password = EXAMPLE_ESP_WIFI_PASS,        //路由器密码   
	        .threshold.authmode = WIFI_AUTH_WPA2_PSK,

            .pmf_cfg = {
                .capable = true,
                .required = false
            },
        },
    };
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );
    ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
    ESP_ERROR_CHECK(esp_wifi_start() );

    ESP_LOGI(TAG, "wifi_init_sta finished.");    //WiFi 初始化完成 
}

//事件回调函数
static void event_handler(void* arg, esp_event_base_t event_base,
                                int32_t event_id, void* event_data)
{
    if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
        esp_wifi_connect();
    } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {   
        if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY) {
            esp_wifi_connect();
            s_retry_num++;
            ESP_LOGI(TAG, "retry to connect to the AP");
        }
    } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {   
                                                                //连接成功获取到IP地址
        ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
        ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
    }
}

//main函数测试
void app_main(void)
{
    //Initialize NVS
    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
      ESP_ERROR_CHECK(nvs_flash_erase());
      ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK(ret);

    ESP_LOGI(TAG, "ESP_WIFI_MODE_STA");
    wifi_init_sta();
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32可以同时运行在STAStation)模式和AP(Access Point)模式下,实现STA和AP的共存。以下是一种实现方式: 1. 首先,你需要在ESP32上初始化WiFi模块,并分别设置STA和AP的参数。 ```cpp #include <WiFi.h> void setup() { // 初始化串口和WiFi模块 Serial.begin(115200); WiFi.mode(WIFI_MODE_STA); // 设置为STA模式 // 连接到WiFi路由器 WiFi.begin("your_ssid", "your_password"); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } // 设置AP模式的参数 WiFi.softAP("your_ap_ssid", "your_ap_password"); } void loop() { // 在这里可以添加其他代码 } ``` 在上述代码中,你需要将`"your_ssid"`和`"your_password"`替换为你的WiFi路由器的名称和密码,将`"your_ap_ssid"`和`"your_ap_password"`替换为你希望设置的AP的名称和密码。 2. 在ESP32上同时运行STA和AP模式后,你可以通过STA模式连接到一个WiFi路由器,并且其他设备可以通过AP模式连接到ESP32。这样,ESP32即可以作为一个WiFi客户端连接到网络,又可以作为一个WiFi热点提供网络给其他设备连接。 请注意,ESP32STA和AP之间共享同一个物理无线接口,因此在同时使用STA和AP模式时,网络性能可能会受到影响。同时,ESP32的资源有限,如果同时处理大量的STA和AP连接请求,可能会导致性能下降。因此,在实际应用中,需要根据具体需求和设备能力进行合理的配置和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值