MQTT большая задержка между сообщениями

У меня есть тестовая конфигурация, которая состоит из raspberry pi 3 b +, имеет сервер mqtt, esp32 с некоторыми светодиодами и веб-страницу для их переключения (webpage и esp32 являются клиентами). Для esp32 я использую PubSubClient имеет библиотеку для связи. В основном, что происходит, когда я переключаю светодиод, я публикую тему "in1", на которую подписан esp32, читает его полезную нагрузку ("включено" или "выключено"), а затем публикует сообщение для броузера в соответствии с состоянием вывода для подтверждения. Имейте в виду, что все это происходит в локальной сети. После некоторых тестов я увидел, что это занимает макс. 10 мс для браузера, чтобы опубликовать сообщение. Однако полный цикл занимает от 20 до 100 мс с момента первого публикации сообщения до сообщения подтверждения (сообщение esp32 отправляет отчет о состоянии вывода). Я обнаружил, что это не имеет никакого отношения к коду, поскольку требуется 1 мс с момента, когда подписанная тема получает новое сообщение, пока esp32 не опубликует состояние вывода разработанного светодиода.

Raspberry Pi работает под управлением Mosquitto v 1.5.5 с включенными веб-сокетами. Не думаю, что это как-то связано с конфигурацией, поскольку то же самое происходит, когда я тестирую его с сервером Mosquitto, установленным на моем ноутбуке.

Все сообщения и подписки 0 кв.

Я просто думаю, что это смешное количество времени для общения в локальной сети, не говоря уже о том, что оно очень противоречиво (от 20 до 100 мс).

Очень благодарен за всю помощь.

2 ответа

Вопрос был решен. Все, что мне нужно было сделать, это отключить режим энергосбережения esp32 wifi

просто добавь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 .

Другие вопросы по тегам