dashboard: throttle lvgl label updates

This commit is contained in:
2026-06-09 22:18:53 -06:00
parent 9cd26cb463
commit c3b3001fdc
@@ -24,14 +24,25 @@ static lv_obj_t *touch_count_label = nullptr;
static uint32_t touch_count = 0; static uint32_t touch_count = 0;
static unsigned long last_wifi_attempt_ms = 0; static unsigned long last_wifi_attempt_ms = 0;
static unsigned long last_wifi_label_update_ms = 0;
static unsigned long last_status_poll_ms = 0; static unsigned long last_status_poll_ms = 0;
static void set_label_text(lv_obj_t *label, const String &text) static String last_wifi_label_text;
static String last_api_label_text;
static String last_status_label_text;
static void set_label_text_if_changed(lv_obj_t *label, String &last_text, const String &text)
{ {
if (label == nullptr) { if (label == nullptr) {
return; return;
} }
if (last_text == text) {
return;
}
last_text = text;
lvgl_port_lock(-1); lvgl_port_lock(-1);
lv_label_set_text(label, text.c_str()); lv_label_set_text(label, text.c_str());
lvgl_port_unlock(); lvgl_port_unlock();
@@ -70,7 +81,7 @@ static void connect_wifi_if_needed()
Serial.print("Connecting to Cargo ESP AP: "); Serial.print("Connecting to Cargo ESP AP: ");
Serial.println(CARGO_WIFI_SSID); Serial.println(CARGO_WIFI_SSID);
set_label_text(wifi_label, "WiFi: connecting..."); set_label_text_if_changed(wifi_label, last_wifi_label_text, "WiFi: connecting...");
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
WiFi.begin(CARGO_WIFI_SSID, CARGO_WIFI_PASSWORD); WiFi.begin(CARGO_WIFI_SSID, CARGO_WIFI_PASSWORD);
@@ -78,23 +89,29 @@ static void connect_wifi_if_needed()
static void update_wifi_label() static void update_wifi_label()
{ {
if (millis() - last_wifi_label_update_ms < 5000) {
return;
}
last_wifi_label_update_ms = millis();
if (WiFi.status() == WL_CONNECTED) { if (WiFi.status() == WL_CONNECTED) {
String text = "WiFi: connected\nIP: "; String text = "WiFi: connected\nIP: ";
text += WiFi.localIP().toString(); text += WiFi.localIP().toString();
text += "\nRSSI: "; text += "\nRSSI: ";
text += String(WiFi.RSSI()); text += String(WiFi.RSSI());
text += " dBm"; text += " dBm";
set_label_text(wifi_label, text); set_label_text_if_changed(wifi_label, last_wifi_label_text, text);
} else { } else {
set_label_text(wifi_label, "WiFi: not connected\nSSID: " + String(CARGO_WIFI_SSID)); set_label_text_if_changed(wifi_label, last_wifi_label_text, "WiFi: not connected\nSSID: " + String(CARGO_WIFI_SSID));
} }
} }
static void poll_status_api() static void poll_status_api()
{ {
if (WiFi.status() != WL_CONNECTED) { if (WiFi.status() != WL_CONNECTED) {
set_label_text(api_label, "API: waiting for WiFi"); set_label_text_if_changed(api_label, last_api_label_text, "API: waiting for WiFi");
set_label_text(status_label, "No API response yet."); set_label_text_if_changed(status_label, last_status_label_text, "No API response yet.");
return; return;
} }
@@ -107,7 +124,7 @@ static void poll_status_api()
Serial.print("GET "); Serial.print("GET ");
Serial.println(CARGO_API_STATUS_URL); Serial.println(CARGO_API_STATUS_URL);
set_label_text(api_label, "API: requesting /api/v1/status"); set_label_text_if_changed(api_label, last_api_label_text, "API: requesting /api/v1/status");
HTTPClient http; HTTPClient http;
http.begin(CARGO_API_STATUS_URL); http.begin(CARGO_API_STATUS_URL);
@@ -123,21 +140,21 @@ static void poll_status_api()
String api_text = "API: HTTP "; String api_text = "API: HTTP ";
api_text += String(code); api_text += String(code);
api_text += "\nGET /api/v1/status"; api_text += "\nGET /api/v1/status";
set_label_text(api_label, api_text); set_label_text_if_changed(api_label, last_api_label_text, api_text);
if (body.length() > 900) { if (body.length() > 900) {
body = body.substring(0, 900); body = body.substring(0, 900);
body += "\n...truncated..."; body += "\n...truncated...";
} }
set_label_text(status_label, body); set_label_text_if_changed(status_label, last_status_label_text, body);
} else { } else {
String error = "API request failed: "; String error = "API request failed: ";
error += http.errorToString(code); error += http.errorToString(code);
Serial.println(error); Serial.println(error);
set_label_text(api_label, error); set_label_text_if_changed(api_label, last_api_label_text, error);
set_label_text(status_label, "No valid response from Cargo ESP."); set_label_text_if_changed(status_label, last_status_label_text, "No valid response from Cargo ESP.");
} }
http.end(); http.end();