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]
иМаркер[2]
закомментированы, ConfigPortal работает как ожидалось, и взаблокированном
состоянии - это означает, что на последовательном мониторе нет hi
's.Когда
закомментирован только маркер[2]
, достигается ConfigPortal, в котором отсутствуют всеполя AddParameter.
Когда
Маркер[1]
иМаркер[2]
не закомментированы, ConfigPortal теперь доступен, но не имеет неблокирующей функции...Какова цель
wm.process()
?
Парень
@Guy . D, 👍0
Обсуждение1 ответ
Функция автоматического
подключения 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
- Как подключиться к Arduino с помощью WiFi?
- ESP8266 не подключается к Wi-Fi
- В чем разница между вариантами RF (wifi, xbee, NRF24L01)
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
- WebSocketsServer.h: No such file or directory
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
какие ошибки вы получаете?, @jsotola
@jsotola см. Внизу кода. Это уже отмечается, @Guy . D
Автоматическое подключение завершит работу портала, если Wi-Fi сможет подключиться. используйте " startConfigPortal`, чтобы позволить порталу работать. wm.процесс обрабатывает клиент запущенного веб-сервера wm. смотрите пример OnDemandNonBlocking в функции doWiFiManager, @Juraj
@Juraj - спасибо за разъяснение. Я видел использование
wm.process()
только в неблокирующем примере и, насколько я понимаю, используется только тогда, когда портал размещен, не подключенный к Wi - Fi ( что является традиционно блокирующим режимом ). Это правильно ?, @Guy . D@Juraj Можете ли вы объяснить, что такое "startConfigPortal" и почему он не используется в соответствующем встроенном примере ?, @Guy . D