乐鑫技术交流
直播中

陈超

7年用户 874经验值
私信 关注
[问答]

如何在ESP32上的Wi-Fi操作期间自动切换电流消耗水平?

我在D0WDQ6芯片上使用ESP32-WROOM-32模块。 当通过TCP通过Wi-Fi以10kB/s(每100ms1kb)的速度将数据发送到网络时,我使用省电模式而不是PS_NONE来降低功耗。
在有源模式(如果PS_NONE)下,电流消耗稳定在约144mA。 然而,使用PS_MIN和PS_MAX,起初观察到平均高功耗,其具有在一段时间后独立切换到20-40mA的期望值的能力(我附加了电流电平的任意切换的时刻的图像)。 但是,也有可能这种自动切换不会发生。
我对模块在具有不同电流消耗的状态之间自动切换的机制感兴趣。 我想知道如何禁用这种机制,以便在PS_MIN或PS_MAX模式下有一个稳定的低水平的电流消耗(任何在20-40mA内)?
                                                                                                                                                            
                                                                                                                                                                                                                        
              

回帖(2)

费晨

2024-6-11 09:47:36
这种省电模式是基于 IEEE 802.11 节能模式的标准协议进行实现的,如果禁用这种机制则无法开启 Wi-Fi 低功耗,在有数据通信情况下设备平均电流也无法做法 20 ~ 40mA
举报

is.milk

2024-6-11 17:01:41
要在ESP32上实现Wi-Fi操作期间自动切换电流消耗水平,您可以按照以下步骤操作:

1. 首先,确保您已经正确配置了ESP32模块的电源管理设置。在您的代码中,您需要设置Wi-Fi电源管理模式。您可以使用以下函数来设置电源管理模式:

```cpp
esp_wifi_set_ps(wifi_ps_type_t);
```

其中`wifi_ps_type_t`可以是以下值之一:

- WIFI_PS_NONE:不使用电源管理,始终保持Wi-Fi模块处于活动状态。
- WIFI_PS_MIN:最低功耗模式,适用于低数据传输速率的场景。
- WIFI_PS_MAX:最大功耗模式,适用于高数据传输速率的场景。

2. 根据您的需求,您可以选择在PS_MIN和PS_MAX之间切换。例如,当数据传输速率较低时,可以使用PS_MIN模式以降低功耗;当数据传输速率较高时,可以使用PS_MAX模式以提高传输速率。

3. 要实现自动切换电流消耗水平,您可以在代码中添加一个定时器,定期检查Wi-Fi模块的当前状态和数据传输速率。根据这些信息,您可以决定是否需要切换电源管理模式。

4. 在定时器回调函数中,您可以使用以下代码来切换电源管理模式:

```cpp
if (current_data_rate <= low_data_rate_threshold) {
    esp_wifi_set_ps(WIFI_PS_MIN);
} else if (current_data_rate >= high_data_rate_threshold) {
    esp_wifi_set_ps(WIFI_PS_MAX);
}
```

其中`current_data_rate`是当前数据传输速率,`low_data_rate_threshold`和`high_data_rate_threshold`分别是低数据传输速率和高数据传输速率的阈值。

5. 要禁用自动切换机制,您可以简单地不设置定时器或不调用`esp_wifi_set_ps()`函数。这样,Wi-Fi模块将始终使用您最初设置的电源管理模式。

6. 最后,确保您的代码正确处理Wi-Fi连接和数据传输。在切换电源管理模式时,可能会影响Wi-Fi连接的稳定性和数据传输速率。因此,在实际应用中,您需要根据具体需求调整电源管理策略。

通过以上步骤,您可以在ESP32上实现Wi-Fi操作期间自动切换电流消耗水平,同时根据您的需求禁用或启用自动切换机制。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分