HAL_Project/Project -APP-V1.0/Hardware/REALY/relay.c

151 lines
5.5 KiB
C
Raw Normal View History

2025-05-09 15:43:42 +08:00
#include "main.h"
//<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD>ʼ<EFBFBD><CABC>
void relayInit(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIOB_RCC_ENABLE;
GPIOD_RCC_ENABLE;
GPIO_InitStruct.Pin = Realy1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(Realy1_GPIO_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = Realy2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(Realy2_GPIO_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = Realy3_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(Realy3_GPIO_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = Realy4_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(Realy4_GPIO_Port, &GPIO_InitStruct);
//<2F>Ӵ洢<D3B4><E6B4A2><EFBFBD>лָ<D0BB><D6B8>̵<EFBFBD><CCB5><EFBFBD>״̬
MqttInfoStr.Relay_State[1] ? Relay1_OFF : Relay1_ON;
MqttInfoStr.Relay_State[2] ? Relay2_OFF : Relay2_ON;
MqttInfoStr.Relay_State[3] ? Relay3_OFF : Relay3_ON;
MqttInfoStr.Relay_State[4] ? Relay4_OFF : Relay4_ON;
log_info("<EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD>1״̬Ϊ:%s",MqttInfoStr.Relay_State[1] ? "<EFBFBD><EFBFBD>" : "<EFBFBD><EFBFBD>");
log_info("<EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD>2״̬Ϊ:%s",MqttInfoStr.Relay_State[2] ? "<EFBFBD><EFBFBD>" : "<EFBFBD><EFBFBD>");
log_info("<EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD>3״̬Ϊ:%s",MqttInfoStr.Relay_State[3] ? "<EFBFBD><EFBFBD>" : "<EFBFBD><EFBFBD>");
log_info("<EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD>4״̬Ϊ:%s",MqttInfoStr.Relay_State[4] ? "<EFBFBD><EFBFBD>" : "<EFBFBD><EFBFBD>");
//<2F><>ȡ<EFBFBD><EFBFBD><E6B4A2><EFBFBD>ļ̵<C4BC><CCB5><EFBFBD>״̬<D7B4><CCAC><EFBFBD>͸<EFBFBD><CDB8><EFBFBD>ƽ̨
CAT1_printf("AT+MPUB=\"/iot/data/up/%s\",0,0,\"{\\22header\\22:\\22iot.prop.post\\22,\\22body\\22:{\\22sw1\\22:%d,\\22sw2\\22:%d,\\22sw3\\22:%d,\\22sw4\\22:%d}}\"\r\n",
MqttInfoStr.ClientID,
MqttInfoStr.Relay_State[1]?1:0,
MqttInfoStr.Relay_State[2]?1:0,
MqttInfoStr.Relay_State[3]?1:0,
MqttInfoStr.Relay_State[4]?1:0);
}
// <20>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>+MSUB: "/iot/data/down/cfd6dba662690a5e",118 byte,{"id":"977013940154814794","header":"iot.prop.set","version":"1.0","body":{"sw1":{"time":1713104741005,"value":true}}}
void relayAction(uint8_t *data) {
uint8_t i = 0;
char *TempPointer; // <20><>ʱָ<CAB1><D6B8>
char CmdId[18] = {0}; // <20><><EFBFBD><EFBFBD>id<69><64><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char IdFlag = 0; // id<69>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ID<49><44><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
if(strstr((char *)data,MqttInfoStr.Topic)) { //<2F><><EFBFBD><EFBFBD> /iot/data/down/ <20><><EFBFBD>ֵ<EFBFBD>λ<EFBFBD><CEBB>
TempPointer = strstr((char *)data,"\"id\":"); // <20><>¼IDλ<44><CEBB> {"id":"1117
TempPointer += 6; //<2F><>ȥ"id": 5<><35><EFBFBD>ַ<EFBFBD> Ӧ<>ôӵ<C3B4>6<EFBFBD><36><EFBFBD><EFBFBD>ʼȡ
IdFlag = 0;
log_info("ID<EFBFBD><EFBFBD>ʼλ<EFBFBD><EFBFBD>Ϊ%s", TempPointer); //<2F><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44>ʼλ<CABC><CEBB>Ϊ977187088401715548","header":"iot.sub.prop.set","version":"1.0","body":{"sw2":{"time":1713146022764,"value":true}}}
for (i = 0; i < 18; i++) {
// <20>洢id(<28><>Ӧ֡<D3A6><D6A1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>)
if (((TempPointer[i] >= '0') && (TempPointer[i] <= '9')) || ((TempPointer[i] >= 'a') && (TempPointer[i] <= 'z')) || ((TempPointer[i] >= 'A') && (TempPointer[i] <= 'Z'))) {
CmdId[i] = TempPointer[i];
IdFlag++;
} else {
IdFlag = 0;
log_info("ID<EFBFBD>л<EFBFBD><EFBFBD>зǷ<EFBFBD><EFBFBD>ַ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
log_info("IDָ<EFBFBD><EFBFBD>Ϊ%s", TempPointer); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǧ<EFBFBD><C7A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>printf <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>log_info <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>ԭ<EFBFBD><D4AD>
}
}
if (IdFlag >= 18) { // IDΪ18λ<38><CEBB><EFBFBD><EFBFBD>ID>=18ʱ˵<CAB1><CBB5>ID<49><44><EFBFBD><EFBFBD>
log_info("ID<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
if(strstr((char *)data,"\"sw")) { //<2F><><EFBFBD>ж<EFBFBD><D0B6>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD>
TempPointer = strstr((char *)data,"\"sw"); // <20><>¼swλ<77><CEBB>
switch(TempPointer[3]) { // <20>жϲ<D0B6><CFB2><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
case '1':
if (strstr((char *)data, "true")) {
log_info("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Relay1_ON;//
MqttInfoStr.Relay_State[1] = 1;
}
if (strstr((char *)data, "false")) {
log_info("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>ر<EFBFBD>");
MqttInfoStr.Relay_State[1] = 0;
Relay1_OFF;//
}
break;
case '2':
if (strstr((char *)data, "true")) {
log_info("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Relay2_ON;//
MqttInfoStr.Relay_State[2] = 1;
}
if (strstr((char *)data, "false")) {
log_info("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>ر<EFBFBD>");
Relay2_OFF;//
MqttInfoStr.Relay_State[2] = 0;
}
break;
case '3':
if (strstr((char *)data, "true")) {
log_info("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Relay3_ON;//
MqttInfoStr.Relay_State[3] = 1;
}
if (strstr((char *)data, "false")) {
log_info("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD>ر<EFBFBD>");
Relay3_OFF;//
MqttInfoStr.Relay_State[3] = 0;
}
break;
case '4':
if (strstr((char *)data, "true")) {
log_info("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Relay4_ON;//
MqttInfoStr.Relay_State[4] = 1;
}
if (strstr((char *)data, "false")) {
log_info("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ر<EFBFBD>");
Relay4_OFF;//
MqttInfoStr.Relay_State[4] = 0;
}
break;
}
}
eepromWriteData(0, &MqttInfoStr, MQTT_STRUCT_LEN);
CAT1_printf("AT+MPUB=\"/iot/data/up/%s\",0,0,\"{\\22header\\22:\\22iot.prop.post\\22,\\22body\\22:{\\22sw1\\22:%d,\\22sw2\\22:%d,\\22sw3\\22:%d,\\22sw4\\22:%d}}\"\r\n",
MqttInfoStr.ClientID,
MqttInfoStr.Relay_State[1]?1:0,
MqttInfoStr.Relay_State[2]?1:0,
MqttInfoStr.Relay_State[3]?1:0,
MqttInfoStr.Relay_State[4]?1:0);
HAL_Delay(50);//<2F><>Ҫ<EFBFBD><D2AA>ʱ <20><><EFBFBD>Ժܶ<D4BA>
//<2F><><EFBFBD>ͻظ<CDBB><D8B8><EFBFBD>Ϣ OK
CAT1_printf("AT+MPUB=\"/iot/data/up/%s\",0,0,\"{\\22id\\22:\\22%s\\22,\\22code\\22:0,\\22message\\22:\\22OK\\22}\"\r\n",MqttInfoStr.ClientID, CmdId);
}
}