Sfoglia il codice sorgente

实现被动发点卯数据

xuxinyi 2 mesi fa
parent
commit
f753f517f5
4 ha cambiato i file con 61 aggiunte e 6 eliminazioni
  1. 4 0
      Core/Inc/E52.h
  2. 22 6
      Core/Src/E52.c
  3. 21 0
      Core/Src/main.c
  4. 14 0
      README.md

+ 4 - 0
Core/Inc/E52.h

@@ -55,6 +55,10 @@ typedef enum {
     CONFIGURE_E52_STEP2 = 0x02 << 4   // 还没想好
 } CONFIGURE_E52_STEP;
 
+typedef enum {
+    HEARTBEAT_SEND = 0x02 << 4,  //发送心跳包
+} HEARTBEAT_E52_STEP;
+
 
 
 

+ 22 - 6
Core/Src/E52.c

@@ -11,7 +11,7 @@ Device_structure deviceInfo;
  * 帧头:55 AA
  */
 void E52_Heartbeat_Fun() {
-    printf("这是心跳包");
+    printf("这是心跳包\r\n");
     Heartbeat_structure heartbeat_structure;
 
     heartbeat_structure.frame_header_H = 0x55;
@@ -32,7 +32,7 @@ void E52_Heartbeat_Fun() {
 }
 
 void E52_Send_Bl_Data_Fun(uint8_t i) {
-    printf("这是发送蓝牙数据");
+    printf("这是发送蓝牙数据\r\n");
     SendBlData_structure sendBlData_structure;
     sendBlData_structure.frame_header_H = 0x55;
     sendBlData_structure.frame_header_L = 0xAA;
@@ -43,7 +43,7 @@ void E52_Send_Bl_Data_Fun(uint8_t i) {
     sendBlData_structure.finish_send = 0x01;
     sendBlData_structure.frame_tail_H = 0xFF;
     sendBlData_structure.frame_tail_L = 0xEE;
-    printf("blData size = %d\n", sizeof(sendBlData_structure));
+    // printf("blData size = %d\n", sizeof(sendBlData_structure));
 
 
     deviceInfo.loraSendSuccessFlag = 1;
@@ -52,7 +52,7 @@ void E52_Send_Bl_Data_Fun(uint8_t i) {
 }
 
 void E52_Send_SOS_Fun() {
-    printf("这是发送SOS数据");
+    printf("这是发送SOS数据\r\n");
     SendSOS_structure SendSOS_structure;
     SendSOS_structure.frame_header_H = 0x55;
     SendSOS_structure.frame_header_L = 0xAA;
@@ -63,7 +63,7 @@ void E52_Send_SOS_Fun() {
     SendSOS_structure.finish_send = 0x01;
     SendSOS_structure.frame_tail_H = 0xFF;
     SendSOS_structure.frame_tail_L = 0xEE;
-    printf("blData size = %d\n", sizeof(SendSOS_structure));
+    // printf("blData size = %d\n", sizeof(SendSOS_structure));
     HAL_UART_Transmit(&huart2, (uint8_t *)&SendSOS_structure, sizeof(SendSOS_structure), HAL_MAX_DELAY);
     // TODO: command:04
 }
@@ -100,6 +100,22 @@ void E52_Send_Sleep_Fun() {
 
 void E52_Heartbeat_Fun1() {
     printf("这是让设备重新发送点卯命令\r\n");
+    Heartbeat_structure heartbeat_structure;
+
+    heartbeat_structure.frame_header_H = 0x55;
+    heartbeat_structure.frame_header_L = 0xAA;
+    heartbeat_structure.function_code = 0x01;
+    heartbeat_structure.badge_addr_high = deviceInfo.loraDeviceAddress_H;
+    heartbeat_structure.badge_addr_low = deviceInfo.loraDeviceAddress_L;
+    heartbeat_structure.broadcast_type = deviceInfo.broadcast_type;
+    heartbeat_structure.target_addr_H = deviceInfo.target_addr_H;
+    heartbeat_structure.target_addr_L = deviceInfo.target_addr_L;
+    heartbeat_structure.frame_tail_H = 0xFF;
+    heartbeat_structure.frame_tail_L = 0xEE;
+
+    // printf("heartbeat size = %d\n", sizeof(heartbeat_structure));
+
+    HAL_UART_Transmit(&huart2, (uint8_t *)&heartbeat_structure, sizeof(heartbeat_structure), HAL_MAX_DELAY);
     // TODO: command:08
 }
 
@@ -121,7 +137,7 @@ void E52_Analyze_Data() {
                 E52_Send_Sleep_Fun();
                 break;
             case E52_HEARTBEAT:
-                // deviceInfo.commandFromCloud = COMBINE_CMD_STEP(E52_HEARTBEAT, STEP_EXECUTE);
+                deviceInfo.commandFromCloud = COMBINE_CMD_STEP(E52_HEARTBEAT, HEARTBEAT_SEND);
                 E52_Heartbeat_Fun1();
                 break;
             case IS_ONLINE:

+ 21 - 0
Core/Src/main.c

@@ -319,6 +319,27 @@ int main(void)
       }
     }
 
+    if (GET_CMD( deviceInfo.commandFromCloud)  == E52_HEARTBEAT && deviceInfo.isOnline) {
+      switch (GET_STEP(deviceInfo.commandFromCloud)) {
+        case HEARTBEAT_SEND:
+          if (deviceInfo.loraSendSuccessFlag == 0) {
+            E52_Heartbeat_Fun();
+          }else {
+            continue;
+          }
+          deviceInfo.commandFromCloud = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_COMPLETE);
+          break;
+        case STEP_COMPLETE:
+          deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
+          break;
+
+        default:
+          deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
+          printf("收到未知步骤,忽略处理\r\n");
+          break;
+      }
+    }
+    // 检查是否接收到"心跳"命令,且设备在线
     if (!deviceInfo.isOnline){
         printf("The device is not online.\r\n");
         if (!deviceInfo.loraSendSuccessFlag) {

+ 14 - 0
README.md

@@ -0,0 +1,14 @@
+1、后台命令。 通用部分  帧头:55 BB  命令:08 设备地址:E1 16   测试设备地址:55 BB 03 FC A5 01 C8
+2、设备上报。 通用部分  帧头:55 AA  命令:02 设备地址:E1 16
+
+命令:
+    后台:03 请求蓝牙  07 配置lora  05 设备睡眠 04 上报点卯信息  09 ACK服务端响应
+    设备:01 主动上报点卯  02 上报蓝牙数据  04 SOS信息
+
+
+1.1、启动设备:55 BB 08 E1 16  注释:后台主动问询设备的在线状态
+返回:无
+
+
+1.2、请求蓝牙:55 BB 03 E1 16 00 C8  注释:请求蓝牙数据。搜索蓝牙时间 00 C8 。两个16进制数表示毫秒。
+返回:55 AA 02 E1 16 25 AD 0B 1D 60 C8 F0 A9 01 FF EE   注释: