瀏覽代碼

切换中继和终端

xuxinyi 1 月之前
父節點
當前提交
b850df5e10
共有 3 個文件被更改,包括 36 次插入7 次删除
  1. 9 0
      Core/Inc/E52.h
  2. 12 0
      Core/Src/E52.c
  3. 15 7
      Core/Src/main.c

+ 9 - 0
Core/Inc/E52.h

@@ -66,6 +66,13 @@ typedef enum {
 } SLEEP_STEP;
 
 
+typedef enum {
+    E52_TYPE_TERMINAL = 0,   // 终端
+    E52_TYPE_REPEATER = 1,   // 中继
+    // E52_TYPE_MASTER   = 2    // 主机
+} E52_TYPE;
+
+
 
 // // 发送 "请求蓝牙数据" 命令的第2步
 // uint8_t cmd = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_2);
@@ -206,4 +213,6 @@ GPIO_PinState E52_GET_PowerLevel_Fun(void);
 void schedule_Fun(void);
 
 void Enter_Sleep_ACK_Fun(void);
+
+void E52_AT_TYPE_Fun(uint8_t type);
 #endif //E52_H

+ 12 - 0
Core/Src/E52.c

@@ -21,6 +21,17 @@ GPIO_PinState E52_GET_PowerLevel_Fun(void) {
     return HAL_GPIO_ReadPin(CTL_LORA_POWER_GPIO_Port, CTL_LORA_POWER_Pin);
 }
 
+
+void E52_AT_TYPE_Fun(uint8_t type) {
+    char lora_msg[20];
+    // 拼接字符串 AT+TYPE=x
+    sprintf(lora_msg, "AT+TYPE=%d", type);
+
+    HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg, strlen(lora_msg), HAL_MAX_DELAY);
+    HAL_Delay(300);
+}
+
+
 //AT COMMAND
 /**
  *配置lora发送方式
@@ -234,6 +245,7 @@ void Enter_Sleep_ACK_Fun() {
 
 void E52_Analyze_Data() {
     // 根据接收到的第三个字节(命令字节)进行分支处理
+
     switch (rx_buf_uart2[2]) {
         case REQUEST_BLUETOOTH_DATA:
             E52_Request_Command_Fun();

+ 15 - 7
Core/Src/main.c

@@ -321,9 +321,9 @@ int main(void)
     printf("开启Lora广播模块\r\n");
     E52_CONFIG_BROADCAST_TYPE_FUN(BROADCAST_ALL);
     HAL_Delay(2000);
-    const char *lora_msg1 = "AT+TYPE=0";
-    HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg1, strlen(lora_msg1), HAL_MAX_DELAY);
-    HAL_Delay(2000);
+
+    E52_AT_TYPE_Fun(E52_TYPE_TERMINAL);
+
     const char *lora_msg3 = "AT+HEAD=0";
     HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg3, strlen(lora_msg3), HAL_MAX_DELAY);
     HAL_Delay(2000);
@@ -349,7 +349,9 @@ int main(void)
   /* Infinite loop */
   /* USER CODE BEGIN WHILE */
   HAL_Delay(5000);
+  E52_AT_TYPE_Fun(E52_TYPE_TERMINAL);
   E52_Heartbeat_Fun();
+  E52_AT_TYPE_Fun(E52_TYPE_REPEATER);
   printf("设备地址:0x%02X%02X\n", deviceInfo.loraDeviceAddress_H, deviceInfo.loraDeviceAddress_L);
 
 
@@ -369,7 +371,9 @@ int main(void)
     // 心跳:不在线时,每 10 秒发一次
     if (!deviceInfo.isOnline) {
       if (IsTimeElapsed(&hrtc, &Online_struct, 10)) {
+        E52_AT_TYPE_Fun(E52_TYPE_TERMINAL);
         E52_Heartbeat_Fun();
+        E52_AT_TYPE_Fun(E52_TYPE_REPEATER);
       }
     }
 
@@ -379,6 +383,7 @@ int main(void)
     } else {
       if (IsTimeElapsed(&hrtc, &IDLE_struct, 20*60)) {
         deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
+        E52_AT_TYPE_Fun(E52_TYPE_REPEATER);
       }
     }
 
@@ -393,6 +398,7 @@ int main(void)
     if (GET_CMD(deviceInfo.commandFromCloud) == REQUEST_BLUETOOTH_DATA && deviceInfo.isOnline )  {
       switch (GET_STEP(deviceInfo.commandFromCloud)) {
         case REQUEST_BLUETOOTH_DATA_SCAN:
+          E52_AT_TYPE_Fun(E52_TYPE_TERMINAL);
           deviceInfo.BlDataFlag = BL_STOP;
           deviceInfo.commandFromCloud = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, REQUEST_BLUETOOTH_DATA_SEND);
           break;
@@ -418,7 +424,7 @@ int main(void)
           break;          //发送数据阶段
         case STEP_COMPLETE:
           deviceInfo.forwardBLAndLoraDataDuration = 0;
-          // i = 0;
+          E52_AT_TYPE_Fun(E52_TYPE_REPEATER);
           deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
           break;
 
@@ -436,6 +442,7 @@ int main(void)
     if (GET_CMD( deviceInfo.commandFromCloud)  == E52_HEARTBEAT && deviceInfo.isOnline) {
       switch (GET_STEP(deviceInfo.commandFromCloud)) {
         case HEARTBEAT_SEND:
+          E52_AT_TYPE_Fun(E52_TYPE_TERMINAL);
           if (TRUE) {
             E52_Heartbeat_Fun();
             deviceInfo.commandFromCloud = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_COMPLETE);
@@ -443,6 +450,7 @@ int main(void)
           break;
         case STEP_COMPLETE:
           deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
+          E52_AT_TYPE_Fun(E52_TYPE_REPEATER);
           break;
 
         default:
@@ -456,6 +464,7 @@ int main(void)
     if (GET_CMD( deviceInfo.commandFromCloud)  == CONFIGURE_E52 && deviceInfo.isOnline) {
       switch (GET_STEP(deviceInfo.commandFromCloud)) {
           case CONFIGURE_E52_SET_BROADCAST_TYPE:      //第一步,配置广播类型
+          E52_AT_TYPE_Fun(E52_TYPE_TERMINAL);
               E52_CONFIG_BROADCAST_TYPE_FUN(deviceInfo.broadcast_type);
               HAL_Delay(2000);
               if (deviceInfo.broadcast_type == BROADCAST_ALL) {
@@ -472,10 +481,9 @@ int main(void)
           break;        //如果是单波,多播,配置目标地址
 
           case STEP_COMPLETE:
-            if (TRUE) {
+              E52_AT_TYPE_Fun(E52_TYPE_REPEATER);
               E52_Heartbeat_Fun();
-            }
-            deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
+              deviceInfo.commandFromCloud = COMBINE_CMD_STEP(IDLE, STEP_INIT);
           break;
 
           default: