WifiManager - Объединить НЕБЛОКИРУЮЩИЙ портал И AddParameter

Я хочу настроить WifiManager и AddParameter темы MQTT и локального сервера на его ConfigPortal.

Кроме того, в случае отключения электроэнергии или любого другого, в случае потери Wi-Fi, продолжать работу в неблокирующем режиме.

Проблема в том, что при объединении обоих объектов в одном скетче я получаю некоторые ошибки.

Весь код ( обратите внимание на комментарии, отмеченные маркером[i] ):

#include <WiFiManager.h>
#define MQTT_SERVER "192.168.3.200"
WiFiManager wm;


void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);

  WiFiManagerParameter custom_mqtt_server("mqtt_server", "mqtt server", MQTT_SERVER, 40);
  WiFiManagerParameter custom_mqtt_user("mqtt_user", "mqtt user", "", 10);
  WiFiManagerParameter custom_mqtt_pwd("mqtt_pwd", "mqtt password", "", 10);
  WiFiManagerParameter custom_mqtt_topic("mqtt_topic", "mqtt topic", "", 10);
  WiFiManagerParameter custom_mqtt_group("mqtt_group", "mqtt group", "", 10);
  WiFiManagerParameter custom_mqtt_root("mqtt_root", "mqtt rootTopic", "", 10);
  wm.addParameter(&custom_mqtt_server);
  wm.addParameter(&custom_mqtt_user);
  wm.addParameter(&custom_mqtt_pwd);
  wm.addParameter(&custom_mqtt_topic);
  wm.addParameter(&custom_mqtt_group);
  wm.addParameter(&custom_mqtt_root);

  WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP
  //  wm.resetSettings();

  //  wm.setConfigPortalTimeout(180);
  // wm.setConfigPortalBlocking(false);  // <--- Marker [#1]

  //  if (!wm.autoConnect("AutoConnectAP")) {
  //    Serial.println("failed to connect and hit timeout");
  //    delay(3000);
  //    //reset and try again, or maybe put it to deep sleep
  //    ESP.restart();
  //    delay(5000);
  //  }

  bool res;
  res = wm.autoConnect("test123", "password"); // password protected ap
}

void loop() {
  // put your main code here, to run repeatedly:
  //  wm.process(); //<--- Marker [2]
  Serial.println("hi");
  delay(100);

}
  1. Когда маркер[1] и Маркер[2] закомментированы, ConfigPortal работает как ожидалось, и в заблокированном состоянии - это означает, что на последовательном мониторе нет hi's.

  2. Когда закомментирован только маркер[2], достигается ConfigPortal, в котором отсутствуют все поля AddParameter.

  3. Когда Маркер[1] и Маркер[2] не закомментированы, ConfigPortal теперь доступен, но не имеет неблокирующей функции...

  4. Какова цель wm.process() ?

Парень

, 👍0

Обсуждение

какие ошибки вы получаете?, @jsotola

@jsotola см. Внизу кода. Это уже отмечается, @Guy . D

Автоматическое подключение завершит работу портала, если Wi-Fi сможет подключиться. используйте " startConfigPortal`, чтобы позволить порталу работать. wm.процесс обрабатывает клиент запущенного веб-сервера wm. смотрите пример OnDemandNonBlocking в функции doWiFiManager, @Juraj

@Juraj - спасибо за разъяснение. Я видел использование wm.process() только в неблокирующем примере и, насколько я понимаю, используется только тогда, когда портал размещен, не подключенный к Wi - Fi ( что является традиционно блокирующим режимом ). Это правильно ?, @Guy . D

@Juraj Можете ли вы объяснить, что такое "startConfigPortal" и почему он не используется в соответствующем встроенном примере ?, @Guy . D


1 ответ


2

Функция автоматического подключения WiFiManger запускает конфигурационный веб-сервер (и точку доступа) только в том случае, если соединение с настроенной сетью Wi-Fi не установлено.

Если вы хотите запустить веб-сервер WiFiManger для перенастройки Wi-Fi или установки других параметров, вы можете запустить веб-сервер WM с помощью функции startConfigPortal.

AutoConnect и startConfigPortal по умолчанию блокируются. Библиотека имеет цикл внутри этой функции, который выполняется до тех пор, пока веб-сервер не будет остановлен вызовом действия [Exit] на веб-странице конфигурации или тайм-аут, установленный с помощью setConfigPortalTimeout, не будет достигнут после последнего контакта из браузера.

Чтобы запустить веб-сервер WM "параллельно" вашему скетчу, вы можете настроить его как неблокирующий с помощью setConfigPortalBlocking(false). Затем, чтобы разрешить WM-обработку веб-сервера, скетч должен периодически вызывать функцию wm.process().

В режиме not blocking действие [Exit] на странице configuration wen не останавливает веб-сервер. Сервер должен быть остановлен в коде.

Определения параметров должны быть глобальными в sketch, если вы хотите запустить WifiManager с параметрами вне setup(). Параметры, локальные в setup (), не существуют после завершения setup (). WifiManager обнаруживает это и не использует параметры.

Пример OnDemandWebPortal и пример OnDemandNonBlocking демонстрируют startConfigPortal в блокировании и неблокирующем использовании.

,

Если я не правильно объяснил - я рассматриваю 2 сценария: 1) при первой загрузке необходимо установить учетные данные ( включая`Дополнительные параметры") 2) После некоторого сбоя, при котором Wi-Fi по какой-то причине не найден, мне нужно, чтобы моя система продолжала работать ( за вычетом всех функций Wi-Fi + MQTT), в течение этого времени у меня есть доступ к "ConfigPortal" в течение некоторого времени ( 180 сек )., @Guy . D

@Guy.D, теперь у тебя есть понимание, как это сделать, @Juraj

пожалуйста, ознакомьтесь с моим ответом ниже, @Guy . D