ESP32C3Wi-Fi连接初体验


1. 设定STA模式,连接到AP

处于STA模式下的ESP32-C3,可以作为STA连接到AP,在此模式下设备可以通过AP分配的IP地址直接访问外网和内网。可以通过menuconfig->Example_Configuration中配置Wi-Fi的SSID以及Password。

在这里插入图片描述



2. 如何使用ESP-IDF的组件控制设备连接到路由器

使用ESP-IDF的组件控制设备连接到路由器的流程如图所示。

在这里插入图片描述



(1)初始化阶段:
  • 初始化LwIP。创建LwIP核心任务并初始化与LwIP相关的工作。
ESP_ERROR_CHECK(esp_netif_init());
  • 初始化事件。Wi-Fi事件处理基于esp-event组件,Wi-Fi驱动程序会将事件发送到默认事件循环。应用程序可以在esp_event_handler_register()中的回调函数中处理这些事件。esp_netif组件还会处理Wi-Fi事件,以提供一组默认行为。 例如,当ESP32-C3连接到AP时,esp_netif将自动启动DHCP客户端(默认情况下)。初始化事件的代码如下:
ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_create_default_wifi_sta();

//...

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));
  • 初始化Wi-Fi。创建Wi-Fi驱动程序任务,并初始化Wi-Fi驱动程序。 初始化Wi-Fi的代码如下:
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));

(2)配置阶段

Wi-Fi驱动程序初始化成功后,进入配置阶段。在该阶段中,Wi-Fi驱动程序处于STA模式,调用esp_wifi_set_mode(WIFI_MODE_STA)函数将ESP32-C3模式配置为STA模式。

wifi_config_t wifi_config = {
    .sta = {
        .ssid = EXAMPLE_ESP_WIFI_SSID,
        .password = EXAMPLE_ESP_WIFI_PASS,
    },
};
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));

(3)启动阶段

调用esp_wifi_start()函数启动Wi-Fi驱动程序,Wi-FI驱动程序将WIFI_EVENT_STA_START发布到事件任务,事件任务将执行一些常规操作,并将调用应用程序事件回调函数。应用程序事件回调函数将WIFI_EVENT_STA_START中继到应用程序任务,此时调用函数esp_wifi_connect()。

ESP_ERROR_CHECK(esp_wifi_start());

(4)连接阶段

一旦esp_wifi_connect()函数被调用,Wi-Fi驱动程序将开始内部扫描/连接过程。如果内部扫描/连接过程成功,则生成WIFI_EVENT_STA_CONNECTED。在事件任务中,将启动DHCP客户端,该客户端最终将触发DHCP进程。(底层实现)

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 {
            xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);
        }
        ESP_LOGI(TAG,"connect to the AP fail");
    } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_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));
        s_retry_num = 0;
        xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
    }
}

(5)获取IP阶段

初始化DHCP客户端后,将进入获取IP地址阶段,如果从DHCP服务器成功接收到IP地址,则将触发IP_EVENT_STA_GOT_IP事件,并在事件任务中进行常规处理。在应用程序事件回调函数中,IP_EVENT_STA_GOT_IP被传递到应用程序任务。对于基于LwIP的应用程序已准备就绪,可以开始其他任务。但在接收IP之前,请勿进行与套接字相关的工作。


(6)断开阶段

由于主动断开连接、密码错误、找不到AP等原因,Wi-FI连接可能会失败。在这种情况下,会触发WIFI_EVENT_STA_DISCONNECTED事件并提供失败的原因,如调用esp_wifi_disconnect()函数以主动断开连接。


ESP_ERROR_CHECK(esp_wifi_disconnect());
(7)IP更改阶段

如果IP地址发生变化,将触发IP_EVENT_STA_GOT_IP事件,在该事件中将ip_change设置为true。


(8)清理阶段

包括断开Wi-Fi连接、终止Wi-Fi驱动程序、清理Wi-Fi驱动程序等。

ESP_ERROR_CHECK(esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, instance_got_ip));
ESP_ERROR_CHECK(esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, instance_any_id));

ESP_ERROR_CHECK(esp_wifi_stop());
ESP_ERROR_CHECK(esp_wifi_deinit());

ESP_ERROR_CHECK(esp_wifi_clear_default_wifi_driver_and_handlers(station_netif));
esp_netif_destroy(station_netif);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: esp32c3-20220618-v1.19.1.bin是一个固件文件,它适用于ESP32-C3芯片的固件更新。ESP32-C3是一款由乐鑫科技开发的低功耗Wi-Fi和蓝牙芯片,提供了高度集成的系统级解决方案。 这个固件版本是于2022年6月18日发布的v1.19.1版本。通过更新固件,可以提高芯片的性能,修复一些已知的问题,并增加新的功能和改进。 在更新固件之前,我们需要将固件文件烧录到ESP32-C3芯片上。在编程时,可以使用乐鑫科技提供的工具,如esptool或官方的ESP-IDF开发框架。 更新固件通常需要连接到计算机上,并通过串行通信接口(如UART或USB)与芯片进行通信。在通信过程中,将固件文件传输到芯片,并由芯片自动更新。 通过更新固件,我们可以获得更好的性能、更稳定的连接和更高的兼容性。此外,固件更新还可能包括对安全性的改进和漏洞修复,以提高设备的安全性。 总之,esp32c3-20220618-v1.19.1.bin是ESP32-C3芯片的固件文件,通过更新固件可以改善芯片的性能、修复问题、增加新功能,并提高设备的安全性。 ### 回答2: esp32c3-20220618-v1.19.1.bin是一个固件文件,用于更新ESP32-C3芯片的固件。 ESP32-C3是乐鑫公司推出的一款低功耗Wi-Fi和蓝牙双模片上系统,适用于物联网设备和嵌入式应用。固件是指在芯片上运行的软件,用于控制和管理芯片的功能。 固件的命名规则通常包括日期和版本号。在这个例子中,文件名中的“20220618”表示固件的生成日期为2022年6月18日,而“v1.19.1”表示固件的版本号为1.19.1。 更新固件可以提供各种好处,包括修复现有功能的错误、改进性能和稳定性,添加新功能和支持等。当乐鑫公司发布新的固件版本时,用户可以将这个文件下载到他们的设备中,通过特定的固件更新流程来更新芯片的固件。 要更新ESP32-C3芯片的固件,用户可以使用乐鑫官方提供的工具和指南。首先,用户需要将这个固件文件上传到他们的设备中,然后按照乐鑫提供的固件更新流程进行操作。在更新过程中,用户应该特别注意任何与他们的特定设备相关的特殊要求和指引。 通过更新到最新的固件版本,用户可以享受到更好的性能、更稳定的连接和更多的功能。因此,定期检查并更新ESP32-C3芯片的固件是一个重要的步骤,以确保设备始终正常运行和保持与其他设备的兼容性。 ### 回答3: esp32c3-20220618-v1.19.1.bin是一个固件文件,用于ESP32-C3开发板的固件升级。 ESP32-C3是一种高度集成的芯片,具有低功耗、高性能和丰富的功能。它适用于物联网、传感器网络和其他无线通信应用。 固件文件是为ESP32-C3开发板设计的软件包,其中包含了操作系统和其他必要的软件组件。通过将这个固件文件烧录到ESP32-C3开发板上,可以使开发板拥有新的功能和性能优化。 其中的20220618代表固件的版本号,v1.19.1代表固件的主要版本和次要版本号。 固件的升级可以通过将固件文件通过电脑与ESP32-C3开发板连接,然后使用烧录工具将固件文件写入开发板的闪存中完成。升级固件可以修复已知的问题、添加新功能、提高性能和安全性等。 总之,esp32c3-20220618-v1.19.1.bin是一个用于ESP32-C3开发板的固件文件,通过升级固件可以提升开发板的功能和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值