文章目录

  • 一、前言
  • 二、硬件准备
  • 三、目标芯片选择
  • 四、menuconfig配置项
    • ESP32系列模组 操作说明
    • ESP32C3系列模组 操作说明
    • ESP32S3系列模组 操作说明
  • 五、代码
    • 5.1 初始化电源管理:
    • 5.2 设置Listen-Interval
      • 1、TIM(traffic indication message)
      • 2、DTIM(Delivery Traffic Indication Message )
      • 3、Beacon-Interval(信标间隔)
      • 4、Listen-Interval, (STA即Client接收Beacon 的周期)
  • 六、功耗测试

一、前言

ESP32/ESP32C3/ESP32S3系列模组都有三种低功耗模式:
• Modem-sleep 模式:CPU 可运行,时钟频率可配置。Wi-Fi 及 Bluetooth LE 的基带和射频关闭,但 Wi-Fi
或 Bluetooth LE 可保持连接。
• Light-sleep 模式:CPU 暂停运行。任何唤醒事件(MAC、主机、RTC 定时器或外部中断)都会唤醒芯片。
Wi-Fi 或 Bluetooth LE 可保持连接。
• Deep-sleep 模式:CPU 和大部分外设都会掉电,只有 RTC 存储器处于工作状态。Wi-Fi 连接数据存储在
RTC 中。
功耗Modem-sleep > Light-sleep > Deep-sleep(详细功耗数据见规格书);其中 Modem-sleep和 Light-sleep两种模式下可以保持 Wi-Fi或 Bluetooth LE 。
本文介绍Light-sleep下如何保持WIFI连接。

二、硬件准备

ESP32/ESP32C3/ESP32S3系列模组没有强制要求用32 kHz 的外部晶振,但用32 kHz外部晶振会比不用外部32kHz晶振功耗低很多。32 kHz 的外部晶振具体接哪些引脚见规格书管脚描述。
32.768 kHz 晶振选择要求:
• 等效内阻 (ESR) ⩽ 70 kΩ;
• 两端负载电容值根据晶振的规格要求进行配置。
• 并联电阻 R4 用于偏置晶振电路,电阻值要求 5 MΩ < R10 ⩽ 10 MΩ,该电阻一般无需上件。

三、目标芯片选择

esp32系列模组:

 idf.py set-target esp32

esp32c3系列模组:

 idf.py set-target esp32c3

esp32s3系列模组:

 idf.py set-target esp32s3

四、menuconfig配置项

在工程目录下运行

idf.py menuconfig

ESP32系列模组 操作说明

⚫ Component config → ESP32-Specific → RTC clock source → External 32kHz crystal

⚫ Component config → Power Management → 勾选 Support for power management

⚫ Component config → FreeRTOS → Tick rate (Hz) 改为 1000

⚫ Component config → FreeRTOS → 勾选 Tickless idle support

ESP32C3系列模组 操作说明

⚫ Component config → ESP32C3-Specific → RTC clock source → External 32kHz crystal

⚫ Component config → Power Management → 勾选 Support for power management

⚫ Component config → FreeRTOS → Tick rate (Hz) 改为 1000

⚫ Component config → FreeRTOS → 勾选 Tickless idle support

ESP32S3系列模组 操作说明

⚫ Component config → ESP32S3-Specific → RTC clock source → External 32kHz crystal

⚫ Component config → Power Management → 勾选 Support for power management

⚫ Component config → FreeRTOS → Tick rate (Hz) 改为 1000

⚫ Component config → FreeRTOS → 勾选 Tickless idle support

五、代码

5.1 初始化电源管理:

#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_ESP32esp_pm_config_esp32_t pm_config = {#elif CONFIG_IDF_TARGET_ESP32S2esp_pm_config_esp32s2_t pm_config = {#elif CONFIG_IDF_TARGET_ESP32C3esp_pm_config_esp32c3_t pm_config = {#elif CONFIG_IDF_TARGET_ESP32S3esp_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 设置Listen-Interval

设置之前先了解一下wifi省电模式下的四个基本概念:

1、TIM(traffic indication message)

每一个Beacon的帧中都有一个TIM信息 ,它主要用来由AP通告它管辖下的哪个STA有信息现在缓存在AP 中,而在TIM中包含一个Bitmap control 字段,它最大是251个字节,每一位映射一个STA,当为1时表示该位对应的STA在AP的缓存中有信息。

2、DTIM(Delivery Traffic Indication Message )

DTIM用于传统节电模式中,多点的应用,即由AP通过设置DTIM的间隔(缺省是一个beacon时间,100ms),根据这个间隔发送组播流量。
这个值不会影响单播的流量传递,如果没有开启PS的用户使用组播也不会受到影响,但是会影响开启了PS的用户接收多播数据的传递,如果设置的太小,起不到节电作用,太大又可能会影响组播通讯的质量,这个过程是一个trial-error的调整过程,只能一个一个测试调整,以达到最佳,既可以达到最佳节电效果又不影响应用。
DTIM=1表示每个beacon中都包含DTIM, DTIM=2表示每两个beacon中包含一个DTIM,以此类推。

3、Beacon-Interval(信标间隔)

这个值变大,有助于client端省电。
这个值变小,有助于提高client端连接速度。降低了基地台的buffer frame负载。
一般预设为100mS。

4、Listen-Interval, (STA即Client接收Beacon 的周期)

AP 广播Beacon 的周期为Beacon-Interval,STA 可以自由选择Beacon-Interval的整数倍作为自己的Listen-Interval,比如10。

STA 每隔Listen-Interval 接收Beacon并解码其中的TIM,如果TIM 指示没有数据缓存,STA 就可以立刻转入Doze 状态,如果TIM 指示其有数据缓存,STA 就要向AP 发一个竞选控制包Poll,AP 在收到Poll 后就可以向该Poll 的源STA 发送一个为它缓存的数据包。

了解了以上概念后,我们在代码里面设置listen_interval 的值

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);
}

完整示例代码:
https://github.com/espressif/esp-idf/tree/master/examples/wifi/power_save

六、功耗测试

以下数据外挂32.768K晶振在屏蔽房测试所得

系列模组 ESP32 ESP32C3 ESP32S3
DTIM10功耗 1.4ma 681ua 1.1ma


联系我们
官方官网:https://www.ai-thinker.com
开发DOCS:https://docs.ai-thinker.com
官方论坛:http://bbs.ai-thinker.com
技术支持:support@aithinker.com

安信可经验分享 | WiFi保持连接状态下低功耗的实现,适用于ESP32/ESP32C3/ESP32S3系列模组二次开发相关推荐

  1. 安信可推荐 | 安信可ESP32-S3系列模组和ESP8266系列模组硬件参数对比。

    文章目录 前言 主要参数对比 功耗 产品实物图 联系我们 前言 安信可深耕无线模组多年,现已推出ESP32-S3系列模组,欢迎前来咨询. ESP32-S3 搭载 Xtensa 32 位 LX7 双核处 ...

  2. 基于涂鸦模组二次开发wifi篇——WB3模组

    选择涂鸦标准SDK开发 下载SDK (1.0.7版本) WR3型号 开发环境 VMware + Ubuntu 16.04 解压压缩包:tar -vxf ty_iot_wf_rtos_sdk-DevOS ...

  3. 涂鸦 Wi-Fi SDK开发系列教程——5.对模组二次开发

    上期精彩回顾:Wi-Fi模组二次开发课程--4.烧录授权 本章节旨在通过一个简单Demo,使开发者能够了解涂鸦SDK的启动流程,带领开发者基于涂鸦提供的SDK对模组进行二次开发. Demo功能介绍:硬 ...

  4. 【AT指令使用】安信可ESP-32-S3/ESP-32-C3系列模组AT固件应用之Web Captive portal功能

    目录 前言 一.Captive portal功能原理 二.操作过程 1.烧录带有Captive portal功能的AT固件 2.模组开启Captive portal功能操作过程 3.手机部分的操作过程 ...

  5. 安信可EC系列模组接入OneNET物联网开放平台的多协议接入产品

    目录 前言 一.OneNET的多协议接入的创建 1. 进入到OneNET的首页:OneNET - 中国移动物联网开放平台,并进入到控制台: 2. 切换到旧版控制台:OneNET - 物联网控制台旧版 ...

  6. 安信可Combo固件常见应用示例集合,适用RTL8720系列 / Ai-WB2系列模组

    文章目录 一.配网 1.1 bw15/bw16 蓝牙配网 1.2 Ai-WB2系列模组smartconfig配网 1.3 Ai-WB2系列模组airkiss配网 1.4 Ai-WB2系列模组蓝牙blu ...

  7. 怎样使用C# 获取WIFI的连接状态?

    怎样使用C# 获取WIFI的连接状态? 行文导航 思路 问题得到解决 代码展示 断开与连接WIFI状态效果 在OrangePI Linux Arm32上的测试效果 C# 获取WIFI的连接状态 本文是 ...

  8. WiFi开发|ESP8266模组AT指令开发二

    ESP8266模组AT指令开发二 1. 基于STM32的AT指令开发 ESP8266可以使用官方提供的SDK来进行开发,也可以直接利用官方提供的固件直接使用AT指令配置模块使用.在ESP8266模组A ...

  9. 【工程师有空了】安信可ESP8266系列及ESP32系列模组AT指令实现网页配网---又多了一个配网方式

    文章目录 前言 AT指令介绍: 配网原理 一.实验准备 可能你还要用到: 二.编译固件 三.开启配网 四.常见问题 1.AT固件烧录不显示 "ready" 2.显示配网失败 3.除 ...

  10. 【WiFi模组】乐鑫ESP32 基于ESP-IDF的原生SDK二次开发

    一. 开发环境 1.系统环境:Windos10 2.源码框架:官方ESP-IDF 4.4.1 3.编辑代码:VScode 3.开发语言:C语言 4.操作系统:FreeRTOS 二.开发流程 1.下载离 ...

最新文章

  1. 从0到1构建数据科学竞赛知识体系,有夕,鱼佬,茂霖等竞赛大咖将特邀分享...
  2. mysql负载均衡与同步_MySql数据库从同步负载均衡实时备份
  3. 非平坦结构元matlab,基于MATLAB的巴特沃思型数字滤波器设计.doc
  4. java语言发展历史_Java编程语言的历史和未来
  5. Linux重要的热键[Tab]、[Ctrl]-c、[Ctrl]-d介绍
  6. Python教学与学习过程中应注意的九句话
  7. 让画面更逼真!这个强化超分辨率GAN让老游戏迎来第二春 | 代码+论文+游戏MOD...
  8. E人E本的android突破与行业走向
  9. 济宁a货翡翠,芜湖a货翡翠
  10. 电梯控制项目设计报告-第十周
  11. java类与对象实验报告心得体会_java实验报告类与对象
  12. 安徽二本大学计算机排名,2018安徽大学排名 安徽有哪些大学
  13. Pano2VR生成的HTML文件打开为黑屏
  14. 实现微信小程序授权获取手机号登录(c#后端代码附上 少爷接收)
  15. DELL笔记本E5400刷BIOS激活win7
  16. android 阅读器自动滚动,在Android手机上实现阅读器翻页效果.doc
  17. MFC学习之 对话框设置背景颜色及控件透明的方法
  18. 导入依赖失败,报错信息Failed to resolve: com.*.*:*:0.0.0<a href=““>Show in Project Structure dialog
  19. 补鞋匠迈尔鲁夫的故事(二)
  20. 上山打老虎个人论坛源码

热门文章

  1. 2019年微博用户画像_2019年您需要了解的有关用户的信息
  2. Android Studio设置签名密钥
  3. mac foxmail html签名,Foxmail怎么设置签名?Foxmail个性签名设置方法
  4. 模电基础讲解02:晶体二极管的结构类型
  5. pic16 hex 逆向c语言,PIC单片机的十六进制文件格式:Hex文件
  6. 通俗易懂讲PID,附参数调试口诀
  7. win10重装系统后连不上公司服务器,win10重装系统后连不上网有什么解决方法
  8. c语言怎么写注释,C语言注释
  9. 机器学习-验证策略总结【交叉验证、验证集方法】
  10. 使用ffmpeg从视频中提取纯音频纯视频