From 0cf47b6d572390faba52aa79842144f95f23004b Mon Sep 17 00:00:00 2001 From: helei Date: Sat, 15 Aug 2026 06:55:15 +0800 Subject: [PATCH] =?UTF-8?q?V1.5:=20=E7=94=B5=E8=83=BD=E5=BA=95=E6=95=B0?= =?UTF-8?q?=E9=A6=96=E6=AC=A1=E5=90=8C=E6=AD=A5=E8=A1=A5=E8=B6=B31.00kWh(?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E8=BF=87=E6=BB=A40=E5=80=BC);OLED=E8=81=94?= =?UTF-8?q?=E7=BD=91=E7=95=8C=E9=9D=A2R0=E6=94=B9=E7=BD=91=E7=BB=9C+?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E6=97=B6=E9=97=B4(=E5=A4=A9:=E6=97=B6:?= =?UTF-8?q?=E5=88=86),=E6=9C=AA=E8=81=94=E7=BD=91=E9=A6=96=E8=A1=8C?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=96=AD=E7=BD=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../STM32F103_App1/HardWare/HLW8032/hlw8032.c | 11 +++++++ .../HardWare/SYSINIT/app_loop.c | 33 +++++++++---------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/V1.5/STM32F103_App1/HardWare/HLW8032/hlw8032.c b/V1.5/STM32F103_App1/HardWare/HLW8032/hlw8032.c index 2cb34bc..bf1465a 100644 --- a/V1.5/STM32F103_App1/HardWare/HLW8032/hlw8032.c +++ b/V1.5/STM32F103_App1/HardWare/HLW8032/hlw8032.c @@ -107,6 +107,17 @@ static void hlw8032_parse(const uint8_t *f) if (!s_synced) { s_synced = 1; log_info("> 电能: HLW8032 在线, 功率参数=%lu", (unsigned long)s_power_par); + /* 电能底数:平台会过滤 0 值,首次(累计不足 1 度)把底数补足 1.00 kWh 并落盘。 + * 之后累计只会增加,此逻辑只生效一次 */ + { + uint64_t one_kwh = (uint64_t)(3.6e12 / + ((double)s_power_par * HLW_U_COEF * HLW_I_COEF)); + if (s_total_pulses < one_kwh) { + s_total_pulses = one_kwh; + hlw8032_save(); + log_info("> 电能: 底数已初始化为 1.00 kWh"); + } + } } s_last_frame_tick = HAL_GetTick(); } diff --git a/V1.5/STM32F103_App1/HardWare/SYSINIT/app_loop.c b/V1.5/STM32F103_App1/HardWare/SYSINIT/app_loop.c index c522f4c..1a91a86 100644 --- a/V1.5/STM32F103_App1/HardWare/SYSINIT/app_loop.c +++ b/V1.5/STM32F103_App1/HardWare/SYSINIT/app_loop.c @@ -210,40 +210,39 @@ static void oled_home_refresh(uint32_t up_ms) if (g_net_mqtt_ready) { /*---- 已联网界面 ----*/ + /* R0: 网络 + 运行时间(天:时:分) */ + uint32_t mins = up_ms / 60000u; + const char *nt = (NET_GetActiveBackend() == NET_BACKEND_WIFI) ? "WiFi" : "4G"; + snprintf(buf, sizeof(buf), "%s %02u:%02u:%02u", nt, + (unsigned)(mins / 1440u), + (unsigned)((mins % 1440u) / 60u), + (unsigned)(mins % 60u)); + oled_locate(0, 0); oled_xoff(xoff); oled_print_line(buf); + + /* R1/R2: 电能参数 */ if (hlw8032_online()) { snprintf(buf, sizeof(buf), "%.1fV %.2fA", (double)hlw8032_get_voltage_v(), (double)hlw8032_get_current_a()); - oled_locate(0, 0); oled_xoff(xoff); oled_print_line(buf); + oled_locate(1, 0); oled_xoff(xoff); oled_print_line(buf); snprintf(buf, sizeof(buf), "%.1fW %.2fkWh", (double)hlw8032_get_power_w(), (double)hlw8032_get_energy_kwh()); - oled_locate(1, 0); oled_xoff(xoff); oled_print_line(buf); + oled_locate(2, 0); oled_xoff(xoff); oled_print_line(buf); } else { - oled_locate(0, 0); oled_xoff(xoff); oled_print_line("计量芯片离线"); - oled_locate(1, 0); oled_xoff(xoff); oled_print_line(""); + oled_locate(1, 0); oled_xoff(xoff); oled_print_line("计量芯片离线"); + oled_locate(2, 0); oled_xoff(xoff); oled_print_line(""); } + /* R3: 开关状态 */ snprintf(buf, sizeof(buf), "开关:%s%s%s%s", MqttInfoStr.Relay_State[1] ? "开" : "关", MqttInfoStr.Relay_State[2] ? "开" : "关", MqttInfoStr.Relay_State[3] ? "开" : "关", MqttInfoStr.Relay_State[4] ? "开" : "关"); - oled_locate(2, 0); oled_xoff(xoff); oled_print_line(buf); - - /* 网络 + 运行时间:满 1 天显示 "1天02时",否则 "27:35" */ - uint32_t mins = up_ms / 60000u; - const char *nt = (NET_GetActiveBackend() == NET_BACKEND_WIFI) ? "WiFi" : "4G"; - if (mins >= 1440u) { - snprintf(buf, sizeof(buf), "%s已连接%u天%02u时", nt, - (unsigned)(mins / 1440u), (unsigned)((mins % 1440u) / 60u)); - } else { - snprintf(buf, sizeof(buf), "%s已连接%02u:%02u", nt, - (unsigned)(mins / 60u), (unsigned)(mins % 60u)); - } oled_locate(3, 0); oled_xoff(xoff); oled_print_line(buf); } else { /*---- 未联网界面:联网进度 ----*/ net_ui_phase_t ph = g_net_ui_phase; - oled_locate(0, 0); oled_xoff(xoff); oled_print_line(""); + oled_locate(0, 0); oled_xoff(xoff); oled_print_line("断网"); if (ph == NET_UI_WIFI_FIXED || ph == NET_UI_WIFI_SMART || NET_GetActiveBackend() == NET_BACKEND_WIFI) {