From 7500acb041208dd0e3d5c5b49b6481b80e137851 Mon Sep 17 00:00:00 2001 From: helei Date: Sat, 15 Aug 2026 07:58:55 +0800 Subject: [PATCH] =?UTF-8?q?V1.5:=20=E7=94=B5=E8=83=BD=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E7=AD=96=E7=95=A5=E6=94=B9=E4=B8=BA=E5=8A=9F=E7=8E=87>10W?= =?UTF-8?q?=E6=AF=8F30s=E4=B8=80=E6=AC=A1,<=3D10W=E4=BB=85=E9=A6=96?= =?UTF-8?q?=E6=AC=A1=E8=81=94=E7=BD=91=E6=8A=A5=E4=B8=80=E6=AC=A1(?= =?UTF-8?q?=E5=BC=80=E5=85=B3=E5=88=87=E6=8D=A2=E9=9A=8F=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=A4=A7=E6=8A=A5=E6=96=87=E6=90=BA=E5=B8=A6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HardWare/SYSINIT/app_loop.c | 28 +++++++++++++++---- V1.5/STM32F103_App1/README.md | 2 +- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/V1.5/STM32F103_App1/HardWare/SYSINIT/app_loop.c b/V1.5/STM32F103_App1/HardWare/SYSINIT/app_loop.c index 50b20f3..6c87369 100644 --- a/V1.5/STM32F103_App1/HardWare/SYSINIT/app_loop.c +++ b/V1.5/STM32F103_App1/HardWare/SYSINIT/app_loop.c @@ -293,8 +293,10 @@ static void oled_home_refresh(uint32_t up_ms) } } -/* 电能日志/上报间隔:想改频率就改这个宏(单位 ms) */ -#define ENERGY_REPORT_INTERVAL_MS 10000u +/* 电能上报策略:功率 > 10W 时每 30s 上报一次;<=10W 仅首次联网报一次 + * (开关切换随状态大报文带 energy,无需单独发)。串口日志固定 10s 一条 */ +#define ENERGY_REPORT_INTERVAL_MS 30000u +#define ENERGY_REPORT_POWER_W 10.0f /*==== sys_task:系统辅助(LED/电量/蓝牙命令/运行时长)====*/ static void sys_task(void *arg) @@ -344,16 +346,30 @@ static void sys_task(void *arg) } } - /* 电能日志+上报:联网且计量芯片在线时每 ENERGY_REPORT_INTERVAL_MS 一条 */ + /* 电能:串口日志固定 10s 一条;上报按功率策略(>10W 每 30s,否则仅首次) */ if (g_net_mqtt_ready && hlw8032_online() && - (HAL_GetTick() - en_print) >= ENERGY_REPORT_INTERVAL_MS) { + (HAL_GetTick() - en_print) >= 10000u) { en_print = HAL_GetTick(); + static uint8_t energy_first_reported = 0; + static uint32_t energy_report_tick = 0; float kwh = hlw8032_get_energy_kwh(); - NET_publish_energy(kwh); + float pw = hlw8032_get_power_w(); + uint8_t report = 0; + if (!energy_first_reported) { + report = 1; + energy_first_reported = 1; + } else if (pw > ENERGY_REPORT_POWER_W && + (HAL_GetTick() - energy_report_tick) >= ENERGY_REPORT_INTERVAL_MS) { + report = 1; + } + if (report) { + energy_report_tick = HAL_GetTick(); + NET_publish_energy(kwh); + } log_info(FMT_ENERGY, (double)kwh, (double)hlw8032_get_voltage_v(), (double)hlw8032_get_current_a(), - (double)hlw8032_get_power_w()); + (double)pw); } vTaskDelay(20); diff --git a/V1.5/STM32F103_App1/README.md b/V1.5/STM32F103_App1/README.md index 2f3deb1..37c0922 100644 --- a/V1.5/STM32F103_App1/README.md +++ b/V1.5/STM32F103_App1/README.md @@ -115,7 +115,7 @@ - **鐢甸噺绠楁硶**锛堟墜鍐屽叕寮忥級锛歚kWh = 鎬昏剦鍐 脳 鍔熺巼鍙傛暟瀵勫瓨鍣 脳 鐢靛帇绯绘暟 脳 鐢垫祦绯绘暟 / (10^9脳3600)`锛汸F 瀵勫瓨鍣 16 浣嶆孩鍑虹敱鏁版嵁鏇存柊瀵勫瓨鍣 bit7 缈昏浆璁℃暟锛坄鎬昏剦鍐 = k脳65536 + PF`锛夛紝50ms 涓甯т笉鍙兘婕忕炕杞紱鑺墖鏂數閲嶅惎锛堣鏁板煎掗锛夎嚜鍔ㄩ噸鏂板熀鍑 - **绯绘暟瀹**锛歚main.h` 鐨 `HLW_U_COEF`锛=100K/49.9/1000=2.004锛夈乣HLW_I_COEF`锛=1/(0.002脳1000)=0.5锛夆斺旀敼鐢甸樆/浜掓劅鍣ㄥ彧鍔ㄨ繖涓や釜瀹 - **鎸佷箙鍖**锛氱疮璁¤剦鍐叉暟锛坲int64锛夊瓨 EEPROM 鍋忕Щ 164~171锛涙瘡鏀掔害 0.1kWh 鍐欎竴娆★紙闄愬埗鎿﹀啓锛夛紝鎵鏈夎鍒掑唴澶嶄綅锛坄reset_log_mark` 瑕嗙洊鐨勫浣嶇偣锛夊浣嶅墠鍐欎竴娆★紝鏂數棰勮锛堟硶鎷夌數瀹圭画鑸唴锛夊啀鍐欎竴娆♀斺旈櫎绐佺劧姝绘満澶栧熀鏈笉涓㈢數閲 -- **涓婃姤**锛歁QTT 灏辩华涓旇姱鐗囧湪绾匡紙1s 鍐呮湁鏈夋晥甯э級鏃讹紝姣忓垎閽熼殢杩愯蹇冭烦涓婃姤涓娆 `{"energy":%.2f}`锛涙湭鑱旂綉/鑺墖涓嶅湪绾夸笉涓婃姤 +- **涓婃姤绛栫暐**锛氬姛鐜 >10W 鏃舵瘡 30s 涓婃姤涓娆 `{"energy":%.2f}`锛涒墹10W 鏃朵粎棣栨鑱旂綉鎶ヤ竴娆★紙鐪佹祦閲忥級锛涚户鐢靛櫒寮鍏冲垏鎹㈤殢鐘舵佸ぇ鎶ユ枃鎼哄甫 energy銆備覆鍙g數鑳芥棩蹇楀浐瀹 10s 涓鏉°傞槇鍊煎畯 `ENERGY_REPORT_POWER_W`銆侀棿闅斿畯 `ENERGY_REPORT_INTERVAL_MS` 鍦 app_loop.c - **璋冭瘯鏃ュ織**锛氳姱鐗囧湪绾挎椂姣忓垎閽熸棩蹇楀悓鏃舵墦鍗扮數鍘/鐢垫祦/鍔熺巼锛坄杩愯鏃堕棿: ... 鐢佃兘: x.xxkWh 鐢靛帇: xxx.xV 鐢垫祦: x.xxA 鍔熺巼: xxxx.xW`锛 ## OLED 灞忓箷鏄剧ず锛128x64 + GB2312 瀛楀簱 IC锛