|
|
@@ -88,10 +88,11 @@ void Device_Info_Init_Fun() {
|
|
|
RingBuffer_Init(&deviceInfo.queueBLData);
|
|
|
RingBuffer_Init(&deviceInfo.queueLoraCommandData);
|
|
|
|
|
|
+ deviceInfo.sleepDelayDataDuration = 60;
|
|
|
deviceInfo.isOnline = FALSE;
|
|
|
deviceInfo.broadcast_type = BROADCAST_ALL;
|
|
|
- deviceInfo.loraDeviceAddress_H = 0xFE; //默认地址高位
|
|
|
- deviceInfo.loraDeviceAddress_L = 0xEF; //默认地址低位
|
|
|
+ deviceInfo.loraDeviceAddress_H = 0xFF; //默认地址高位
|
|
|
+ deviceInfo.loraDeviceAddress_L = 0xFF; //默认地址低位
|
|
|
deviceInfo.powerValue = 0;
|
|
|
deviceInfo.target_addr_H = 0xFF;
|
|
|
deviceInfo.target_addr_L = 0xFF;
|
|
|
@@ -203,13 +204,17 @@ int main(void)
|
|
|
E52_CtlPowerOn_Fun();
|
|
|
Device_Info_Init_Fun();
|
|
|
Flash_Read_LoraAddr(&deviceInfo.loraDeviceAddress_H, &deviceInfo.loraDeviceAddress_L);
|
|
|
- HAL_Delay(4000);
|
|
|
+ HAL_Delay(5000);
|
|
|
// 启动 USART2 DMA 接收
|
|
|
HAL_UART_Receive_DMA(&huart3, rx_buf_uart3, sizeof(rx_buf_uart3));
|
|
|
__HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
|
|
|
HAL_UART_Receive_DMA(&huart2, rx_buf_uart2_DMA, sizeof(rx_buf_uart2_DMA));
|
|
|
__HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);
|
|
|
|
|
|
+ //重启蓝牙
|
|
|
+ E104_BT5005A_WAKE_UP_Fun();
|
|
|
+ HAL_Delay(500);
|
|
|
+
|
|
|
// 判断是否第一次启动(没有配置地址)
|
|
|
if (deviceInfo.loraDeviceAddress_H == 0xFF || deviceInfo.loraDeviceAddress_L == 0xFF ||
|
|
|
deviceInfo.loraDeviceAddress_H == 0x00 || deviceInfo.loraDeviceAddress_L == 0x00) {
|
|
|
@@ -248,6 +253,7 @@ int main(void)
|
|
|
deviceInfo.loraDeviceAddress_H != 0x00 && deviceInfo.loraDeviceAddress_L != 0x00) {
|
|
|
printf("LoRa 地址配置完成: 0x%02X%02X\r\n",
|
|
|
deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
|
|
|
+ Flash_Write_LoraAddr(deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
@@ -276,7 +282,12 @@ int main(void)
|
|
|
} else {
|
|
|
printf("LoRa 地址已存在: 0x%02X%02X\r\n",
|
|
|
deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
|
|
|
- E52_Heartbeat_Fun();
|
|
|
+
|
|
|
+ const char *lora_msg4 = "AT+ROUTER_CLR=1"; //删除路由信息表
|
|
|
+ HAL_UART_Transmit(&huart2, (uint8_t *) lora_msg4, strlen(lora_msg4), HAL_MAX_DELAY);
|
|
|
+ HAL_Delay(500);
|
|
|
+
|
|
|
+ // E52_Heartbeat_Fun();
|
|
|
}
|
|
|
// srand(HAL_GetTick()); // 设置随机数种子
|
|
|
/* USER CODE END 2 */
|
|
|
@@ -285,7 +296,7 @@ int main(void)
|
|
|
/* USER CODE BEGIN WHILE */
|
|
|
|
|
|
// printf("设备地址:0x%02X%02X\n", deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
|
|
|
-
|
|
|
+ deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);//进入流程前,初始化状态
|
|
|
|
|
|
while (1) {
|
|
|
/* USER CODE END WHILE */
|
|
|
@@ -318,6 +329,7 @@ int main(void)
|
|
|
// 解析后台命令
|
|
|
if (GET_CMD(deviceInfo.commandFromCloud) == IDLE && GET_STEP(deviceInfo.commandFromCloud) == STEP_VERIFY) {
|
|
|
E52_Analyze_Data();
|
|
|
+ memset(rx_buf_uart2, 0, 25);//使用完毕,清除数据
|
|
|
}
|
|
|
|
|
|
// 03:请求蓝牙数据
|
|
|
@@ -371,8 +383,8 @@ int main(void)
|
|
|
switch (GET_STEP(deviceInfo.commandFromCloud)) {
|
|
|
case HEARTBEAT_SEND:
|
|
|
printf("心跳发送2\r\n");
|
|
|
- E52_Heartbeat_Fun();
|
|
|
- deviceInfo.commandFromCloud = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_COMPLETE);
|
|
|
+ E52_Heartbeat_Fun1();
|
|
|
+ deviceInfo.commandFromCloud = COMBINE_CMD_STEP(E52_HEARTBEAT, STEP_COMPLETE);
|
|
|
break;
|
|
|
case STEP_COMPLETE:
|
|
|
deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
@@ -408,7 +420,7 @@ int main(void)
|
|
|
break; //如果是单波,多播,配置目标地址
|
|
|
|
|
|
case STEP_COMPLETE:
|
|
|
- printf("心跳发送3\r\n");
|
|
|
+ // printf("心跳发送3\r\n");
|
|
|
// E52_Heartbeat_Fun(); //配置完成,发送心跳包会导致后台循环发布配置命令
|
|
|
deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
|
|
|
break;
|
|
|
@@ -419,12 +431,27 @@ int main(void)
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ // 05:睡眠时间
|
|
|
if (GET_CMD(deviceInfo.commandFromCloud) == E52_ENTER_SLEEP && deviceInfo.isOnline) {
|
|
|
- Enter_Sleep_ACK_Fun();
|
|
|
- HAL_Delay(2000);
|
|
|
+ // Enter_Sleep_ACK_Fun();
|
|
|
+ // HAL_Delay(2000);
|
|
|
E104_BT5005A_SLEEP_Fun();
|
|
|
- HAL_Delay(2000);
|
|
|
+ uint32_t sleepDelayTime = 0; // 当前等待时间(32位)
|
|
|
+ // deviceInfo.sleepDelayDataDuration 为总时间(32位)
|
|
|
+
|
|
|
+ while (sleepDelayTime < deviceInfo.sleepDelayDataDuration)
|
|
|
+ {
|
|
|
+ // 显示当前进度和总时间,使用%lu匹配32位无符号整数
|
|
|
+ printf("睡眠倒计时:%lu/%lu秒 [剩余%lu秒]\r\n",
|
|
|
+ sleepDelayTime,
|
|
|
+ deviceInfo.sleepDelayDataDuration,
|
|
|
+ deviceInfo.sleepDelayDataDuration - sleepDelayTime);
|
|
|
+ HAL_GPIO_TogglePin(PowerLED_GPIO_Port, PowerLED_Pin);
|
|
|
+ sleepDelayTime++;
|
|
|
+ HAL_Delay(1000);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
Set_Alarm_After(deviceInfo.rtc_wake_up_time);
|
|
|
}
|
|
|
}
|