Intercambio de experiencias Anxinke | La realización de bajo consumo de energía en el estado de WiFi permaneciendo conectado, adecuado para el desarrollo secundario de los módulos de la serie ESP32/ESP32C3/ESP32S3

I. Introducción

Los módulos de la serie ESP32/ESP32C3/ESP32S3 tienen tres modos de bajo consumo:
• Modo de suspensión del módem: la CPU puede funcionar y la frecuencia del reloj puede configurarse. La radio y la banda base Wi-Fi y Bluetooth LE están desactivadas, pero Wi-Fi
o Bluetooth LE pueden permanecer conectados.
• Modo de suspensión ligera: la CPU suspende el funcionamiento. Cualquier evento de activación (MAC, host, temporizador RTC o interrupción externa) activará el chip.
Wi-Fi o Bluetooth LE para mantenerse conectado.
• Modo de suspensión profunda: la CPU y la mayoría de los periféricos están apagados, solo la memoria RTC está activa. Los datos de la conexión Wi-Fi se almacenan en el
RTC.
Consumo de energía Modem-sleep > Light-sleep > Deep-sleep (consulte las especificaciones para obtener datos detallados sobre el consumo de energía); en el que Wi-Fi o Bluetooth LE se pueden mantener en los modos Modem-sleep y Light-sleep.
Este artículo presenta cómo mantener la conexión WIFI en Light-sleep.

2. Preparación de hardware

Los módulos de la serie ESP32/ESP32C3/ESP32S3 no requieren un oscilador de cristal externo de 32 kHz, pero el uso de un oscilador de cristal externo de 32 kHz consumirá mucha menos energía que sin un oscilador de cristal externo de 32 kHz. Consulte la descripción de pines en la especificación para los pines específicos del oscilador de cristal externo de 32 kHz.
Requisitos de selección del oscilador de cristal de 32,768 kHz:
• Resistencia interna equivalente (ESR) ⩽ 70 kΩ
• El valor de la capacitancia de carga en ambos extremos se configura de acuerdo con las especificaciones del oscilador de cristal.
• La resistencia en paralelo R4 se utiliza para polarizar el circuito del oscilador de cristal. El valor de la resistencia debe ser de 5 MΩ < R10 ⩽ 10 MΩ. Generalmente, esta resistencia no necesita una parte superior.
inserte la descripción de la imagen aquí

3. Selección de fichas de destino

Módulos de la serie esp32:

 idf.py set-target esp32

Módulos de la serie esp32c3:

 idf.py set-target esp32c3 

Módulos de la serie esp32s3:

 idf.py set-target esp32s3

Cuatro, elementos de configuración de menuconfig

Ejecutar en el directorio del proyecto

idf.py menuconfig

Instrucciones de funcionamiento del módulo de la serie ESP32

⚫ Configuración de componentes → Específico de ESP32 → Fuente de reloj RTC → Cristal externo de 32 kHz

⚫ Configuración de componentes → Administración de energía → 勾选 Soporte para administración de energía

⚫ Configuración de componentes → FreeRTOS → Tasa de ticks (Hz) cambiada a 1000

⚫ Configuración de componentes → FreeRTOS → 勾选 Compatibilidad con inactividad sin marcas

Instrucciones de funcionamiento del módulo de la serie ESP32C3

⚫ Configuración de componentes → ESP32C3-Specific → Fuente de reloj RTC → Cristal externo de 32 kHz

⚫ Configuración de componentes → Administración de energía → 勾选 Soporte para administración de energía

⚫ Configuración de componentes → FreeRTOS → Tasa de ticks (Hz) cambiada a 1000

⚫ Configuración de componentes → FreeRTOS → 勾选 Compatibilidad con inactividad sin marcas

Instrucciones de funcionamiento del módulo de la serie ESP32S3

⚫ Configuración de componentes → ESP32S3-Specific → Fuente de reloj RTC → Cristal externo de 32 kHz

⚫ Configuración de componentes → Administración de energía → 勾选 Soporte para administración de energía

⚫ Configuración de componentes → FreeRTOS → Tasa de ticks (Hz) cambiada a 1000

⚫ Configuración de componentes → FreeRTOS → 勾选 Compatibilidad con inactividad sin marcas

5. Código

5.1 Inicializar la administración de energía:

#if CONFIG_PM_ENABLE
    // Configure dynamic frequency scaling:
    // maximum and minimum frequencies are set in sdkconfig,
    // automatic light sleep is enabled if tickless idle support is enabled.
#if CONFIG_IDF_TARGET_ESP32
    esp_pm_config_esp32_t pm_config = {
    
    
#elif CONFIG_IDF_TARGET_ESP32S2
    esp_pm_config_esp32s2_t pm_config = {
    
    
#elif CONFIG_IDF_TARGET_ESP32C3
    esp_pm_config_esp32c3_t pm_config = {
    
    
#elif CONFIG_IDF_TARGET_ESP32S3
    esp_pm_config_esp32s3_t pm_config = {
    
    
#endif
            .max_freq_mhz = CONFIG_EXAMPLE_MAX_CPU_FREQ_MHZ,
            .min_freq_mhz = CONFIG_EXAMPLE_MIN_CPU_FREQ_MHZ,
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
            .light_sleep_enable = true
#endif
    };
    ESP_ERROR_CHECK( esp_pm_configure(&pm_config) );
#endif // CONFIG_PM_ENABLE

5.2 Establecer intervalo de escucha

Antes de configurar, comprendamos los cuatro conceptos básicos del modo de ahorro de energía wifi:

1, TIM (mensaje de indicación de tráfico)

Hay una información de TIM en cada marco Beacon, que el AP utiliza principalmente para anunciar qué STA bajo su jurisdicción tiene información actualmente almacenada en caché en el AP, y el TIM contiene un campo de control de mapa de bits, que tiene un máximo de 251 bytes, cada uno. el bit mapea a una STA, y cuando es 1, significa que la STA correspondiente a este bit tiene información en el caché del AP.

2, DTIM (mensaje de indicación de tráfico de entrega)

DTIM se usa para aplicaciones multipunto en el modo de ahorro de energía tradicional, es decir, el AP envía tráfico de multidifusión de acuerdo con el intervalo configurando el intervalo de DTIM (el valor predeterminado es un tiempo de baliza, 100 ms).
Este valor no afectará la transmisión de tráfico de unidifusión. No se verá afectado si los usuarios que no habilitan PS usan multidifusión, pero afectará la transmisión de datos de multidifusión recibidos por usuarios que han habilitado PS. Si se establece en un valor demasiado pequeño, no funcionará. Si el efecto de ahorro de energía es demasiado grande, puede afectar la calidad de la comunicación de multidifusión. Este proceso es un proceso de ajuste de prueba y error. Solo se puede ajustar uno por uno para lograr el mejor efecto de ahorro de energía. puede lograr el mejor efecto de ahorro de energía sin afectar la aplicación.
DTIM=1 significa que cada baliza contiene DTIM, DTIM=2 significa que cada dos balizas contiene un DTIM, y así sucesivamente.

3. Intervalo de baliza (intervalo de baliza)

Este valor aumenta, lo que ayuda al cliente a ahorrar energía.
Este valor se vuelve más pequeño, lo que ayuda a mejorar la velocidad de conexión del lado del cliente. Se redujo la carga de tramas de búfer de la estación base.
El valor predeterminado general es 100 mS.

4. Listen-Interval, (STA es el período durante el cual el Cliente recibe Beacon)

El período de Beacon de transmisión AP es Beacon-Interval, y la STA puede elegir libremente un múltiplo entero de Beacon-Interval como su propio Listen-Interval, como 10.

La STA recibe la baliza en cada intervalo de escucha y decodifica el TIM en ella. Si el TIM indica que no hay búfer de datos, la STA puede cambiar inmediatamente al estado Doze. Si el TIM indica que tiene búfer de datos, la STA enviar un paquete de control de campaña Poll al AP Después de recibir el Poll, el AP puede enviar un paquete de datos almacenado en búfer para él a la STA de origen del Poll.

Después de comprender los conceptos anteriores, establecemos el valor de listen_interval en el código

static void wifi_power_save(void)
{
    
    
    tcpip_adapter_init();
    ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));
    
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_wifi_init(&cfg));
		wifi_config_t wifi_config = {
    
    
   		 .sta = {
    
    
         	.ssid = "AIOT@Aithinker",    //设置WiFi名称
         	.password = "12345678",	//设置WiFi密码
         	.listen_interval = 10,  //listen_interval=10 即10个Beacon-Interval,每个Beacon-Interval默认为100ms
   		 },
	};	
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
    ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));
    ESP_ERROR_CHECK(esp_wifi_start());

    ESP_LOGI(TAG, "esp_wifi_set_ps().");
    esp_wifi_set_ps(WIFI_PS_MAX_MODEM);
}

Código de ejemplo completo:
https://github.com/espressif/esp-idf/tree/master/examples/wifi/power_save

6. Prueba de consumo de energía

Los siguientes datos se obtienen conectando un oscilador de cristal de 32,768 K en una habitación protegida

módulo serie ESP32 ESP32C3 ESP32S3
Consumo de energía DTIM10 1,4ma 681ua 1.1 ma

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
Contáctenos
Sitio web oficial: https://www.ai-thinker.com
Desarrollo de DOCS: https://docs.ai-thinker.com
Foro oficial: http://bbs.ai-thinker.com
Soporte técnico: support@aithinker .com

Supongo que te gusta

Origin blog.csdn.net/Boantong_/article/details/123873182
Recomendado
Clasificación