diff --git a/V1.5/STM32F103_App1/HardWare/USER_CMD/ble_at.c b/V1.5/STM32F103_App1/HardWare/USER_CMD/ble_at.c index a19941d..6c4e55c 100644 --- a/V1.5/STM32F103_App1/HardWare/USER_CMD/ble_at.c +++ b/V1.5/STM32F103_App1/HardWare/USER_CMD/ble_at.c @@ -22,6 +22,7 @@ /* EEPROM 缓存区:已配置好的蓝牙名(132~157,26B,避开其它占用) */ #define BLE_CACHE_ADDR 132 +#define BLE_POWER_ADDR 158 /* EEPROM:已配置的发射功率(132~157 名称缓存, 160 日志等级) */ #define BLE_CACHE_LEN 26 /* PB0 开漏输出:释放时由模块 PC5 内部上拉保持高电平 */ @@ -87,12 +88,14 @@ void ble_setup_name(void) { char cmd[48]; - /* EEPROM 缓存命中则跳过整个 AT 流程(零窗口,蓝牙 APP 不断联) */ + /* EEPROM 缓存命中(名称+功率都对)则跳过整个 AT 流程(零窗口,蓝牙 APP 不断联) */ char cache[BLE_CACHE_LEN] = {0}; eepromReadData(BLE_CACHE_ADDR, cache, BLE_CACHE_LEN); cache[BLE_CACHE_LEN - 1] = 0; - if (strcmp(cache, BLE_NAME) == 0) { - log_info("> BLE: 配置已缓存(%s),跳过设置", BLE_NAME); + uint8_t pwr_cache = 0xFF; + eepromReadData(BLE_POWER_ADDR, &pwr_cache, 1); + if (strcmp(cache, BLE_NAME) == 0 && pwr_cache == BLE_TX_POWER) { + log_info("> BLE: 配置已缓存(%s/功率%d),跳过设置", BLE_NAME, BLE_TX_POWER); return; } @@ -111,12 +114,22 @@ void ble_setup_name(void) cur = USART1_GetCommand(); } - if (cur && strstr(cur, BLE_NAME)) { - /* 名称已正确:直接回透传,不动任何设置 */ + if (cur && strstr(cur, BLE_NAME) && pwr_cache == BLE_TX_POWER) { + /* 名称与功率都正确:直接回透传,不动任何设置 */ log_info("> BLE: 名称已是 %s,无需设置", BLE_NAME); ble_at_cmd("AT+TS=1", "OK", 1500); return; } + if (cur && strstr(cur, BLE_NAME)) { + /* 名称对但功率变了:只重设发射功率 */ + snprintf(cmd, sizeof(cmd), "AT+RFPOWER=%d", BLE_TX_POWER); + ble_at_cmd(cmd, "OK", 1500); + ble_at_cmd("AT+REBOOT=1", "OK", 1500); + uint8_t p = BLE_TX_POWER; + eepromWriteData(BLE_POWER_ADDR, &p, 1); + log_info("> BLE: 发射功率已设置为 %d", BLE_TX_POWER); + return; + } /* 需要设置:发 AT+NAME(最多重试 3 次)。 * 注意:本模块设置类参数重启后才生效,当场回查查到的仍是旧名, @@ -140,12 +153,20 @@ void ble_setup_name(void) #else log_info("> BLE: 名称已设置为 %s", BLE_NAME); #endif + /* 顺带设置发射功率 */ + snprintf(cmd, sizeof(cmd), "AT+RFPOWER=%d", BLE_TX_POWER); + ble_at_cmd(cmd, "OK", 1500); + /* 手册说明:设置类参数重启后才生效,重启模块使新名称生效; * 模块重启后默认就是透传模式,无需再发 AT+TS=1 */ for (int i = 0; i < 2; i++) { if (ble_at_cmd("AT+REBOOT=1", "OK", 1500) == 0) break; } eepromWriteData(BLE_CACHE_ADDR, (void *)BLE_NAME, strlen(BLE_NAME) + 1); + { + uint8_t p = BLE_TX_POWER; + eepromWriteData(BLE_POWER_ADDR, &p, 1); + } } else { log_warn("> BLE: 设置名称失败(模块未接或应答异常)"); ble_at_cmd("AT+TS=1", "OK", 1500); /* 确保回到透传 */ diff --git a/V1.5/STM32F103_App1/Inc/main.h b/V1.5/STM32F103_App1/Inc/main.h index 57d5f38..69694e5 100644 --- a/V1.5/STM32F103_App1/Inc/main.h +++ b/V1.5/STM32F103_App1/Inc/main.h @@ -31,7 +31,7 @@ extern UART_HandleTypeDef huart3; * 由平台侧自行计时控制 */ /*===== 固件版本号(开机横幅打印用,改版本只动这里) =====*/ -#define FIRMWARE_VERSION_STR "1.5.7" +#define FIRMWARE_VERSION_STR "1.5.8" #define PRODUCT_WITH_FEED_SCALE 1 /* 默认带秤(EEPROM 172 可改,蓝牙 SCALE0/1 切换) */ @@ -72,6 +72,11 @@ extern UART_HandleTypeDef huart3; * 多台设备现场用名字区分;手机列表大约只显示前 10 位 */ #define BLE_NAME "Bt1" +/*===== 蓝牙发射功率(AT+RFPOWER) ===== + * 1~18 共 18 级,出厂默认 8。多台设备同场所时调小(如 1~3), + * 缩短可搜索距离,避免互相认错设备。模块内保存,改宏后下次开机自动重设一次 */ +#define BLE_TX_POWER 8 + /*===== HLW8032 电量计量系数(UART5 PD2 接收,只上报累计电量) ===== * 电压通道: ZMPT107-1(2mA:2mA),初级 220V 串 100K,次级并 49.9R * -> 电压系数 = (100K/49.9)/1000 = 2.004 diff --git a/V1.5/STM32F103_App1/README.md b/V1.5/STM32F103_App1/README.md index c524263..265e87d 100644 --- a/V1.5/STM32F103_App1/README.md +++ b/V1.5/STM32F103_App1/README.md @@ -387,6 +387,7 @@ SmartConfig 娴嬭瘯娴佺▼锛氬叧鎺夊浐瀹氱儹鐐 鈫 鍙 `RECOVERY` 鈫 璁惧澶 - **鎺ョ嚎**锛氭ā鍧 UART0_TXD/RXD 鎺 USART1锛圥A10/PA9锛夛紝PC5锛堝姛鑳介敭锛夋帴 **PB0**锛堝紑婕忚緭鍑猴級 - **涓婄數鑷姩閰嶇疆**锛坄ble_at.c`锛夛細鎷変綆 PC5 1s 杩 AT 妯″紡 鈫 璁 `AT+NAME=` 鈫 璁 GATT UUID锛堥粯璁 `FFE0` 鏈嶅姟 + `FFE1` 鏀跺彂鍏辩敤鐗瑰緛锛孞DY-31/HM-10 鍚屾锛岄氱敤 BLE 涓插彛 APP 鍙繛锛夆啋 `AT+REBOOT` 鐢熸晥 +- **鍙戝皠鍔熺巼鍙皟**锛歚main.h` 鐨 `BLE_TX_POWER` 瀹忥紙AT+RFPOWER锛1~18 绾э紝鍑哄巶榛樿 8锛夆斺斿鍙拌澶囧悓鍦烘墍鏃惰皟灏忥紙濡 1~3锛夌缉鐭悳绱㈣窛绂婚伩鍏嶈閿欙紱缂撳瓨鍚屾椂璁板綍鍔熺巼鍊硷紝鏀瑰畯鍚庝笅娆″紑鏈鸿嚜鍔ㄩ噸璁句竴娆 - **闆剁獥鍙h璁**锛氶厤缃垚鍔熷悗灏嗗悕绉扮紦瀛樿繘 EEPROM锛堝亸绉 132锛夛紝涔嬪悗姣忔寮鏈哄懡涓紦瀛樺氨**瀹屽叏璺宠繃 AT 娴佺▼**鈥斺旇摑鐗 APP 涓嶅啀鏂仈锛屽紑鏈烘渶鏃╃殑閲嶅惎鍘熷洜/閲嶅惎璁板綍鏃ュ織閮借兘瀹炴椂鐪嬪埌锛涘彧鏈変唬鐮侀噷鏀逛簡 `BLE_NAME`锛坢ain.h锛夋墠浼氳嚜鍔ㄩ噸璁句竴娆 - **鎵嬪姩閲嶈**锛氳摑鐗欏懡浠 `BLESET`锛堟竻缂撳瓨寮哄埗閲嶈窇锛 - **鏃ュ織绛夌骇**锛歚LOG` 鏌ヨ锛宍LOGTRACE~LOGFATAL` 鍏。鍒囨崲锛屽啓 EEPROM锛堝亸绉 160锛夋柇鐢典繚鎸併傛。浣嶅嵆"杈撳嚭闃堝"鈥斺斿彧鎵撳嵃璇ョ骇鍙婁互涓婏細 diff --git a/V1.5/鐗堟湰璇存槑.md b/V1.5/鐗堟湰璇存槑.md index 5b31424..2ab0248 100644 --- a/V1.5/鐗堟湰璇存槑.md +++ b/V1.5/鐗堟湰璇存槑.md @@ -170,3 +170,5 @@ 鏀逛负鍙戝竷鎴愬姛鎵嶇疆鏍囧織锛屽け璐ヤ笅杞煡璇㈢户缁噸璇 - 鏂板瀹炴椂鍔熺巼涓婃姤锛氭爣璇嗙 power锛堝崟浣 W锛屼竴浣嶅皬鏁帮級锛屼笌 energy 鍚堝苟鍚屼竴鏉℃姤鏂 锛>10W 姣 30s锛屽惁鍒欓娆+寮鍏冲垏鎹級锛屽钩鍙扮墿妯″瀷鍔 float 鍗冲彲 +- 鏂板钃濈墮鍙戝皠鍔熺巼閰嶇疆锛歮ain.h 瀹 BLE_TX_POWER锛圓T+RFPOWER 1~18 绾э紝榛樿 8锛夛紝 + 鍔熺巼鍊煎苟鍏 EEPROM 缂撳瓨鍒ゆ柇锛堝亸绉 158锛夛紝鏀瑰畯鍚庝笅娆″紑鏈鸿嚜鍔ㄩ噸璁句竴娆