乐鑫技术交流
直播中

刘艳

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

如何使ESP运行TCP服务器能够实现低功耗/睡眠模式?

在搜索任何相关信息失败后,我需要寻求一些提示如何使 ESP 运行 TCP 服务器(从 espconn_regist_connectcb 开始)能够实现低功耗/睡眠模式。
如果我有一个无限循环,我知道如何让 ESP 进入睡眠状态,使用 wifi_fpm_do_sleep,但是我该如何使用 TCP 服务器呢?我没有任何循环可以放这个。
我想到的唯一想法是在请求处理结束时让 ESP 进入休眠状态,即像这样:
代码:全选// set up callback somewhere
    espconn_regist_disconcb(pespconn, shell_tcp_disconcb);

LOCAL void ICACHE_FLASH_ATTR
shell_tcp_disconcb(void *arg) {
    struct espconn *pespconn = (struct espconn *) arg;
    os_printf("tcp connection disconnected\n");
    // go to sleep mode here for some time
}


但是如果没有请求,我该如何恢复睡眠呢?我想我可以改为使用一些全局状态变量,并且在 main() 中只会有一个带有睡眠处理的虚拟循环——断开连接处理程序会将其设置为“你现在可以睡觉了”,而连接打开的处理程序将禁止睡眠. 但这是一个好的解决方案吗?库中不是已经有一些内置的方法了吗?我希望我正在尝试用这个发明一个轮子......
感谢您的任何回复。

回帖(1)

莫循虎

2024-5-27 17:49:30
实现低功耗/睡眠模式的关键是找到合适的时间将 ESP 进入睡眠状态。在 TCP 服务器中,您可以在以下几个地方实现:

1. 在处理请求结束后,使用 wifi_fpm_do_sleep 让 ESP 进入睡眠状态。这可以减少发送和接收数据的时间,从而降低功耗。

2. 使用ESP8266的 wifi_fpm_set_sleep_type 函数将 ESP 设置为自动睡眠模式。在这种模式下,ESP会根据设定的条件自动进入睡眠状态,并在需要时自动唤醒。您可以使用 wifi_fpm_set_sleep_type 设置您想要的超时值。

3. 在循环中添加wifi_fpm_do_sleep函数,这样可以使 ESP 在等待接受请求时进入睡眠状态,节省能量。

需要注意的是,您需要确定 ESP 进入睡眠状态的时间,以避免睡眠时间过长,造成请求超时或丢失。您还需要在 ESP 进入睡眠状态前正确保存和恢复所有状态和数据。
举报

更多回帖

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