新增:添加 Wi-Fi 和 MQTT 连接状态变量,并更新 UI
- 引入了新的全局变量,用于跟踪 Wi-Fi 和 MQTT 连接状态。 - 实现了 Wi-Fi 和 MQTT 连接状态的 getter 和 setter 函数。 - 增加了管理网络信息和时间同步的功能。 - 更新了主应用程序逻辑,以反映 UI 中的当前连接状态。 - 改进了 Wi-Fi 连接处理,以定期发布网络信息。 -土壤湿度和空气温度的综合阈值变量被整合到 UI 中。
This commit is contained in:
@@ -32,6 +32,9 @@
|
||||
#define WIFI_CONNECT_NVS_KEY_PASS "pass"
|
||||
|
||||
#define WIFI_CONNECT_HTTP_BUF_SIZE 256
|
||||
#define WIFI_CONNECT_NETINFO_UPDATE_MS 15000
|
||||
|
||||
#define WIFI_CONNECT_NETINFO_DEFAULT_RSSI_DBM (-127)
|
||||
|
||||
#ifndef CONFIG_WIFI_CONNECT_BUTTON_STARTUP_GUARD_MS
|
||||
#define CONFIG_WIFI_CONNECT_BUTTON_STARTUP_GUARD_MS 5000
|
||||
@@ -43,6 +46,8 @@
|
||||
|
||||
static const char *TAG = "wifi_connect";
|
||||
|
||||
extern void set_var_iot_net_info(const char *value) __attribute__((weak));
|
||||
|
||||
static inline bool wifi_connect_is_always_on_mode(void)
|
||||
{
|
||||
#if CONFIG_WIFI_CONNECT_PROVISION_MODE_ALWAYS_ON
|
||||
@@ -106,6 +111,7 @@ typedef struct {
|
||||
|
||||
TaskHandle_t button_task;
|
||||
TaskHandle_t dns_task;
|
||||
TaskHandle_t net_info_task;
|
||||
|
||||
SemaphoreHandle_t lock;
|
||||
|
||||
@@ -127,6 +133,84 @@ static wifi_connect_ctx_t s_ctx = {
|
||||
.dns_sock = -1,
|
||||
};
|
||||
|
||||
static void wifi_connect_publish_iot_net_info(const char *info)
|
||||
{
|
||||
if (set_var_iot_net_info != NULL) {
|
||||
set_var_iot_net_info(info);
|
||||
}
|
||||
}
|
||||
|
||||
static void wifi_connect_publish_net_info_disconnected(void)
|
||||
{
|
||||
char info[96] = {0};
|
||||
snprintf(info,
|
||||
sizeof(info),
|
||||
"RSSI:%ddBm IP:0.0.0.0",
|
||||
WIFI_CONNECT_NETINFO_DEFAULT_RSSI_DBM);
|
||||
wifi_connect_publish_iot_net_info(info);
|
||||
}
|
||||
|
||||
static void wifi_connect_net_info_task(void *arg)
|
||||
{
|
||||
(void)arg;
|
||||
|
||||
for (;;) {
|
||||
bool connected = false;
|
||||
xSemaphoreTake(s_ctx.lock, portMAX_DELAY);
|
||||
connected = s_ctx.sta_connected;
|
||||
xSemaphoreGive(s_ctx.lock);
|
||||
|
||||
if (!connected) {
|
||||
wifi_connect_publish_net_info_disconnected();
|
||||
vTaskDelay(pdMS_TO_TICKS(WIFI_CONNECT_NETINFO_UPDATE_MS));
|
||||
continue;
|
||||
}
|
||||
|
||||
int8_t rssi_dbm = 0;
|
||||
bool has_rssi = false;
|
||||
wifi_ap_record_t ap_info = {0};
|
||||
if (esp_wifi_sta_get_ap_info(&ap_info) == ESP_OK) {
|
||||
rssi_dbm = ap_info.rssi;
|
||||
has_rssi = true;
|
||||
}
|
||||
|
||||
esp_netif_ip_info_t ip_info = {0};
|
||||
bool has_ip = (esp_netif_get_ip_info(s_ctx.sta_netif, &ip_info) == ESP_OK) && (ip_info.ip.addr != 0);
|
||||
|
||||
char info[96] = {0};
|
||||
if (has_rssi) {
|
||||
if (has_ip) {
|
||||
snprintf(info,
|
||||
sizeof(info),
|
||||
"RSSI:%ddBm IP:" IPSTR,
|
||||
rssi_dbm,
|
||||
IP2STR(&ip_info.ip));
|
||||
} else {
|
||||
snprintf(info,
|
||||
sizeof(info),
|
||||
"RSSI:%ddBm IP:0.0.0.0",
|
||||
rssi_dbm);
|
||||
}
|
||||
} else {
|
||||
if (has_ip) {
|
||||
snprintf(info,
|
||||
sizeof(info),
|
||||
"RSSI:%ddBm IP:" IPSTR,
|
||||
WIFI_CONNECT_NETINFO_DEFAULT_RSSI_DBM,
|
||||
IP2STR(&ip_info.ip));
|
||||
} else {
|
||||
snprintf(info,
|
||||
sizeof(info),
|
||||
"RSSI:%ddBm IP:0.0.0.0",
|
||||
WIFI_CONNECT_NETINFO_DEFAULT_RSSI_DBM);
|
||||
}
|
||||
}
|
||||
|
||||
wifi_connect_publish_iot_net_info(info);
|
||||
vTaskDelay(pdMS_TO_TICKS(WIFI_CONNECT_NETINFO_UPDATE_MS));
|
||||
}
|
||||
}
|
||||
|
||||
// 配网页面(内嵌 HTML + JS)
|
||||
static const char *s_html_page =
|
||||
"<!doctype html><html><head><meta charset='utf-8'/>"
|
||||
@@ -987,6 +1071,7 @@ static void wifi_connect_event_handler(void *arg, esp_event_base_t event_base, i
|
||||
esp_timer_stop(s_ctx.connect_timer);
|
||||
}
|
||||
xSemaphoreGive(s_ctx.lock);
|
||||
wifi_connect_publish_net_info_disconnected();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1233,6 +1318,10 @@ esp_err_t wifi_connect_init(void)
|
||||
}
|
||||
|
||||
s_ctx.initialized = true;
|
||||
wifi_connect_publish_net_info_disconnected();
|
||||
|
||||
BaseType_t net_info_ok = xTaskCreate(wifi_connect_net_info_task, "wifi_net_info", 4096, NULL, 3, &s_ctx.net_info_task);
|
||||
ESP_RETURN_ON_FALSE(net_info_ok == pdPASS, ESP_ERR_NO_MEM, TAG, "net info task create failed");
|
||||
|
||||
if (wifi_connect_is_always_on_mode()) {
|
||||
wifi_connect_log_state_i("配网模式", "常驻配网(上电自动开启且不会自动关闭)");
|
||||
|
||||
Reference in New Issue
Block a user