V1.5: 新增蓝牙发射功率宏BLE_TX_POWER(AT+RFPOWER 1~18级),功率值并入EEPROM缓存判断,改宏自动重设
This commit is contained in:
parent
7e427fbfc4
commit
3daf12e144
|
|
@ -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); /* 确保回到透传 */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -387,6 +387,7 @@ SmartConfig 测试流程:关掉固定热点 → 发 `RECOVERY` → 设备复
|
|||
|
||||
- **接线**:模块 UART0_TXD/RXD 接 USART1(PA10/PA9),PC5(功能键)接 **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+RFPOWER,1~18 级,出厂默认 8)——多台设备同场所时调小(如 1~3)缩短搜索距离避免认错;缓存同时记录功率值,改宏后下次开机自动重设一次
|
||||
- **零窗口设计**:配置成功后将名称缓存进 EEPROM(偏移 132),之后每次开机命中缓存就**完全跳过 AT 流程**——蓝牙 APP 不再断联,开机最早的重启原因/重启记录日志都能实时看到;只有代码里改了 `BLE_NAME`(main.h)才会自动重设一次
|
||||
- **手动重设**:蓝牙命令 `BLESET`(清缓存强制重跑)
|
||||
- **日志等级**:`LOG` 查询,`LOGTRACE~LOGFATAL` 六档切换,写 EEPROM(偏移 160)断电保持。档位即"输出阈值"——只打印该级及以上:
|
||||
|
|
|
|||
|
|
@ -170,3 +170,5 @@
|
|||
改为发布成功才置标志,失败下轮查询继续重试
|
||||
- 新增实时功率上报:标识符 power(单位 W,一位小数),与 energy 合并同一条报文
|
||||
(>10W 每 30s,否则首次+开关切换),平台物模型加 float 即可
|
||||
- 新增蓝牙发射功率配置:main.h 宏 BLE_TX_POWER(AT+RFPOWER 1~18 级,默认 8),
|
||||
功率值并入 EEPROM 缓存判断(偏移 158),改宏后下次开机自动重设一次
|
||||
|
|
|
|||
Loading…
Reference in New Issue