static wifi config & wifi-reconnect

This commit is contained in:
2026-06-03 23:22:34 +03:00
parent 691fc3318e
commit d3ced437ec
2 changed files with 87 additions and 1 deletions
+77 -1
View File
@@ -128,6 +128,11 @@ void mqttTask(void *)
{ {
while (!mqtt.connected()) while (!mqtt.connected())
{ {
if (WiFi.status() != WL_CONNECTED)
{
vTaskDelay(pdMS_TO_TICKS(1000));
continue;
}
// Serial.printf("MQTT Disconnected. Connecting to %s:%d\n", config.mqtt.host.c_str(), config.mqtt.port); // Serial.printf("MQTT Disconnected. Connecting to %s:%d\n", config.mqtt.host.c_str(), config.mqtt.port);
if (mqtt.connect(config.dev_name.c_str(), config.mqtt.username.c_str(), config.mqtt.password.c_str())) if (mqtt.connect(config.dev_name.c_str(), config.mqtt.username.c_str(), config.mqtt.password.c_str()))
Serial.println("MQTT connected."); Serial.println("MQTT connected.");
@@ -253,6 +258,9 @@ void saveConfig()
prefs.putString(WIFI_SSID_CONFIG_KEY, config.wifi.ssid); prefs.putString(WIFI_SSID_CONFIG_KEY, config.wifi.ssid);
prefs.putString(WIFI_PASS_CONFIG_KEY, config.wifi.password); prefs.putString(WIFI_PASS_CONFIG_KEY, config.wifi.password);
prefs.putString(WIFI_IP_CONFIG_KEY, config.wifi.ip);
prefs.putString(WIFI_GW_CONFIG_KEY, config.wifi.gateway);
prefs.putString(WIFI_SUBNET_CONFIG_KEY, config.wifi.subnet);
prefs.putString(DEV_NAME_CONFIG_KEY, config.dev_name); prefs.putString(DEV_NAME_CONFIG_KEY, config.dev_name);
prefs.putString(TAG_NAME_CONFIG_KEY, config.tag_name); prefs.putString(TAG_NAME_CONFIG_KEY, config.tag_name);
@@ -280,6 +288,9 @@ void loadConfig()
config.wifi.ssid = prefs.getString(WIFI_SSID_CONFIG_KEY, WIFI_SSID); config.wifi.ssid = prefs.getString(WIFI_SSID_CONFIG_KEY, WIFI_SSID);
config.wifi.password = prefs.getString(WIFI_PASS_CONFIG_KEY, WIFI_PASS); config.wifi.password = prefs.getString(WIFI_PASS_CONFIG_KEY, WIFI_PASS);
config.wifi.ip = prefs.getString(WIFI_IP_CONFIG_KEY, WIFI_IP);
config.wifi.gateway = prefs.getString(WIFI_GW_CONFIG_KEY, WIFI_GW);
config.wifi.subnet = prefs.getString(WIFI_SUBNET_CONFIG_KEY, WIFI_SUBNET);
config.dev_name = prefs.getString(DEV_NAME_CONFIG_KEY, DEV_NAME); config.dev_name = prefs.getString(DEV_NAME_CONFIG_KEY, DEV_NAME);
config.tag_name = prefs.getString(TAG_NAME_CONFIG_KEY, TAG_NAME); config.tag_name = prefs.getString(TAG_NAME_CONFIG_KEY, TAG_NAME);
@@ -324,6 +335,12 @@ void handleCommand(String line)
config.wifi.ssid = value; config.wifi.ssid = value;
else if (key == WIFI_PASS_CONFIG_KEY) else if (key == WIFI_PASS_CONFIG_KEY)
config.wifi.password = value; config.wifi.password = value;
else if (key == WIFI_IP_CONFIG_KEY)
config.wifi.ip = value;
else if (key == WIFI_GW_CONFIG_KEY)
config.wifi.gateway = value;
else if (key == WIFI_SUBNET_CONFIG_KEY)
config.wifi.subnet = value;
else if (key == DEV_NAME_CONFIG_KEY) else if (key == DEV_NAME_CONFIG_KEY)
config.dev_name = value; config.dev_name = value;
else if (key == TAG_NAME_CONFIG_KEY) else if (key == TAG_NAME_CONFIG_KEY)
@@ -364,6 +381,12 @@ void handleCommand(String line)
Serial.println(config.wifi.ssid); Serial.println(config.wifi.ssid);
else if (key == WIFI_PASS_CONFIG_KEY) else if (key == WIFI_PASS_CONFIG_KEY)
Serial.println(config.wifi.password); Serial.println(config.wifi.password);
else if (key == WIFI_IP_CONFIG_KEY)
Serial.println(config.wifi.ip);
else if (key == WIFI_GW_CONFIG_KEY)
Serial.println(config.wifi.gateway);
else if (key == WIFI_SUBNET_CONFIG_KEY)
Serial.println(config.wifi.subnet);
else if (key == DEV_NAME_CONFIG_KEY) else if (key == DEV_NAME_CONFIG_KEY)
Serial.println(config.dev_name); Serial.println(config.dev_name);
else if (key == TAG_NAME_CONFIG_KEY) else if (key == TAG_NAME_CONFIG_KEY)
@@ -402,6 +425,9 @@ void handleCommand(String line)
Serial.println(" mq.topic"); Serial.println(" mq.topic");
Serial.println(" wf.ssid"); Serial.println(" wf.ssid");
Serial.println(" wf.pass"); Serial.println(" wf.pass");
Serial.println(" wf.ip");
Serial.println(" wf.gw");
Serial.println(" wf.subnet");
Serial.println(" dev.name"); Serial.println(" dev.name");
Serial.println(" tag.name"); Serial.println(" tag.name");
Serial.println(" save - Save configuration to non-volatile storage"); Serial.println(" save - Save configuration to non-volatile storage");
@@ -411,13 +437,47 @@ void handleCommand(String line)
} }
} }
void wifiBegin()
{
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
IPAddress local_ip, gateway, subnet;
local_ip.fromString(config.wifi.ip);
if (local_ip != IPAddress(0, 0, 0, 0))
{
gateway.fromString(config.wifi.gateway);
subnet.fromString(config.wifi.subnet);
WiFi.config(local_ip, gateway, subnet);
}
WiFi.begin(config.wifi.ssid.c_str(), config.wifi.password.c_str());
}
void setup() void setup()
{ {
Serial.begin(115200); Serial.begin(115200);
loadConfig(); loadConfig();
WiFi.begin(config.wifi.ssid.c_str(), config.wifi.password.c_str()); WiFi.onEvent([](WiFiEvent_t event, WiFiEventInfo_t info)
{
switch (event)
{
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
Serial.println("WiFi connected.");
break;
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
Serial.printf("IP: %s\n", WiFi.localIP().toString().c_str());
break;
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
Serial.printf("WiFi disconnected, reason: %d\n", info.wifi_sta_disconnected.reason);
break;
} });
wifiBegin();
MQTT_PUB_TOPIC = config.mqtt.topic + config.dev_name; MQTT_PUB_TOPIC = config.mqtt.topic + config.dev_name;
@@ -448,6 +508,22 @@ void setup()
void loop() void loop()
{ {
BleEvent ev; BleEvent ev;
static uint32_t last_wifi_check = 0;
if (millis() - last_wifi_check >= WIFI_TEST_INTERVAL)
{
last_wifi_check = millis();
wl_status_t status = WiFi.status();
if (status == WL_CONNECT_FAILED || status == WL_NO_SSID_AVAIL)
{
Serial.printf("WiFi failed (status %d), retrying...\n", status);
WiFi.disconnect();
delay(100);
wifiBegin();
}
}
while (xQueueReceive(ble_queue, &ev, 0)) while (xQueueReceive(ble_queue, &ev, 0))
processEvent(ev); processEvent(ev);
+10
View File
@@ -18,6 +18,9 @@
#define MQTT_TOPIC_CONFIG_KEY "mq.topic" #define MQTT_TOPIC_CONFIG_KEY "mq.topic"
#define WIFI_SSID_CONFIG_KEY "wf.ssid" #define WIFI_SSID_CONFIG_KEY "wf.ssid"
#define WIFI_PASS_CONFIG_KEY "wf.pass" #define WIFI_PASS_CONFIG_KEY "wf.pass"
#define WIFI_IP_CONFIG_KEY "wf.ip"
#define WIFI_GW_CONFIG_KEY "wf.gw"
#define WIFI_SUBNET_CONFIG_KEY "wf.subnet"
#define DEV_NAME_CONFIG_KEY "dev.name" #define DEV_NAME_CONFIG_KEY "dev.name"
#define TAG_NAME_CONFIG_KEY "tag.name" #define TAG_NAME_CONFIG_KEY "tag.name"
@@ -35,7 +38,11 @@
#define MQTT_TOPIC "scanners/" #define MQTT_TOPIC "scanners/"
#define WIFI_SSID "COSMOTE-489882" #define WIFI_SSID "COSMOTE-489882"
#define WIFI_PASS "x32hbh54673ngccdsfa9" #define WIFI_PASS "x32hbh54673ngccdsfa9"
#define WIFI_IP "0.0.0.0"
#define WIFI_GW "0.0.0.0"
#define WIFI_SUBNET "255.255.255.0"
#define DEV_NAME "572b29cb-6a93-480e-adf0-c5c44e9a58df" #define DEV_NAME "572b29cb-6a93-480e-adf0-c5c44e9a58df"
#define WIFI_TEST_INTERVAL 5 * 1000 // ms
struct Config struct Config
{ {
@@ -66,6 +73,9 @@ struct Config
{ {
String ssid; String ssid;
String password; String password;
String ip;
String gateway;
String subnet;
} wifi; } wifi;
String dev_name; String dev_name;