esp32-wifi

在 ESP32 IDF 中,Wi-Fi(Wireless Fidelity)是一种无线网络技术,用于实现设备之间的无线数据传输和通信。ESP32 支持多种 Wi-Fi 标准和模式,例如:802.11b/g/n,AP 模式,STA 模式,网桥模式等。

下面是一些常用的 ESP32 Wi-Fi API 函数:

  1. esp_wifi_init()
    用于初始化 Wi-Fi 驱动程序。函数原型如下:
esp_err_t esp_wifi_init(wifi_init_config_t *cfg);

  1. esp_wifi_start()
    用于启动 Wi-Fi 驱动程序。函数原型如下:
esp_err_t esp_wifi_start(void);

  1. esp_wifi_stop()
    用于停止 Wi-Fi 驱动程序。函数原型如下:
esp_err_t esp_wifi_stop(void);

  1. esp_wifi_set_mode()
    用于设置 ESP32 Wi-Fi 工作模式。函数原型如下:
esp_err_t esp_wifi_set_mode(wifi_mode_t mode);

  1. esp_wifi_connect()
    用于连接到 Wi-Fi 网络。函数原型如下:
esp_err_t esp_wifi_connect(void);

  1. esp_wifi_disconnect()
    用于断开 Wi-Fi 连接。函数原型如下:
esp_err_t esp_wifi_disconnect(void);

  1. esp_wifi_scan_start()
    用于开始 Wi-Fi 扫描。函数原型如下:
esp_err_t esp_wifi_scan_start(wifi_scan_config_t *config, bool block);

通过使用这些 API 函数,我们可以很容易地实现 ESP32 Wi-Fi 的初始化、连接、扫描等功能。下面是一个简单的示例,演示如何在 ESP32 上连接到 Wi-Fi 网络。

#include "esp_wifi.h"
#include "esp_event_loop.h"
#include "esp_log.h"

#include "freertos/event_groups.h"

static const char *TAG = "wifi station";

/* 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;

static esp_err_t event_handler(void *ctx, system_event_t *event)
{
    switch(event->event_id) {
    case SYSTEM_EVENT_STA_START:
        ESP_LOGI(TAG, "Wi-Fi started");
        esp_wifi_connect();
        break;
    case SYSTEM_EVENT_STA_GOT_IP:
        ESP_LOGI(TAG, "Got IP address");
        xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
        break;
    case SYSTEM_EVENT_STA_DISCONNECTED:
        ESP_LOGI(TAG, "Disconnected from Wi-Fi network");
        esp_wifi_connect();
        xEventGroupClearBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
        break;
    default:
        break;
    }
    return ESP_OK;
}

static void wifi_connect() {
    wifi_config_t wifi_config = {
        .sta = {
            .ssid = "your_SSID",
            .password = "your_PASSWORD",
        },
    };
    esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
    esp_wifi_start();
}

void app_main()
{
    s_wifi_event_group = xEventGroupCreate();

    tcpip_adapter_init();
    ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) );

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

    wifi_connect();

    EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, WIFI_CONNECTED_BIT, pdFALSE, pdFALSE, portMAX_DELAY);
    if ((bits & WIFI_CONNECTED_BIT) == 0) {
        ESP_LOGE(TAG, "Failed to connect to Wi-Fi network");
        return;
    }

    while(true) {
        ESP_LOGI(TAG, "Connected to Wi-Fi network.");
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

在代码中,我们首先使用 wifi_init_config_t 结构体初始化 Wi-Fi 驱动程序并设置 Wi-Fi 连接配置信息。然后我们使用 esp_wifi_start() 函数来启动 Wi-Fi 驱动程序,并使用 esp_wifi_connect() 函数来连接到 Wi-Fi 网络。

为了处理 Wi-Fi 连接相关事件,我们使用 esp_event_loop_init() 函数来初始化事件循环处理器,并使用 SYSTEM_EVENT_STA_GOT_IP、SYSTEM_EVENT_STA_START 和 SYSTEM

_EVENT_STA_DISCONNECTED 事件处理器来处理 Wi-Fi 连接相关事件。当 ESP32 连接到 Wi-Fi 网络时,SYSTEM_EVENT_STA_GOT_IP 事件将被触发,并通过 xEventGroupSetBits() 函数设置 WIFI_CONNECTED_BIT 位。当连接断开时,SYSTEM_EVENT_STA_DISCONNECTED 事件将被触发,并通过 xEventGroupClearBits() 函数清除 WIFI_CONNECTED_BIT。

在代码的最后,我们使用 xEventGroupWaitBits() 函数来等待 WIFI_CONNECTED_BIT 位被设置,表示 ESP32 已成功连接到 Wi-Fi 网络。如果连续等待一段时间后这个位没有设置,将会输出错误日志并退出程序。

总之,在 ESP32 IDF 中,Wi-Fi 是一种非常灵活和强大的无线网络技术,通过使用 Wi-Fi API 函数,我们可以轻松地实现各种 Wi-Fi 连接、扫描、控制等功能,帮助我们构建更加智能和高效的 IoT 应用程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值