mirror of
https://github.com/gunner47/GyverLamp.git
synced 2025-08-07 09:00:30 +03:00
Исправлены ошибки назначения статического IP адреса; Добавлен набросок WiFiManager Captive Portal для ввода пользовательских параметров и настроек
This commit is contained in:
43
firmware/GyverLamp_v1.4/CaptivePortalManager.h
Normal file
43
firmware/GyverLamp_v1.4/CaptivePortalManager.h
Normal file
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
|
||||
#include <WiFiManager.h>
|
||||
|
||||
|
||||
class CaptivePortalManager
|
||||
{
|
||||
public:
|
||||
static bool captivePortalCalled;
|
||||
|
||||
CaptivePortalManager(WiFiManager *wifiManager);
|
||||
~CaptivePortalManager();
|
||||
static void captivePortalManagerCallback(WiFiManager *wifiManager);
|
||||
|
||||
private:
|
||||
WiFiManager *wifiManager = NULL;
|
||||
};
|
||||
|
||||
|
||||
CaptivePortalManager::CaptivePortalManager(WiFiManager *wifiManager)
|
||||
{
|
||||
this->wifiManager = wifiManager;
|
||||
|
||||
// добавление пользовательских параметров: id, placeholder, prompt/default value, length[, custom html]
|
||||
// ...
|
||||
|
||||
if (wifiManager != NULL)
|
||||
{
|
||||
wifiManager->setAPCallback(CaptivePortalManager::captivePortalManagerCallback);
|
||||
}
|
||||
}
|
||||
|
||||
CaptivePortalManager::~CaptivePortalManager()
|
||||
{
|
||||
this->wifiManager = NULL;
|
||||
}
|
||||
|
||||
void CaptivePortalManager::captivePortalManagerCallback(WiFiManager *wifiManager)
|
||||
{
|
||||
CaptivePortalManager::captivePortalCalled = true;
|
||||
// сохранение введённых значений пользовательских параметров
|
||||
// ...
|
||||
}
|
@@ -105,6 +105,12 @@
|
||||
- Добавлен эффект Белый огонь
|
||||
- Исправлена ошибка сброса сигнала на пине ALARM_PIN при отключении будильника вручную
|
||||
- Добавлена сигнализация (4 вспышки красным) при запросе вывода времени шестикратным кликом, если время не синхронизировано
|
||||
--- 04.11.2019
|
||||
- Исправлена ошибка невключения MOSFET'а матрицы при срабатывании "рассвета"
|
||||
- Исправлена ошибка невключения MOSFET'а матрицы при выводе времени и IP адреса
|
||||
--- 08.11.2019
|
||||
- Исправлены ошибки назначения статического IP адреса
|
||||
- Добавлен набросок WiFiManager Captive Portal для ввода пользовательских параметров и настроек
|
||||
*/
|
||||
|
||||
// Ссылка для менеджера плат:
|
||||
@@ -117,6 +123,7 @@
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ESP8266WebServer.h>
|
||||
#include <WiFiManager.h>
|
||||
#include "CaptivePortalManager.h"
|
||||
#include <WiFiUdp.h>
|
||||
#include <EEPROM.h>
|
||||
#include "Types.h"
|
||||
@@ -226,6 +233,8 @@ uint8_t FavoritesManager::UseSavedFavoritesRunning = 0;
|
||||
uint8_t FavoritesManager::FavoriteModes[MODE_AMOUNT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
uint32_t FavoritesManager::nextModeAt = 0UL;
|
||||
|
||||
bool CaptivePortalManager::captivePortalCalled = false;
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
@@ -302,6 +311,7 @@ void setup()
|
||||
// WI-FI
|
||||
wifiManager.setDebugOutput(WIFIMAN_DEBUG); // вывод отладочных сообщений
|
||||
// wifiManager.setMinimumSignalQuality(); // установка минимально приемлемого уровня сигнала WiFi сетей (8% по умолчанию)
|
||||
CaptivePortalManager *captivePortalManager = new CaptivePortalManager(&wifiManager);
|
||||
if (espMode == 0U) // режим WiFi точки доступа
|
||||
{
|
||||
// wifiManager.setConfigPortalBlocking(false);
|
||||
@@ -330,41 +340,71 @@ void setup()
|
||||
if (WiFi.SSID().length())
|
||||
{
|
||||
LOG.printf_P(PSTR("Подключение к WiFi сети: %s\n"), WiFi.SSID().c_str());
|
||||
|
||||
if (sizeof(STA_STATIC_IP)) // ВНИМАНИЕ: настраивать статический ip WiFi клиента можно только при уже сохранённых имени и пароле WiFi сети (иначе проявляется несовместимость библиотек WiFiManager и WiFi)
|
||||
{
|
||||
LOG.print(F("Сконфигурирован статический IP адрес: "));
|
||||
LOG.printf_P(PSTR("%u.%u.%u.%u\n"), STA_STATIC_IP[0], STA_STATIC_IP[1], STA_STATIC_IP[2], STA_STATIC_IP[3]);
|
||||
wifiManager.setSTAStaticIPConfig(
|
||||
IPAddress(STA_STATIC_IP[0], STA_STATIC_IP[1], STA_STATIC_IP[2], STA_STATIC_IP[3]),// статический IP адрес ESP в режиме WiFi клиента
|
||||
IPAddress(STA_STATIC_IP[0], STA_STATIC_IP[1], STA_STATIC_IP[2], 1), // первый доступный IP адрес сети (справедливо для 99,99% случаев; для сетей меньше чем на 255 адресов нужно вынести в константы)
|
||||
IPAddress(255, 255, 255, 0)); // маска подсети (справедливо для 99,99% случаев; для сетей меньше чем на 255 адресов нужно вынести в константы)
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG.println(F("WiFi сеть не определена, запуск WiFi точки доступа для настройки параметров подключения к WiFi сети..."));
|
||||
CaptivePortalManager::captivePortalCalled = true;
|
||||
wifiManager.setBreakAfterConfig(true); // перезагрузка после ввода и сохранения имени и пароля WiFi сети
|
||||
showWarning(CRGB::Yellow, 1000U, 500U); // мигание жёлтым цветом 0,5 секунды (1 раз) - нужно ввести параметры WiFi сети для подключения
|
||||
}
|
||||
|
||||
if (sizeof(STA_STATIC_IP))
|
||||
{
|
||||
LOG.print(F("Сконфигурирован статический IP адрес: "));
|
||||
LOG.printf_P(PSTR("%u.%u.%u.%u\n"), STA_STATIC_IP[0], STA_STATIC_IP[1], STA_STATIC_IP[2], STA_STATIC_IP[3]);
|
||||
wifiManager.setSTAStaticIPConfig(
|
||||
IPAddress(STA_STATIC_IP[0], STA_STATIC_IP[1], STA_STATIC_IP[2], STA_STATIC_IP[3]), // статический IP адрес ESP в режиме WiFi клиента
|
||||
IPAddress(STA_STATIC_IP[0], STA_STATIC_IP[1], STA_STATIC_IP[2], 1), // первый доступный IP адрес сети (справедливо для 99,99% случаев; для сетей меньше чем на 255 адресов нужно вынести в константы)
|
||||
IPAddress(255, 255, 255, 0)); // маска подсети (справедливо для 99,99% случаев; для сетей меньше чем на 255 адресов нужно вынести в константы)
|
||||
}
|
||||
|
||||
wifiManager.setConnectTimeout(ESP_CONN_TIMEOUT); // установка времени ожидания подключения к WiFi сети, затем старт WiFi точки доступа
|
||||
wifiManager.setConfigPortalTimeout(ESP_CONF_TIMEOUT); // установка времени работы WiFi точки доступа, затем перезагрузка; отключить watchdog?
|
||||
wifiManager.autoConnect(AP_NAME, AP_PASS); // пытаемся подключиться к сохранённой ранее WiFi сети; в случае ошибки, будет развёрнута WiFi точка доступа с указанными AP_NAME и паролем на время ESP_CONN_TIMEOUT секунд; http://AP_STATIC_IP:ESP_HTTP_PORT (обычно http://192.168.0.1:80) - страница для ввода SSID и пароля от WiFi сети роутера
|
||||
|
||||
if (WiFi.status() != WL_CONNECTED)
|
||||
delete captivePortalManager;
|
||||
captivePortalManager = NULL;
|
||||
|
||||
if (WiFi.status() != WL_CONNECTED) // подключение к WiFi не установлено
|
||||
{
|
||||
LOG.println(F("Время ожидания ввода SSID и пароля от WiFi сети или подключения к WiFi сети превышено\nЛампа будет перезагружена в режиме WiFi точки доступа!\n"));
|
||||
if (CaptivePortalManager::captivePortalCalled) // была показана страница настройки WiFi ...
|
||||
{
|
||||
if (millis() < (ESP_CONN_TIMEOUT + ESP_CONF_TIMEOUT) * 1000U) // пользователь ввёл некорректное имя WiFi сети и/или пароль или запрошенная WiFi сеть недоступна
|
||||
{
|
||||
LOG.println(F("Не удалось подключиться к WiFi сети\nУбедитесь в корректности имени WiFi сети и пароля\nРестарт для запроса нового имени WiFi сети и пароля...\n"));
|
||||
wifiManager.resetSettings();
|
||||
}
|
||||
else // пользователь не вводил имя WiFi сети и пароль
|
||||
{
|
||||
LOG.println(F("Время ожидания ввода SSID и пароля от WiFi сети или подключения к WiFi сети превышено\nЛампа будет перезагружена в режиме WiFi точки доступа!\n"));
|
||||
|
||||
espMode = (espMode == 0U) ? 1U : 0U;
|
||||
EepromManager::SaveEspMode(&espMode);
|
||||
espMode = (espMode == 0U) ? 1U : 0U;
|
||||
EepromManager::SaveEspMode(&espMode);
|
||||
|
||||
LOG.printf_P(PSTR("Рабочий режим лампы изменён и сохранён в энергонезависимую память\nНовый рабочий режим: ESP_MODE = %d, %s\nРестарт...\n"),
|
||||
espMode, espMode == 0U ? F("WiFi точка доступа") : F("WiFi клиент (подключение к роутеру)"));
|
||||
LOG.printf_P(PSTR("Рабочий режим лампы изменён и сохранён в энергонезависимую память\nНовый рабочий режим: ESP_MODE = %d, %s\nРестарт...\n"),
|
||||
espMode, espMode == 0U ? F("WiFi точка доступа") : F("WiFi клиент (подключение к роутеру)"));
|
||||
}
|
||||
}
|
||||
else // страница настройки WiFi не была показана, не удалось подключиться к ранее сохранённой WiFi сети (перенос в новую WiFi сеть)
|
||||
{
|
||||
LOG.println(F("Не удалось подключиться к WiFi сети\nВозможно, заданная WiFi сеть больше не доступна\nРестарт для запроса нового имени WiFi сети и пароля...\n"));
|
||||
wifiManager.resetSettings();
|
||||
}
|
||||
|
||||
showWarning(CRGB::Red, 1000U, 500U); // мигание красным цветом 0,5 секунды (1 раз) - ожидание ввода SSID'а и пароля WiFi сети прекращено, перезагрузка
|
||||
ESP.restart();
|
||||
}
|
||||
|
||||
if (CaptivePortalManager::captivePortalCalled && // первое подключение к WiFi сети после настройки параметров WiFi на странице настройки - нужна перезагрузка для применения статического IP
|
||||
sizeof(STA_STATIC_IP) &&
|
||||
WiFi.localIP() != IPAddress(STA_STATIC_IP[0], STA_STATIC_IP[1], STA_STATIC_IP[2], STA_STATIC_IP[3]))
|
||||
{
|
||||
LOG.println(F("Рестарт для применения заданного статического IP адреса..."));
|
||||
delay(100);
|
||||
ESP.restart();
|
||||
}
|
||||
|
||||
LOG.print(F("IP адрес: "));
|
||||
LOG.println(WiFi.localIP());
|
||||
}
|
||||
|
Reference in New Issue
Block a user