V1.5: 新增蓝牙发射功率宏BLE_TX_POWER(AT+RFPOWER 1~18级),功率值并入EEPROM缓存判断,改宏自动重设

This commit is contained in:
helei 2026-08-20 09:57:02 +08:00
parent 7e427fbfc4
commit 3daf12e144
4 changed files with 35 additions and 6 deletions

View File

@ -22,6 +22,7 @@
/* EEPROM 缓存区已配置好的蓝牙名132~15726B避开其它占用 */
#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); /* 确保回到透传 */

View File

@ -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

View File

@ -387,6 +387,7 @@ SmartConfig 测试流程:关掉固定热点 → 发 `RECOVERY` → 设备复
- **接线**:模块 UART0_TXD/RXD 接 USART1PA10/PA9PC5功能键**PB0**(开漏输出)
- **上电自动配置**`ble_at.c`):拉低 PC5 1s 进 AT 模式 → 设 `AT+NAME=<BLE_NAME>` → 设 GATT UUID默认 `FFE0` 服务 + `FFE1` 收发共用特征JDY-31/HM-10 同款,通用 BLE 串口 APP 可连)→ `AT+REBOOT` 生效
- **发射功率可调**`main.h` 的 `BLE_TX_POWER`AT+RFPOWER1~18 级,出厂默认 8——多台设备同场所时调小如 1~3缩短搜索距离避免认错缓存同时记录功率值改宏后下次开机自动重设一次
- **零窗口设计**:配置成功后将名称缓存进 EEPROM偏移 132之后每次开机命中缓存就**完全跳过 AT 流程**——蓝牙 APP 不再断联,开机最早的重启原因/重启记录日志都能实时看到;只有代码里改了 `BLE_NAME`main.h才会自动重设一次
- **手动重设**:蓝牙命令 `BLESET`(清缓存强制重跑)
- **日志等级**`LOG` 查询,`LOGTRACE~LOGFATAL` 六档切换,写 EEPROM偏移 160断电保持。档位即"输出阈值"——只打印该级及以上:

View File

@ -170,3 +170,5 @@
改为发布成功才置标志,失败下轮查询继续重试
- 新增实时功率上报:标识符 power单位 W一位小数与 energy 合并同一条报文
>10W 每 30s否则首次+开关切换),平台物模型加 float 即可
- 新增蓝牙发射功率配置main.h 宏 BLE_TX_POWERAT+RFPOWER 1~18 级,默认 8
功率值并入 EEPROM 缓存判断(偏移 158改宏后下次开机自动重设一次