我有一个测试配置,它由一个带有 mqtt 服务器的 raspberry pi 3 b+、一个带有一些 led 的 esp32 和一个用于切换它们的网页组成(网页和 esp32 是客户端)。对于 esp32,我正在使用 PubSubClient 进行通信。基本上,当我切换 led 时,我发布 esp32 订阅的“in1”主题,读取其有效负载(“开”或“关”),然后根据输出状态向浏览器发布消息以进行确认。请记住,这一切都发生在本地网络中。经过一些测试,我发现浏览器发布一条消息最多需要 10 毫秒。但是,从第一条发布消息到确认消息(esp32 发送报告输出状态的消息),整个周期需要 20 到 100 毫秒。我发现这与代码无关,因为从订阅的主题收到新消息到 esp32 发布设计的 led 的输出状态需要 1ms。
Raspberry Pi 运行的是启用了 websockets 的 mosquitto v 1.5.5。不要以为这与配置有关,因为当我使用笔记本电脑中的 mosquitto 服务器进行测试时也发生了同样的情况。
所有消息和订阅都是0 qos。
我只是认为这对于本地网络中的通信来说是一个荒谬的时间量,更不用说它非常不一致(20 到 100 毫秒)。
非常感谢大家的帮助。
答案1
问题解决了。我所要做的就是禁用 esp32 wifi 省电模式
答案2
Esp_wifi_set_ps (WIFI_PS_NONE);
只需在调用之前 添加
WiFi.begin(WLAN_SSID, WLAN_PASS);
即可完全禁用调制解调器睡眠。
不要忘记#include "esp_wifi.h"
在草图的开头添加。
ESP32 默认使用esp_wifi_set_ps(WIFI_PS_MIN_MODEM)
模式(调制解调器睡眠最小省电模式),这会导致响应时间变慢。值得了解的是:还有esp_wifi_set_ps(WIFI_PS_MAX_MODEM)
针对电池优化应用程序的命令。请参阅:https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/wifi.html?highlight=wifi_mode_apsta#esp32-wi-fi-power-saving-mode