esp32低功耗远程唤醒

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了esp32低功耗远程唤醒相关的知识,希望对你有一定的参考价值。

esp32低功耗远程唤醒
ESP32是Espressif乐鑫信息科技推出的一块WiFi芯片。
拥有40nm工艺、双核32位MCU、2.4GHz双模Wi-Fi和蓝牙芯片、主频高达230MHz,计算能力可达600DMIPS。
涵盖精细分辨时钟门控、省电模式和动态电压调整等特征。
它集成了天线和射频巴伦,功率放大器,低噪声放大器,滤波器和电源管理模块等元器件,性能稳定,易于制造,工作温度范围从-40℃到125℃。
远程唤醒步骤:
1、在桌面的“网上邻居”图标上按右键,选择“属性”,打开“网络连接”窗口。并打开“文件”菜单中的“新建连接”命令。使用网络连接向导,这是一个综合的网络连接向导,可以设置拨号、VPN、串行连接等服务。
2、选择网络类型,在这里选择“连接到我的工作场所的网络”,点击“下一步”继续
。下一步选择“虚拟专用网络连接”,点击“下一步”按钮继续。
3、填入远程连接的名称,可以根据具体情况来设置,填好之后点击“下一步”按钮继续。VPN网络要求的前提是计算机已经接通Internet网络,所以在这里只要填入对方服务
器的地址(可以是域名也可以是IP地址)即可。点击“下一步”继续。已经完成本VPN
客户端的安装。单击“完成”之后,系统会在“网络连接”栏目中生成一个连接对象。
4、最后,弹出连接对话框,填入VPN服务器所支持远程拨入的账号和密码,单击“连接”开始连接。如果服务器账号及服务设置都正确的话,就可以看到提示框显示“正在网络上注册你的计算机”,完成之后,也会在系统托盘中显示“虚拟专用连接”已经建立。
参考技术A 亲,您好!ESP32是一款非常流行的微控制器,它具有低功耗模式,可以实现远程唤醒。要实现ESP32的低功耗远程唤醒,需要以下步骤:
1. 配置ESP32的低功耗模式:在ESP32上,有多种低功耗模式可供选择,包括Deep Sleep、Light Sleep和Modem Sleep等。您需要选择适合您应用的低功耗模式,并在代码中进行相应的配置。
2. 配置唤醒源:ESP32可以通过多种唤醒源来唤醒,包括定时器、GPIO、外部中断等。您需要选择适合您应用的唤醒源,并在代码中进行相应的配置。
3. 配置网络连接:如果您需要通过网络远程唤醒ESP32,您需要配置ESP32的网络连接。这可以通过WiFi或蓝牙等方式实现。
4. 编写代码:最后,您需要编写代码来实现ESP32的低功耗远程唤醒。您可以使用ESP-IDF或Arduino IDE等开发工具来编写代码。
需要注意的是,ESP32的低功耗模式需要在硬件和软件两方面进行相应的配置,才能实现最佳的功耗效果。此外,不同的应用场景需要选择不同的低功耗模式和唤醒源,以达到最佳的功耗效果和性能表现。
希望这些信息对您有所帮助!

移远EC600低功耗唤醒锁wakelock的使用,QuecPython功耗分析

移远QuecPython在线文档低功耗休眠唤醒 的介绍比较少,咨询FAE后才知道相关说明是在另一个页面 QuecPython低功耗


EC600模组如何进入低功耗


模组如果需要需要进入低功耗模式,必须满足以下几个条件:

  • USB 拔出
  • 系统唤醒锁全部释放(唤醒锁的数量可通过pm.get_wakelock_num()接口获取)
  • 无外部引脚中断干扰
  • 使能系统自动进入休眠(具体接口:pm.autosleep(sleep_flag))
  • CFUN=0 或者为正常注网状态


QuecPython低功耗唤醒锁的运行机制


  了解 FreeRTOS 的都知道,任务在运行到 vTaskDelay(); 时,会产生相应时间片时长的延时。在这时间段内,本任务处于阻塞态,并产生任务调度,将CPU控制权转交给其他任务去运行程序;如果其他任务也没有活动事件,那么调度器就会将CPU切换到空闲任务。而低功耗模式,最粗暴的做法,就是在 Idle 空闲任务 运行时,直接将MCU进入低功耗模式。再在适当的条件下,来唤醒MCU运行任务,这些条件可以是外部IO中断,也可以是定时器中断。

  又因为上面的方式需要在休眠时保持FreeRTOS的系统节拍,所以系统节拍计数时也会产生唤醒,而大多数由系统节拍产生的唤醒,都是没有活动的用户任务的,唤醒后计数、计数后马上又进入休眠,约等于说这个唤醒除了更新系统节拍再无其他意义。于是有了更低功耗的模式Tickless Idle Mode,它通过在休眠时暂停系统节拍计数的方式,极大减少了无用的唤醒次数。而在休眠过程中丢失的系统节拍,会在下一次唤醒后补上,所以不用担心会对用户任务造成影响。

  扯得有点多了,回到正题,QuecPython也是运行着RTOS的,所以低功耗原理不会差太多。
  官方文档对其低功耗休眠是这样描述:

对于模组的睡眠进程来说,只有当众多优先级高于睡眠进程的进程都无任务在运行时,
即所有进程都释放它们的CPU控制权时,模组才会进入睡眠,降低功耗。

  嗯,看起来跟 FreeRTOS 的休眠机制都是差不多的。不过QuecPython多了个 wakelock,有上锁、释放的动作,而模组在有 wakelock 上锁的情况下,是不会进入休眠的。只有在 wakelock 数量为0,且满足以上进入低功耗条件时,EC600模组才会择机适时自动进入休眠。


测试脚本


  怎么样,经过上面一番说明,思路是不是比较清晰了。还不了解的话,直接上代码:

  代码中两个 utime.sleep(20),一个会自动进入休眠,另一个因唤醒锁没有释放故模组还处于运行中。

import pm
import utime
lpm_fd = pm.create_wakelock("test_lock", len("test_lock"))  # 创建wakelock锁
pm.autosleep(1)  # 设置自动休眠模式
# 模拟测试,实际开发请根据业务场景选择使用
# 【注意】运行此脚本后,请将USB线与模组断开连接,否则USB有通信时无法自动进入休眠状态
while 1:
    utime.sleep(20)  # 此时处于休眠状态
    # 有活动进程,不为空闲,模组被唤醒
    res = pm.wakelock_lock(lpm_fd)   #添加锁
    print("ql_lpm_idlelock_lock, g_c1_axi_fd = %d" %lpm_fd)
    print("unlock  sleep")
    utime.sleep(20) # 唤醒锁存在,即使进程无活动,但模组在此时间段内依旧在活动工作中
    res = pm.wakelock_unlock(lpm_fd)  #释放锁
    print(res)
    print("ql_lpm_idlelock_unlock, g_c1_axi_fd = %d" % lpm_fd)
    num = pm.get_wakelock_num()  # 获取已创建锁的数量
    print(num)

  调试步骤:

1. 将EC600模组重新烧录固件。
2. 下载 sleep_test.py 测试程序。运行代码。
3. 我测试的硬件供电电压为4.0V,外置一低Iq的DCDC,实际提供给模组的供电电压为3.6V。
4. 观察功耗分析仪,此时因为USB还在连接通信,故模组不能正常进入休眠。
5. 插接USB时,以10s为窗口观察,动态功耗约为 32.6mA。
6. 功耗比下面大那么多不知道为什么,明明已经把充电管理和电源自动切换给卸掉了。USB只做通信,已经不提供电源了。
7. 关闭QPYcom的端口,拔出USB线。
8. 活动功耗约为21.3mA(10s窗口期)
9. 休眠功耗约为2.2mA(10s窗口期)
10.4G模组的功耗与设备所处环境的信号质量有很大关系,以上仅做参考。
11. 模组为实现通信唤醒,休眠时自身的功耗波动很大,瞬间可达几百mA,脉动频率约为0.64/0.32s。
12. 因我的电路外围硬件设计的缘故,在模组不开机时,整体也会有62.5uA的功耗,这部分需要从上面扣除。
13. DCDC和充电管理的Iq测试为41uA,包含在62.5uA内。
14. DCDC有百分之个位数的转换损耗,也要扣除。所以以上结果只是粗略的值。

【注意】刚开机的几分钟内,功耗的波动比较大,脉动也会在这个时间段内,经常性的从平时的0.64s变为0.32s,这段时间内的功耗会比平时高1~2mA。


功耗分析仪测试


代码中的活动工作功耗:

代码中自动进入休眠的功耗:

以上是关于esp32低功耗远程唤醒的主要内容,如果未能解决你的问题,请参考以下文章

AS3933 推广 一款低功耗,高精度唤醒接收器,

STM32F103低功耗与IO唤醒

STM32F030低功耗

STM32L051低功耗STOP模式串口中断唤醒

待机唤醒实验

STM32中用 stop 模式 配合低功耗模式下的自动唤醒(AWU) 能否实现FreeRTOS tickless 模式