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) {