HAL_Project/Project -APP-V1.0/Hardware/LORA/lora.c

478 lines
22 KiB
C
Raw Permalink Normal View History

2025-05-09 15:43:42 +08:00
#include "lora.h"
LoRaParameter LoRaSetData = { //ģ<><EFBFBD><E9B9A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
0x00, //ģ<><C4A3><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ֽ<EFBFBD>
0x00, //ģ<><C4A3><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ֽ<EFBFBD>
0x01, //ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
LoRa_9600, //ģ<><EFBFBD><E9B4AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 9600
LoRa_8N1, //<2F><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>ģʽ 8<><38><EFBFBD><EFBFBD>λ <20><>У<EFBFBD><D0A3> 1ֹͣλ
LoRa_38_4, //ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 38.4K
LoRa_Data240, //<2F><><EFBFBD>ݷְ<DDB7><D6B0><EFBFBD>С 240<34>ֽ<EFBFBD>
LoRa_RssiDIS, //<2F>ر<EFBFBD>RSSI<53><49><EFBFBD><EFBFBD>
LoRa_FEC_22DBM, //<2F><><EFBFBD><EFBFBD><E4B9A6>22dbm
LoRa_CH23, //ģ<><C4A3><EFBFBD>ŵ<EFBFBD>
LoRa_RssiByteDIS, //<2F><><EFBFBD><EFBFBD>RSSI<53>ֽڹ<D6BD><DAB9><EFBFBD>
LoRa_ModePOINT, //<2F><><EFBFBD><EFBFBD>ģʽ
LoRa_RelayDIS, //<2F><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>ģʽ
LoRa_LBTEN, //ʹ<><CAB9>LBT
LoRa_WorTX, //Worģʽ<C4A3><CABD><EFBFBD><EFBFBD> ֻ<><D6BB>ģʽ1<CABD><31><EFBFBD><EFBFBD>Ч
LoRa_Wor2000ms, //Wor<6F><72><EFBFBD><EFBFBD>2000<30><30><EFBFBD><EFBFBD> ֻ<><D6BB>ģʽ1<CABD><31><EFBFBD><EFBFBD>Ч
0x22, //ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD>ֽ<EFBFBD>
0x33, //ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD>ֽ<EFBFBD>
};
//LoRAģ<41><C4A3><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD>ʼ<EFBFBD><CABC>
void loraGpioInit(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIOA_RCC_ENABLE;
GPIOB_RCC_ENABLE;
GPIOC_RCC_ENABLE;
GPIO_InitStruct.Pin = LORA_AUX_Pin; //æ<><C3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(LORA_AUX_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = LORA_POW_Pin ; //<2F><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LORA_POW_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = LORA_M0_Pin ; //M0<4D><30><EFBFBD><EFBFBD>
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LORA_M0_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = LORA_M1_Pin ; //M1<4D><31><EFBFBD><EFBFBD>
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LORA_M1_Port, &GPIO_InitStruct);
LoRa_MODE2; //ģ<><C4A3>ģʽ2
HAL_Delay(200); //<2F>ʵ<EFBFBD><CAB5><EFBFBD>ʱ
}
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LoRa<52>ϵ縴λ */
/*<2A><> <20><><EFBFBD><EFBFBD>timeout<75><74><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>0<EFBFBD><30><EFBFBD><EFBFBD>ȷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
uint8_t loraReset(int16_t timeout) {
LoRa_PowerOFF; //<2F>ȹرյ<D8B1>Դ
HAL_Delay(200); //<2F><>ʱ
LoRa_PowerON; //<2F>ٴ򿪵<D9B4>Դ
while(timeout--) { //<2F>ȴ<EFBFBD><C8B4><EFBFBD>λ<EFBFBD>ɹ<EFBFBD>
HAL_Delay(100); //<2F><>ʱ100ms
if(LoRa_AUX==1) //<2F><>Ҫ<EFBFBD>ȵ<EFBFBD><C8B5>ߵ<EFBFBD>ƽ1<C6BD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>while<6C><65><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>whileѭ<65><D1AD>
u1_printf("%d ",timeout); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵij<DAB5>ʱʱ<CAB1><CAB1>
}
u1_printf("\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
if(timeout<=0)return 1; //<2F><><EFBFBD><EFBFBD>timeout<=0<><30>˵<EFBFBD><CBB5><EFBFBD><EFBFBD>ʱʱ<CAB1><EFBFBD>ˣ<EFBFBD>Ҳû<D2B2>ܵȵ<DCB5>LoRa_AUX<55>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
return 0; //<2F><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
}
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ģ<EFBFBD><C4A3> */
/*<2A><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
void loraInit(void) {
loraGpioInit(); //Loraģ<61><C4A3><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD>ʼ<EFBFBD><CABC>
u1_printf("׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λLoraģ<EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
if(loraReset(100)) { //<2F><>λLoraģ<61><EFBFBD><E9A3AC><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3A3AC>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
u1_printf("<EFBFBD><EFBFBD>λLoraģ<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
NVIC_SystemReset(); //<2F><><EFBFBD><EFBFBD>
} else u1_printf("Loraģ<EFBFBD>鸴λ<EFBFBD>ɹ<EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
u1_printf("׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Loraģ<EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
loraSet(); //<2F><><EFBFBD><EFBFBD>Loraģ<61><C4A3>
HAL_Delay(200); //<2F><>ʱ
}
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LoRa<52><61><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
void loraSet(void) {
uint8_t cmd[12]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9BBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB9B2>12<31>ֽ<EFBFBD>
cmd[0] = 0xC0; //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ֽڣ<D6BD><DAA3>̶<EFBFBD>ֵ0xC0
cmd[1] = 0x00; //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ӼĴ<D3BC><C4B4><EFBFBD>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD>ã<EFBFBD>һ<EFBFBD><D2BB>9<EFBFBD><39>
cmd[2] = 0x09; //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>9<EFBFBD><39><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
cmd[3] = LoRaSetData.LoRa_AddrH; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ֽ<EFBFBD>
cmd[4] = LoRaSetData.LoRa_AddrL; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ֽ<EFBFBD>
cmd[5] = LoRaSetData.LoRa_NetID; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
cmd[6] = LoRaSetData.LoRa_Baudrate | LoRaSetData.LoRa_UartMode | LoRaSetData.LoRa_airvelocity; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmd[7] = LoRaSetData.LoRa_DataLen | LoRaSetData.LoRa_Rssi | LoRaSetData.LoRa_TxPower; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD>ݷְ<DDB7><D6B0><EFBFBD><EFBFBD><EFBFBD> RSSI<53><49><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9> <20><><EFBFBD><EFBFBD><E4B9A6>
cmd[8] = LoRaSetData.LoRa_CH; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ŵ<EFBFBD>
cmd[9] = LoRaSetData.LoRa_RssiByte | LoRaSetData.LoRa_DateMode | LoRaSetData.LoRa_Relay | LoRaSetData.LoRa_LBT | LoRaSetData.LoRa_WORmode | LoRaSetData.LoRa_WORcycle; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>RSSI<53>ֽڹ<D6BD><DAB9><EFBFBD> <20><><EFBFBD>ʽ <20>Ƿ<EFBFBD><C7B7>м<EFBFBD> <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>LBT WORģʽ<C4A3>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD> WOR<4F><52><EFBFBD><EFBFBD>
cmd[10] = LoRaSetData.LoRa_KeyH; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD>ֽ<EFBFBD>
cmd[11] = LoRaSetData.LoRa_KeyL; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD>ֽ<EFBFBD>
u3_TxDataBuf(cmd,12); //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LoRa<52><61>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD>data<74><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
void loraGet(uint8_t *data) {
uint8_t ch; //<2F><><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5>ı<EFBFBD><C4B1><EFBFBD>
u1_printf("ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ:0x%02X%02X\r\n",data[3],data[4]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
u1_printf("ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID:0x%02X\r\n",data[5]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
switch(data[6]&0xE0) { //<2F>жϴ<D0B6><CFB4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
case LoRa_1200 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1200\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_2400 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2400\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_4800 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4800\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_9600 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 9600\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_19200 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 19200\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_38400 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 38400\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_57600 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 57600\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_115200:
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 115200\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
}
switch(data[6]&0x18) { //<2F>жϴ<D0B6><CFB4>ڲ<EFBFBD><DAB2><EFBFBD>
case LoRa_8N1 :
u1_printf("8<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ <20><>У<EFBFBD><D0A3> 1ֹͣλ\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_8O1 :
u1_printf("8<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ <20><>У<EFBFBD><D0A3> 1ֹͣλ\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_8E1 :
u1_printf("8<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ żУ<C5BC><D0A3> 1ֹͣλ\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
}
switch(data[6]&0x07) { //<2F>жϿ<D0B6><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case LoRa_0_3 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0.3K\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_1_2 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1.2K\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_2_4 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2.4K\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_4_8 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4.8K\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_9_6 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 9.6K\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_19_2 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 19.2K\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_38_4 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 38.4K\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_62_5 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 62.5K\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
}
switch(data[7]&0xC0) { //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ݷְ<DDB7><D6B0><EFBFBD>С
case LoRa_Data240 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD>ݷְ<EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>240<EFBFBD>ֽ<EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_Data128 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD>ݷְ<EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>128<EFBFBD>ֽ<EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_Data64 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD>ݷְ<EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>64<EFBFBD>ֽ<EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_Data32 :
u1_printf("<EFBFBD><EFBFBD><EFBFBD>ݷְ<EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>32<EFBFBD>ֽ<EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
}
switch(data[7]&0x20) { //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>RSSI<53><49><EFBFBD><EFBFBD>
case LoRa_RssiEN :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>RSSI<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_RssiDIS :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>RSSI<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
}
switch(data[7]&0x03) { //<2F>жϷ<D0B6><CFB7><EFBFBD><E4B9A6>
case LoRa_FEC_22DBM :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 22dbm\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_FEC_17DBM :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 17dbm\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_FEC_13DBM :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 13dbm\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_FEC_10DBM :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10dbm\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
}
ch = data[8] & 0x7F; //<2F><><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>
u1_printf("<EFBFBD>ŵ<EFBFBD>:0x%02X <20><>ӦƵ<D3A6><C6B5>%dMHz\r\n",ch,410+ch); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
switch(data[9]&0x80) { //<2F>ж<EFBFBD>RSSI<53>ֽڹ<D6BD><DAB9><EFBFBD>
case LoRa_RssiByteEN :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>RSSI<EFBFBD>ֽڹ<EFBFBD><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_RssiByteDIS :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>RSSI<EFBFBD>ֽڹ<EFBFBD><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
}
switch(data[9]&0x40) { //<2F>жϴ<D0B6><CFB4><EFBFBD>ģʽ
case LoRa_ModeTRANS :
u1_printf("͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_ModePOINT :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
}
switch(data[9]&0x20) { //<2F>ж<EFBFBD><D0B6>м̹<D0BC><CCB9><EFBFBD>
case LoRa_RelayEN :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_RelayDIS :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
}
switch(data[9]&0x10) { //<2F>ж<EFBFBD>LBT<42><54><EFBFBD><EFBFBD>
case LoRa_LBTEN :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>LBT\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
case LoRa_LBTDIS :
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>LBT\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
break; //<2F><><EFBFBD><EFBFBD>
}
// switch(data[9]&0x08){ //<2F>ж<EFBFBD>WORģʽ
// case LoRa_WorTX : u1_printf("Worģʽ<C4A3><CABD><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// break; //<2F><><EFBFBD><EFBFBD>
// case LoRa_WorRX : u1_printf("Worģʽ<C4A3><CABD><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// break; //<2F><><EFBFBD><EFBFBD>
// }
// switch(data[9]&0x07){ //<2F>ж<EFBFBD>WOR<4F><52><EFBFBD><EFBFBD>
// case LoRa_Wor500ms : u1_printf("WOR<4F><52><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 500<30><30><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// break; //<2F><><EFBFBD><EFBFBD>
// case LoRa_Wor1000ms : u1_printf("WOR<4F><52><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 1000<30><30><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// break; //<2F><><EFBFBD><EFBFBD>
// case LoRa_Wor1500ms : u1_printf("WOR<4F><52><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 1500<30><30><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// break; //<2F><><EFBFBD><EFBFBD>
// case LoRa_Wor2000ms : u1_printf("WOR<4F><52><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 2000<30><30><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// break; //<2F><><EFBFBD><EFBFBD>
// case LoRa_Wor2500ms : u1_printf("WOR<4F><52><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 2500<30><30><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// break; //<2F><><EFBFBD><EFBFBD>
// case LoRa_Wor3000ms : u1_printf("WOR<4F><52><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 3000<30><30><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// break; //<2F><><EFBFBD><EFBFBD>
// case LoRa_Wor3500ms : u1_printf("WOR<4F><52><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 3500<30><30><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// break; //<2F><><EFBFBD><EFBFBD>
// case LoRa_Wor4000ms : u1_printf("WOR<4F><52><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 4000<30><30><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// break; //<2F><><EFBFBD><EFBFBD>
// }
}
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD>data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD>datalen <20><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
uint8_t tempdata[512];
void u3PassiveEvent(uint8_t *data, uint16_t datalen) {
/*----------------------------------------------*/
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LoRaģ<61><EFBFBD><E9B7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*----------------------------------------------*/
if((data[0]==0xC1)&&(datalen==12)) {
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LoRaģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
loraGet(data); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õIJ<C3B5><C4B2><EFBFBD>
LoRa_MODE0; //<2F>л<EFBFBD><D0BB><EFBFBD>ģʽ0
HAL_Delay(200); //<2F><>ʱ
catReset(); //4Gģ<47><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
/*----------------------------------------------*/
/* <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>豸x<E8B1B8>Ϸ<EFBFBD><CFB7><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>Ϣ */
/*----------------------------------------------*/
if(datalen==(SUBMQTTINFO_STRUCT_LEN+1)) { //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ϳ<EFBFBD><CFB3>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
switch (data[0]) {
case CERT1_DATA:
subDeviceReportingCertificate(0,data);
break;
case CERT2_DATA:
subDeviceReportingCertificate(1,data);
break;
case CERT3_DATA:
subDeviceReportingCertificate(2,data);
break;
case CERT4_DATA:
subDeviceReportingCertificate(3,data);
break;
case CERT5_DATA:
subDeviceReportingCertificate(4,data);
break;
case CERT6_DATA:
subDeviceReportingCertificate(5,data);
break;
case CERT7_DATA:
subDeviceReportingCertificate(6,data);
break;
case CERT8_DATA:
subDeviceReportingCertificate(7,data);
break;
case CERT9_DATA:
subDeviceReportingCertificate(8,data);
break;
case CERT10_DATA:
subDeviceReportingCertificate(9,data);
break;
default :
break;
}
u1_printf("***<2A>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ݣ<EFBFBD><DDA3>߳̽<DFB3><CCBD><EFBFBD>...\r\n");
taskRunning = 0; //<2F><><EFBFBD>˳<EFBFBD>
}
/*----------------------------------------------*/
/* <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>豸x<E8B1B8>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*----------------------------------------------*/
if(datalen==(ATTRIBUTE_STRUCT_LEN+1)) { //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ϳ<EFBFBD><CFB3>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
switch (data[0]) {
case SUB1_DATA:
subDeviceReportingSwitchStatus(0,data);
break;
case SUB2_DATA:
subDeviceReportingSwitchStatus(1,data);
break;
case SUB3_DATA:
subDeviceReportingSwitchStatus(2,data);
break;
case SUB4_DATA:
subDeviceReportingSwitchStatus(3,data);
break;
case SUB5_DATA:
subDeviceReportingSwitchStatus(4,data);
break;
default :
break;
}
u1_printf("***<2A>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ݣ<EFBFBD><DDA3>߳̽<DFB3><CCBD><EFBFBD>...\r\n");
taskRunning = 0; //<2F><><EFBFBD>˳<EFBFBD>
}
}
//<2F><><EFBFBD><EFBFBD>ϱ<EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ƽ̨ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD> sub_num <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30>ʾ<EFBFBD>豸1...
void subDeviceReportingCertificate(uint8_t sub_num,uint8_t *data) {
u1_printf("<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸%d֤<64><D6A4><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>\r\n",sub_num + 1);
memcpy(&SubMqttInfo_Struct[sub_num],&data[1],SUBMQTTINFO_STRUCT_LEN); //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CAT1_printf("AT+MPUB=\"/iot/sub/live/post/%s\",0,0,\"{\\22header\\22:\\22iot.sub.live.post\\22,\\22version\\22:\\221.0\\22,\\22body\\22:{\\22online\\22:[{\\22uid\\22:\\22%s\\22,\\22secret\\22:\\22%s\\22}]}}\"\r\n",
GwMqttInfo_Struct.ClientID,
SubMqttInfo_Struct[sub_num].ClientID,
SubMqttInfo_Struct[sub_num].Passward);
u1_printf("<EFBFBD><EFBFBD><EFBFBD>豸%d<><64>uid<69><64>%s,secret<65><74>%s\r\n",
sub_num + 1,
SubMqttInfo_Struct[sub_num].ClientID,
SubMqttInfo_Struct[sub_num].Passward);
SUB_DEVICE_ON[sub_num] = 1;//<2F><><EFBFBD><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־λ<D6BE><CEBB>һ
}
//<2F><><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ƽ̨ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD> sub_num <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30>ʾ<EFBFBD>豸1...
void subDeviceReportingSwitchStatus(uint8_t sub_num,uint8_t *data) {
u1_printf("<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸%d<><64><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>\r\n",sub_num + 1);
memcpy(&SubAttribute_Struct[sub_num],&data[1],ATTRIBUTE_STRUCT_LEN); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u1_printf("* * * * *׼<><D7BC><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<C2B6><C8A3><EFBFBD><EFBFBD><EFBFBD>ѹǿ<D1B9><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʪ<EFBFBD><CAAA>* * * * *\r\n");
/*
BAT_VAL <EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD>
DEV_TP <EFBFBD><EFBFBD><EFBFBD>
DEV_RES <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BS_RH <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʪ<EFBFBD><EFBFBD>
BS_T <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BS_DO <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹǿ
SOIL_RH <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʪ<EFBFBD><EFBFBD>
SOIL_TP <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
YSMD_RH Ҷ<EFBFBD><EFBFBD>ʪ<EFBFBD><EFBFBD>
YSMD_TP Ҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BY_HV <EFBFBD><EFBFBD>Ҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BY_CO2 <EFBFBD><EFBFBD>Ҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̼
SOIL_NV <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SOIL_PV <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SOIL_KV <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SOIL_PH <EFBFBD><EFBFBD><EFBFBD><EFBFBD>PH
SOIL_RV <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SIGNAL <EFBFBD>ź<EFBFBD>ǿ<EFBFBD><EFBFBD>
*/
CAT1_printf("AT+MPUB=\"/iot/sub/prop/post/%s\",0,0,\"{\\22header\\22:\\22iot.sub.prop.post\\22,\\22version\\22:\\221.0\\22,\\22body\\22:{\\22subs\\22:[{\\22uid\\22:\\22%s\\22,\\22props\\22:{\\22BAT_VAL\\22:%d,\\22DEV_TP\\22:%.1f,\\22DEV_RES\\22:%d,\\22BS_RH\\22:%.1f,\\22BS_T\\22:%.1f,\\22BS_DO\\22:%.1f}}]}}\"\r\n",
GwMqttInfo_Struct.ClientID,
SubMqttInfo_Struct[sub_num].ClientID,
SubAttribute_Struct[sub_num].Sub_BAT,
SubAttribute_Struct[sub_num].Device_Temp,
SubAttribute_Struct[sub_num].Res_Count,
SubAttribute_Struct[sub_num].Envir_PressHumi,
SubAttribute_Struct[sub_num].Envir_PressTemp,
SubAttribute_Struct[sub_num].Envir_Press);//<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
HAL_Delay(1000);
u1_printf("* * * * *׼<><D7BC><EFBFBD>ϴ<EFBFBD>Ҷ<EFBFBD><D2B6><EFBFBD><EFBFBD>ʪ<EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʪ<EFBFBD><CAAA>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD><CCBC><EFBFBD><EFBFBD> * * * * *\r\n");
CAT1_printf("AT+MPUB=\"/iot/sub/prop/post/%s\",0,0,\"{\\22header\\22:\\22iot.sub.prop.post\\22,\\22version\\22:\\221.0\\22,\\22body\\22:{\\22subs\\22:[{\\22uid\\22:\\22%s\\22,\\22props\\22:{\\22SOIL_RH\\22:%.1f,\\22SOIL_TP\\22:%.1f,\\22YSMD_RH\\22:%.1f,\\22YSMD_TP\\22:%.1f,\\22BY_HV\\22:%d,\\22BY_CO2\\22:%d}}]}}\"\r\n",
GwMqttInfo_Struct.ClientID,
SubMqttInfo_Struct[sub_num].ClientID,
SubAttribute_Struct[sub_num].Soil_Humi,
SubAttribute_Struct[sub_num].Soil_Temp,
SubAttribute_Struct[sub_num].Leaf_Humi,
SubAttribute_Struct[sub_num].Leaf_Temp,
SubAttribute_Struct[sub_num].Envir_Light,
SubAttribute_Struct[sub_num].Envir_Co2);//<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
HAL_Delay(1000);
u1_printf("* * * * *׼<><D7BC><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼غ<D7BC><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PH<50><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ǿ<EFBFBD><C7BF>* * * * *\r\n");
CAT1_printf("AT+MPUB=\"/iot/sub/prop/post/%s\",0,0,\"{\\22header\\22:\\22iot.sub.prop.post\\22,\\22version\\22:\\221.0\\22,\\22body\\22:{\\22subs\\22:[{\\22uid\\22:\\22%s\\22,\\22props\\22:{\\22SOIL_NV\\22:%d,\\22SOIL_PV\\22:%d,\\22SOIL_KV\\22:%d,\\22SOIL_PH\\22:%.1f,\\22SOIL_RV\\22:%d,\\22SIGNAL\\22:%d}}]}}\"\r\n",
GwMqttInfo_Struct.ClientID,
SubMqttInfo_Struct[sub_num].ClientID,
SubAttribute_Struct[sub_num].Soil_NV,
SubAttribute_Struct[sub_num].Soil_PV,
SubAttribute_Struct[sub_num].Soil_KV,
SubAttribute_Struct[sub_num].Soil_PH,
SubAttribute_Struct[sub_num].Soil_EC,
SubAttribute_Struct[sub_num].SIGNAL_STRENGTH);//<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d\r\n",SubAttribute_Struct[sub_num].Res_Count);
u1_printf("<EFBFBD><EFBFBD>ȣ<EFBFBD> %.1f'C\r\n",SubAttribute_Struct[sub_num].Device_Temp);
u1_printf("<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD>Ϊ:%d %%\r\n",SubAttribute_Struct[sub_num].Sub_BAT); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʪ<EFBFBD>ȣ<EFBFBD>%.2f%%RH<52><48><EFBFBD>ȣ<C2B6>%.2f'C,<2C><><EFBFBD><EFBFBD>ѹǿ<D1B9><C7BF>%.2fKpa\r\n",SubAttribute_Struct[sub_num].Envir_PressHumi,SubAttribute_Struct[sub_num].Envir_PressTemp,SubAttribute_Struct[sub_num].Envir_Press);
u1_printf("Ҷ<EFBFBD><EFBFBD>ʪ<EFBFBD>ȣ<EFBFBD>%.2f%%RH<52><48><EFBFBD>ȣ<C2B6>%.2f'C\r\n",SubAttribute_Struct[sub_num].Leaf_Humi,SubAttribute_Struct[sub_num].Leaf_Temp);
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʪ<EFBFBD>ȣ<EFBFBD>%.2f%%RH<52><48><EFBFBD>ȣ<C2B6>%.2f'C\r\n",SubAttribute_Struct[sub_num].Soil_Humi,SubAttribute_Struct[sub_num].Soil_Temp);
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%dmg/kg<6B><67><EFBFBD>׺<EFBFBD><D7BA><EFBFBD><EFBFBD><EFBFBD>%dmg/kg<6B><67><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>%dmg/kg\r\n",SubAttribute_Struct[sub_num].Soil_NV,SubAttribute_Struct[sub_num].Soil_PV,SubAttribute_Struct[sub_num].Soil_KV);
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>%.2f\r\n",SubAttribute_Struct[sub_num].Soil_PH);
u1_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>%duS/cm\r\n",SubAttribute_Struct[sub_num].Soil_EC);
}