2025-04-16 09:58:09 +08:00
|
|
|
|
#include "Inf_4G.h"
|
|
|
|
|
// <20><>Irrigation.h<><EFBFBD><F2B5A5B6><EFBFBD>config.h<>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// AT<41><54><EFBFBD><EFBFBD>״̬
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
AT_IDLE,
|
|
|
|
|
AT_SENDING,
|
|
|
|
|
AT_WAITING,
|
|
|
|
|
AT_COMPLETE
|
|
|
|
|
} AT_State_t;
|
|
|
|
|
|
|
|
|
|
uint8_t force_pump_off = 0; // ˮ<><CBAE>ǿ<EFBFBD>ƹرձ<D8B1>־
|
|
|
|
|
uint8_t force_fan_off = 0; // <20><><EFBFBD><EFBFBD>ǿ<EFBFBD>ƹرձ<D8B1>־
|
|
|
|
|
AT_State_t at_state = AT_IDLE;
|
|
|
|
|
uint32_t at_start_time = 0;
|
2025-05-20 09:41:22 +08:00
|
|
|
|
|
|
|
|
|
char sim_iccid[ICCID_LENGTH] = {0}; // <20><>ʼ<EFBFBD><CABC>ICCID<49><44><EFBFBD><EFBFBD>
|
|
|
|
|
|
2025-04-16 09:58:09 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
uint8_t rxBuff[RX_BUFFER_SIZE]; /* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>жϽ<D0B6><CFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
uint16_t rxDataSize; /* һ<><D2BB><EFBFBD>жϽ<D0B6><CFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
uint8_t responseBuff[RESPONSE_BUFFER_SIZE]; /* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>жϽ<D0B6><CFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
uint16_t responseDataSize; /* һ<><D2BB><EFBFBD>жϽ<D0B6><CFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
void Publish_Power_Data(void);
|
2025-05-20 09:41:22 +08:00
|
|
|
|
|
2025-04-16 09:58:09 +08:00
|
|
|
|
volatile uint8_t need_upload = 0;
|
|
|
|
|
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t size)
|
|
|
|
|
{
|
|
|
|
|
if (huart->Instance == USART2)
|
|
|
|
|
{
|
|
|
|
|
rxDataSize = size;
|
2025-05-20 09:41:22 +08:00
|
|
|
|
HAL_UARTEx_ReceiveToIdle_IT(&huart2, rxBuff, 1024);
|
2025-04-16 09:58:09 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Inf_4G_Init(void)
|
|
|
|
|
{
|
|
|
|
|
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 */
|
|
|
|
|
MX_USART2_UART_Init();
|
|
|
|
|
|
|
|
|
|
HAL_UARTEx_ReceiveToIdle_IT(&huart2, rxBuff, 1024);
|
|
|
|
|
Inf_4G_SendAtCmd("AT+CFUN=1\r\n");
|
|
|
|
|
HAL_Delay(2000);
|
|
|
|
|
Inf_4G_SendAtCmd("AT\r\n");
|
2025-05-20 09:41:22 +08:00
|
|
|
|
|
|
|
|
|
// <20><>ȡICCID
|
|
|
|
|
Get_ICCID();
|
2025-04-16 09:58:09 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>ʼ<EFBFBD>ź<EFBFBD>ǿ<EFBFBD><C7BF>
|
|
|
|
|
Get_Signal_Strength();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Inf_4G_SendAtCmd(uint8_t *atcmd)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
memset(responseBuff, 0, sizeof(responseBuff));
|
|
|
|
|
responseDataSize = 0;
|
|
|
|
|
rxDataSize = 0;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>AT<41><54><EFBFBD><EFBFBD>
|
|
|
|
|
HAL_UART_Transmit(&huart2, atcmd, strlen((char *)atcmd), 500);
|
|
|
|
|
|
|
|
|
|
// <20>ȴ<EFBFBD><C8B4><EFBFBD>Ӧ
|
|
|
|
|
uint16_t timeout = 1000; // 1<>볬ʱ
|
|
|
|
|
while (timeout--)
|
|
|
|
|
{
|
|
|
|
|
if (rxDataSize > 0)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
|
|
|
|
|
if (strstr((char *)rxBuff, "OK") || strstr((char *)rxBuff, "ERROR"))
|
|
|
|
|
{
|
|
|
|
|
return; // <20>յ<EFBFBD><D5B5><EFBFBD>Ӧֱ<D3A6>ӷ<EFBFBD><D3B7><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
rxDataSize = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С
|
|
|
|
|
}
|
|
|
|
|
HAL_Delay(1); // 1ms<6D><73>ʱ
|
|
|
|
|
}
|
|
|
|
|
// <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
printf("AT<EFBFBD><EFBFBD><EFBFBD>ʱ: %s\n", atcmd);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// void Inf_EC800_4GInit(void)
|
|
|
|
|
// {
|
|
|
|
|
// // <20><>ʼ<EFBFBD><CABC>4Gģ<47><C4A3>
|
|
|
|
|
// Inf_4G_SendAtCmd("AT+CSQ\r\n");
|
|
|
|
|
// Inf_4G_SendAtCmd("AT+CPIN?\r\n");
|
|
|
|
|
// Inf_4G_SendAtCmd("AT+CEREG?\r\n");
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
void Inf_EC800_MQTT_Publish(const char *topic, const char *payload)
|
|
|
|
|
{
|
|
|
|
|
char atCmd[128];
|
|
|
|
|
snprintf(atCmd, sizeof(atCmd), "AT+QMTPUB=0,0,0,0,\"%s\"\r\n", topic);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>AT<41><54><EFBFBD><EFBFBD>ȴ<EFBFBD>">"<22><>ʾ<EFBFBD><CABE>
|
|
|
|
|
Inf_4G_SendAtCmd((uint8_t *)atCmd);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
|
|
|
|
HAL_UART_Transmit(&huart2, (uint8_t *)payload, strlen(payload), 1000);
|
|
|
|
|
HAL_UART_Transmit(&huart2, (uint8_t *)"\x1A", 1, 1000); // Ctrl+Z
|
|
|
|
|
|
|
|
|
|
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD>Ӧ
|
|
|
|
|
HAL_Delay(1000);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Inf_EC800_ReadData(void)
|
|
|
|
|
{
|
|
|
|
|
if (rxDataSize > 0)
|
|
|
|
|
{
|
|
|
|
|
printf("<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>ԭʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: %s\n", rxBuff);
|
|
|
|
|
|
|
|
|
|
if (strstr((char *)rxBuff, "+QMTRECV:"))
|
|
|
|
|
{
|
|
|
|
|
char *jsonStart = strchr((char *)rxBuff, '{');
|
|
|
|
|
char *jsonEnd = strrchr((char *)rxBuff, '}');
|
|
|
|
|
|
|
|
|
|
if (jsonStart && jsonEnd && jsonEnd > jsonStart)
|
|
|
|
|
{
|
|
|
|
|
int jsonLen = jsonEnd - jsonStart + 1;
|
|
|
|
|
char jsonStr[256] = {0};
|
|
|
|
|
strncpy(jsonStr, jsonStart, jsonLen);
|
|
|
|
|
|
|
|
|
|
int value = 0;
|
|
|
|
|
// LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// ģʽ<C4A3>л<EFBFBD>
|
|
|
|
|
if (sscanf(jsonStr, "{\"X10\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
switch (value)
|
|
|
|
|
{
|
|
|
|
|
case 1: // <20><><EFBFBD><EFBFBD>ģʽ
|
|
|
|
|
Switch_Mode(MODE_FLUSH);
|
|
|
|
|
printf("<EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ\n");
|
|
|
|
|
rxDataSize = 0;
|
|
|
|
|
memset(rxBuff, 0, sizeof(rxBuff));
|
|
|
|
|
break;
|
|
|
|
|
case 2: // <20><><EFBFBD><EFBFBD>ģʽ
|
|
|
|
|
Switch_Mode(MODE_IRRIGATION);
|
|
|
|
|
printf("<EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ\n");
|
|
|
|
|
rxDataSize = 0;
|
|
|
|
|
memset(rxBuff, 0, sizeof(rxBuff));
|
|
|
|
|
break;
|
|
|
|
|
case 3: // ֱ<><D6B1>ģʽ
|
|
|
|
|
Switch_Mode(MODE_DIRECT);
|
|
|
|
|
printf("<EFBFBD>л<EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD>ģʽ\n");
|
|
|
|
|
rxDataSize = 0;
|
|
|
|
|
memset(rxBuff, 0, sizeof(rxBuff));
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
// printf("<22><>Ч<EFBFBD><D0A7>ģʽֵ: %d\n", value);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// <20><EFBFBD>ˮ<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X24\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
// 1. <20><>ֹͣ<CDA3><D6B9>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD>
|
|
|
|
|
HAL_TIM_Base_Stop_IT(&htim2); // <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>TIM2<4D><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
switch (current_mode)
|
|
|
|
|
{
|
|
|
|
|
case MODE_IRRIGATION:
|
2025-05-20 09:41:22 +08:00
|
|
|
|
HIGH_LEVEL_PUMP_ON_TIME = (uint32_t)value;
|
2025-04-16 09:58:09 +08:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_FLUSH:
|
2025-05-20 09:41:22 +08:00
|
|
|
|
FLUSH_HIGH_PUMP_ON_TIME = (uint32_t)value;
|
2025-04-16 09:58:09 +08:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_DIRECT:
|
|
|
|
|
DIRECT_HIGH_PUMP_ON_TIME = (uint32_t)value;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
Time_Save(); // <20><><EFBFBD><EFBFBD><EFBFBD>ĺ<DEB8><C4BA><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
// 3. <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
|
|
|
|
Control_WaterPump(0);
|
|
|
|
|
Control_Fan1(0);
|
|
|
|
|
Control_Fan2(0);
|
|
|
|
|
|
|
|
|
|
// 4. <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
pump_timer = 0;
|
|
|
|
|
fan_timer = 0;
|
2025-05-20 09:41:22 +08:00
|
|
|
|
// timer_count = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵļ<DCB5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҲҪ<D2B2><D2AA><EFBFBD><EFBFBD>
|
2025-04-16 09:58:09 +08:00
|
|
|
|
|
|
|
|
|
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
__HAL_TIM_SET_COUNTER(&htim2, 0);
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ˮ<EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
Restart_Current_Mode(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰģʽ
|
|
|
|
|
|
|
|
|
|
HAL_TIM_Base_Start_IT(&htim2);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// <20><EFBFBD>ˮ<EFBFBD><CBAE>ֹͣʱ<D6B9><CAB1>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X25\":%d}", &value) == 1)
|
|
|
|
|
{
|
2025-05-20 09:41:22 +08:00
|
|
|
|
// 1. <20><>ֹͣ<CDA3><D6B9>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD>
|
|
|
|
|
HAL_TIM_Base_Stop_IT(&htim2); // <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>TIM2<4D><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-04-16 09:58:09 +08:00
|
|
|
|
switch (current_mode)
|
|
|
|
|
{
|
|
|
|
|
case MODE_IRRIGATION:
|
|
|
|
|
HIGH_LEVEL_PUMP_OFF_TIME = value;
|
|
|
|
|
// printf("<22><><EFBFBD><EFBFBD>ģʽˮ<CABD><CBAE>ֹͣʱ<D6B9><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>%d<><64><EFBFBD><EFBFBD>\n", value);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_FLUSH:
|
|
|
|
|
FLUSH_HIGH_PUMP_OFF_TIME = value;
|
|
|
|
|
// printf("<22><><EFBFBD><EFBFBD>ģʽˮ<CABD><CBAE>ֹͣʱ<D6B9><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>%d<><64><EFBFBD><EFBFBD>\n", value);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_DIRECT:
|
|
|
|
|
DIRECT_HIGH_PUMP_OFF_TIME = value;
|
|
|
|
|
|
|
|
|
|
// printf("ֱ<><D6B1>ģʽˮ<CABD><CBAE>ֹͣʱ<D6B9><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>%d<><64><EFBFBD><EFBFBD>\n", value);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
Time_Save(); // <20><><EFBFBD><EFBFBD><EFBFBD>ĺ<DEB8><C4BA><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
// 3. <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
|
|
|
|
Control_WaterPump(0);
|
|
|
|
|
Control_Fan1(0);
|
|
|
|
|
Control_Fan2(0);
|
|
|
|
|
|
|
|
|
|
// 4. <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
pump_timer = 0;
|
|
|
|
|
fan_timer = 0;
|
|
|
|
|
// timer_count = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵļ<DCB5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҲҪ<D2B2><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
__HAL_TIM_SET_COUNTER(&htim2, 0);
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ˮ<EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
Restart_Current_Mode(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰģʽ
|
|
|
|
|
|
|
|
|
|
HAL_TIM_Base_Start_IT(&htim2);
|
|
|
|
|
}
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X54\":%d}", &value) == 1)
|
|
|
|
|
{
|
2025-05-20 09:41:22 +08:00
|
|
|
|
// 1. <20><>ֹͣ<CDA3><D6B9>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD>
|
|
|
|
|
HAL_TIM_Base_Stop_IT(&htim2); // <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>TIM2<4D><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-04-16 09:58:09 +08:00
|
|
|
|
switch (current_mode)
|
|
|
|
|
{
|
|
|
|
|
case MODE_IRRIGATION:
|
|
|
|
|
HIGH_LEVEL_FAN_ON_TIME = value;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_FLUSH:
|
|
|
|
|
FLUSH_HIGH_FAN_ON_TIME = value;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_DIRECT:
|
|
|
|
|
DIRECT_HIGH_FAN_ON_TIME = value;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
Time_Save(); // <20><><EFBFBD><EFBFBD><EFBFBD>ĺ<DEB8><C4BA><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
// 3. <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
|
|
|
|
Control_WaterPump(0);
|
|
|
|
|
Control_Fan1(0);
|
|
|
|
|
Control_Fan2(0);
|
|
|
|
|
|
|
|
|
|
// 4. <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
pump_timer = 0;
|
|
|
|
|
fan_timer = 0;
|
|
|
|
|
// timer_count = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵļ<DCB5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҲҪ<D2B2><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
__HAL_TIM_SET_COUNTER(&htim2, 0);
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ˮ<EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
Restart_Current_Mode(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰģʽ
|
|
|
|
|
|
|
|
|
|
HAL_TIM_Base_Start_IT(&htim2);
|
|
|
|
|
}
|
|
|
|
|
// <20>ĸ<DEB8>Һλ<D2BA><CEBB><EFBFBD><EFBFBD>ֹͣʱ<D6B9><CAB1>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X55\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
switch (current_mode)
|
|
|
|
|
{
|
|
|
|
|
case MODE_IRRIGATION:
|
|
|
|
|
HIGH_LEVEL_FAN_OFF_TIME = value;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_FLUSH:
|
|
|
|
|
FLUSH_HIGH_FAN_OFF_TIME = value;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_DIRECT:
|
|
|
|
|
DIRECT_HIGH_FAN_OFF_TIME = value;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
Time_Save(); // <20><><EFBFBD><EFBFBD><EFBFBD>ĺ<DEB8><C4BA><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
// 3. <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
|
|
|
|
Control_WaterPump(0);
|
|
|
|
|
Control_Fan1(0);
|
|
|
|
|
Control_Fan2(0);
|
|
|
|
|
|
|
|
|
|
// 4. <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
pump_timer = 0;
|
|
|
|
|
fan_timer = 0;
|
2025-05-20 09:41:22 +08:00
|
|
|
|
// timer_count = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵļ<DCB5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҲҪ<D2B2><D2AA><EFBFBD><EFBFBD>
|
2025-04-16 09:58:09 +08:00
|
|
|
|
|
|
|
|
|
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
__HAL_TIM_SET_COUNTER(&htim2, 0);
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ˮ<EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
Restart_Current_Mode(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰģʽ
|
|
|
|
|
|
|
|
|
|
HAL_TIM_Base_Start_IT(&htim2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20>ĵ<DEB8>Һλ<D2BA><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X56\":%d}", &value) == 1)
|
|
|
|
|
{
|
2025-05-20 09:41:22 +08:00
|
|
|
|
// 1. <20><>ֹͣ<CDA3><D6B9>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD>
|
|
|
|
|
HAL_TIM_Base_Stop_IT(&htim2); // <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>TIM2<4D><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-04-16 09:58:09 +08:00
|
|
|
|
switch (current_mode)
|
|
|
|
|
{
|
|
|
|
|
case MODE_IRRIGATION:
|
|
|
|
|
LOW_LEVEL_FAN_ON_TIME = value;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_FLUSH:
|
|
|
|
|
FLUSH_LOW_FAN_ON_TIME = value;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_DIRECT:
|
|
|
|
|
DIRECT_LOW_FAN_ON_TIME = value;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
Time_Save(); // <20><><EFBFBD><EFBFBD><EFBFBD>ĺ<DEB8><C4BA><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
// 3. <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
2025-05-20 09:41:22 +08:00
|
|
|
|
Control_WaterPump(0);
|
2025-04-16 09:58:09 +08:00
|
|
|
|
Control_Fan1(0);
|
|
|
|
|
Control_Fan2(0);
|
|
|
|
|
|
|
|
|
|
// 4. <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
pump_timer = 0;
|
2025-05-20 09:41:22 +08:00
|
|
|
|
fan_timer = 0;
|
2025-04-16 09:58:09 +08:00
|
|
|
|
// timer_count = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵļ<DCB5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҲҪ<D2B2><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
__HAL_TIM_SET_COUNTER(&htim2, 0);
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ˮ<EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
Restart_Current_Mode(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰģʽ
|
|
|
|
|
|
|
|
|
|
HAL_TIM_Base_Start_IT(&htim2);
|
|
|
|
|
}
|
|
|
|
|
// <20>ĵ<DEB8>Һλ<D2BA><CEBB><EFBFBD><EFBFBD>ֹͣʱ<D6B9><CAB1>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X57\":%d}", &value) == 1)
|
|
|
|
|
{
|
2025-05-20 09:41:22 +08:00
|
|
|
|
// 1. <20><>ֹͣ<CDA3><D6B9>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD>
|
|
|
|
|
HAL_TIM_Base_Stop_IT(&htim2); // <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>TIM2<4D><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-04-16 09:58:09 +08:00
|
|
|
|
switch (current_mode)
|
|
|
|
|
{
|
|
|
|
|
case MODE_IRRIGATION:
|
|
|
|
|
LOW_LEVEL_FAN_OFF_TIME = value;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_FLUSH:
|
|
|
|
|
FLUSH_LOW_FAN_OFF_TIME = value;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_DIRECT:
|
|
|
|
|
DIRECT_LOW_FAN_OFF_TIME = value;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
Time_Save(); // <20><><EFBFBD><EFBFBD><EFBFBD>ĺ<DEB8><C4BA><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
// 3. <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
|
|
|
|
Control_WaterPump(0);
|
|
|
|
|
Control_Fan1(0);
|
|
|
|
|
Control_Fan2(0);
|
|
|
|
|
|
|
|
|
|
// 4. <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
pump_timer = 0;
|
|
|
|
|
fan_timer = 0;
|
|
|
|
|
// timer_count = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵļ<DCB5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҲҪ<D2B2><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
__HAL_TIM_SET_COUNTER(&htim2, 0);
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ˮ<EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
Restart_Current_Mode(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰģʽ
|
|
|
|
|
|
|
|
|
|
HAL_TIM_Base_Start_IT(&htim2);
|
|
|
|
|
}
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X15\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
if (value == 1)
|
|
|
|
|
{
|
|
|
|
|
ozone_running = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ozone_timer = 0; // <20><><EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
Ozone_Control(1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// printf("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
|
|
|
|
|
}
|
|
|
|
|
else if (value == 0)
|
|
|
|
|
{
|
|
|
|
|
ozone_running = 0; // ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ozone_timer = 0; // <20><><EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
Ozone_Control(0); // <20><><EFBFBD><EFBFBD><EFBFBD>رճ<D8B1><D5B3><EFBFBD>
|
|
|
|
|
// printf("<22><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X20\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
OZONE_ON_TIME = value;
|
|
|
|
|
ozone_timer = 0; // <20><><EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1>
|
2025-05-20 09:41:22 +08:00
|
|
|
|
Save_Ozone_Time_To_EEPROM(OZONE_ON_TIME, OZONE_OFF_TIME);
|
2025-04-16 09:58:09 +08:00
|
|
|
|
// printf("<22><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>: %d<><64><EFBFBD><EFBFBD>\n", value);
|
|
|
|
|
}
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X21\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
OZONE_OFF_TIME = value;
|
|
|
|
|
ozone_timer = 0; // <20><><EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1>
|
2025-05-20 09:41:22 +08:00
|
|
|
|
Save_Ozone_Time_To_EEPROM(OZONE_ON_TIME, OZONE_OFF_TIME); // <20><><EFBFBD>浽EEPROM
|
2025-04-16 09:58:09 +08:00
|
|
|
|
// printf("<22><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD>ر<EFBFBD>ʱ<EFBFBD><CAB1>: %d<><64><EFBFBD><EFBFBD>\n", value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ˮ<>ÿ<EFBFBD><C3BF><EFBFBD>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X12\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
if (value == CMD_ON || value == CMD_OFF)
|
|
|
|
|
{
|
|
|
|
|
force_pump_off = (value == CMD_OFF); // <20><><EFBFBD><EFBFBD>ǿ<EFBFBD>ƹرձ<D8B1>־
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC>ȷ<EFBFBD><C8B7>ǿ<EFBFBD>ƹرձ<D8B1>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (value == CMD_ON) {
|
|
|
|
|
force_pump_off = 0;
|
|
|
|
|
Control_WaterPump(1);
|
|
|
|
|
printf("ˮ<EFBFBD><EFBFBD>ǿ<EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD>\n");
|
|
|
|
|
} else {
|
|
|
|
|
force_pump_off = 1;
|
|
|
|
|
Control_WaterPump(0);
|
|
|
|
|
printf("ˮ<EFBFBD><EFBFBD>ǿ<EFBFBD>ƹر<EFBFBD>\n");
|
|
|
|
|
}
|
|
|
|
|
rxDataSize = 0;
|
|
|
|
|
memset(rxBuff, 0, sizeof(rxBuff));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X13\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
if (value == CMD_ON || value == CMD_OFF)
|
|
|
|
|
{
|
|
|
|
|
force_fan_off = (value == CMD_OFF); // <20><><EFBFBD><EFBFBD>ǿ<EFBFBD>ƹرձ<D8B1>־
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC>ȷ<EFBFBD><C8B7>ǿ<EFBFBD>ƹرձ<D8B1>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (value == CMD_ON) {
|
|
|
|
|
force_fan_off = 0;
|
|
|
|
|
Control_Fan1(1);
|
|
|
|
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1ǿ<EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD>\n");
|
|
|
|
|
} else {
|
|
|
|
|
force_fan_off = 1;
|
|
|
|
|
Control_Fan1(0);
|
|
|
|
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1ǿ<EFBFBD>ƹر<EFBFBD>\n");
|
|
|
|
|
}
|
|
|
|
|
// printf("<22><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>: %s\n", value ? "<22><><EFBFBD><EFBFBD>" : "<22>ر<EFBFBD>");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X14\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
if (value == CMD_ON || value == CMD_OFF)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>2<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>Ҳ<EFBFBD><D2B2>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ǿ<EFBFBD>ƹرձ<D8B1>־
|
|
|
|
|
if (value == CMD_ON) {
|
|
|
|
|
force_fan_off = 0; // <20><><EFBFBD><EFBFBD>ǿ<EFBFBD>ƹرձ<D8B1>־
|
|
|
|
|
Control_Fan2(1);
|
|
|
|
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2ǿ<EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD>\n");
|
|
|
|
|
} else {
|
|
|
|
|
force_fan_off = 1; // <20><><EFBFBD><EFBFBD>ǿ<EFBFBD>ƹرձ<D8B1>־
|
|
|
|
|
Control_Fan2(0);
|
|
|
|
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2ǿ<EFBFBD>ƹر<EFBFBD>\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Ĥ<EFBFBD><C4A4><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> X16 <20><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>)
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X18\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
if (value == CMD_ON || value == CMD_OFF)
|
|
|
|
|
{
|
|
|
|
|
Control_Heater((uint8_t)value);
|
|
|
|
|
// printf("<22><><EFBFBD><EFBFBD>Ĥ<EFBFBD><C4A4><EFBFBD><EFBFBD>: %s\n", value ? "<22><><EFBFBD><EFBFBD>" : "<22>ر<EFBFBD>");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X22\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
temp_lower_limit = (float)value;
|
|
|
|
|
// printf("<22><><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>Ϊ: %.1f<EFBFBD><EFBFBD>\n", temp_lower_limit);
|
|
|
|
|
}
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X23\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
temp_upper_limit = (float)value;
|
|
|
|
|
// printf("<22><><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>Ϊ: %.1f<EFBFBD><EFBFBD>\n", temp_upper_limit);
|
|
|
|
|
}
|
|
|
|
|
// <20>ܿ<EFBFBD><DCBF><EFBFBD>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X59\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
if (value == CMD_ON || value == CMD_OFF)
|
|
|
|
|
{
|
|
|
|
|
Control_All_Devices(value); // <20><><EFBFBD><EFBFBD><EFBFBD>ܿ<EFBFBD><DCBF>ؿ<EFBFBD><D8BF>ƺ<EFBFBD><C6BA><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><D7BF>أ<EFBFBD>X32<33><32>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X49\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
if (value == 1)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-05-20 09:41:22 +08:00
|
|
|
|
|
2025-04-16 09:58:09 +08:00
|
|
|
|
phosphorus_timer = 0;
|
|
|
|
|
polarity_state = !polarity_state;
|
2025-05-20 09:41:22 +08:00
|
|
|
|
Control_Phosphorus_Polarity(); // <20><><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
Phosphorus_Control_Update();
|
2025-04-16 09:58:09 +08:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2025-05-20 09:41:22 +08:00
|
|
|
|
Control_Phosphorus(0); // <20>رճ<D8B1><D5B3><EFBFBD>
|
2025-04-16 09:58:09 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X51\":%d}", &value) == 1)
|
|
|
|
|
{
|
2025-05-20 09:41:22 +08:00
|
|
|
|
PHOSPHORUS_RUN_TIME=value;
|
2025-04-16 09:58:09 +08:00
|
|
|
|
// printf("<22><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD><CEAA>%d<><64><EFBFBD><EFBFBD>\n", value);
|
|
|
|
|
}
|
|
|
|
|
// <20><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD>ֹͣʱ<D6B9>䣨X34<33><34>
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X52\":%d}", &value) == 1)
|
|
|
|
|
{
|
2025-05-20 09:41:22 +08:00
|
|
|
|
PHOSPHORUS_STOP_TIME=value;
|
2025-04-16 09:58:09 +08:00
|
|
|
|
// printf("<22><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD>ֹͣʱ<D6B9><CAB1>Ϊ<EFBFBD><CEAA>%d<><64><EFBFBD><EFBFBD>\n", value);
|
|
|
|
|
}
|
2025-05-20 09:41:22 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>̿<EFBFBD><CCBF>ƴ<EFBFBD><C6B4><EFBFBD>
|
|
|
|
|
if (sscanf(jsonStr, "{\"X53\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
if (value == 1) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
Control_Dredge(1);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (value == 0) // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
Control_Dredge(0);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-04-16 09:58:09 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽר<CABD>ÿ<EFBFBD><C3BF>ư<EFBFBD>ť
|
|
|
|
|
else if (sscanf(jsonStr, "{\"X58\":%d}", &value) == 1)
|
|
|
|
|
{
|
|
|
|
|
if (value == 1)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|
|
|
|
Switch_Mode(MODE_SPECIAL);
|
|
|
|
|
// printf("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ\n");
|
|
|
|
|
}
|
|
|
|
|
else if (value == 0)
|
|
|
|
|
{
|
|
|
|
|
Switch_Mode(MODE_DIRECT);
|
|
|
|
|
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>л<EFBFBD><D0BB><EFBFBD>ֱ<EFBFBD><D6B1>ģʽ
|
|
|
|
|
|
|
|
|
|
printf("ֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD>ģʽ\n");
|
|
|
|
|
}
|
|
|
|
|
rxDataSize = 0;
|
|
|
|
|
memset(rxBuff, 0, sizeof(rxBuff));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (parameters_changed)
|
|
|
|
|
{
|
|
|
|
|
// Restart_Current_Mode();
|
|
|
|
|
// parameters_changed = 0; // <20><><EFBFBD>ñ<EFBFBD>־
|
|
|
|
|
}
|
|
|
|
|
rxDataSize = 0;
|
|
|
|
|
memset(rxBuff, 0, sizeof(rxBuff));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MQTT<54><54>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void Inf_EC800_MQTT_Init(void)
|
|
|
|
|
{
|
|
|
|
|
char mqtt_cmd[128]; // <20><><EFBFBD>ڴ洢AT<41><54><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// <20>ȶϿ<C8B6><CFBF><EFBFBD><EFBFBD>ܴ<EFBFBD><DCB4>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Inf_4G_SendAtCmd((uint8_t *)"AT+QMTDISC=0\r\n");
|
|
|
|
|
HAL_Delay(300);
|
|
|
|
|
Inf_4G_SendAtCmd((uint8_t *)"AT+QMTCLOSE=0\r\n");
|
|
|
|
|
HAL_Delay(300);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>ģʽ
|
|
|
|
|
Inf_4G_SendAtCmd((uint8_t *)"AT+QMTCFG=\"recv/mode\",0,0,0\r\n");
|
|
|
|
|
HAL_Delay(100);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>keepaliveʱ<65><CAB1>Ϊ60<36><30>
|
|
|
|
|
Inf_4G_SendAtCmd((uint8_t *)"AT+QMTCFG=\"keepalive\",0,60\r\n");
|
|
|
|
|
HAL_Delay(100);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
sprintf(mqtt_cmd, "AT+QMTOPEN=0,\"%s\",%s\r\n", MQTT_SERVER_IP, MQTT_SERVER_PORT);
|
|
|
|
|
Inf_4G_SendAtCmd((uint8_t *)mqtt_cmd);
|
|
|
|
|
HAL_Delay(2000);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Ψһ<CEA8>Ŀͻ<C4BF><CDBB><EFBFBD>ID
|
|
|
|
|
sprintf(mqtt_cmd, "AT+QMTCONN=0,\"%s\",\"%s\",\"%s\"\r\n",
|
|
|
|
|
MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD);
|
|
|
|
|
Inf_4G_SendAtCmd((uint8_t *)mqtt_cmd);
|
|
|
|
|
HAL_Delay(1000);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
sprintf(mqtt_cmd, "AT+QMTSUB=0,1,\"%s\",1\r\n", MQTT_TOPIC);
|
|
|
|
|
Inf_4G_SendAtCmd((uint8_t *)mqtt_cmd);
|
|
|
|
|
HAL_Delay(1000);
|
|
|
|
|
}
|
|
|
|
|
// <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD>建<EFBFBD><E5BBBA><EFBFBD><EFBFBD>
|
|
|
|
|
#define TX_BUFFER_SIZE 256
|
|
|
|
|
uint8_t txBuff[TX_BUFFER_SIZE]; // <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// MQTT<54><54><EFBFBD>ݷ<EFBFBD><DDB7>ͺ<EFBFBD><CDBA><EFBFBD>
|
|
|
|
|
// MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD>
|
|
|
|
|
void Inf_EC800_SendMqttData(uint16_t id, uint8_t data[], uint16_t dataLen)
|
|
|
|
|
{
|
|
|
|
|
memset(txBuff, 0, sizeof(txBuff));
|
|
|
|
|
|
|
|
|
|
sprintf((char *)txBuff, "AT+QMTPUB=0,0,0,0,\"%s\"\r\n", MQTT_PUB_TOPIC);
|
|
|
|
|
Inf_4G_SendAtCmd(txBuff);
|
|
|
|
|
|
|
|
|
|
HAL_UART_Transmit(&huart2, data, dataLen, 1000);
|
|
|
|
|
HAL_UART_Transmit(&huart2, (uint8_t *)"\x1A", 1, 1000);
|
|
|
|
|
|
|
|
|
|
HAL_Delay(100);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void Upload_Device_Data(void)
|
|
|
|
|
{
|
|
|
|
|
uint8_t payload[256];
|
|
|
|
|
uint16_t dataLen;
|
|
|
|
|
|
|
|
|
|
Update_All_Status(); // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ӡ
|
|
|
|
|
Check_Power_Source();
|
2025-05-20 09:41:22 +08:00
|
|
|
|
uint8_t power_type = Get_Power_Type();
|
|
|
|
|
Print_Temperature(data1);
|
2025-04-16 09:58:09 +08:00
|
|
|
|
Get_Signal_Strength();
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>ǰģʽ<C4A3><CABD>ˮ<EFBFBD><CBAE>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
uint32_t current_pump_on = 0;
|
|
|
|
|
uint32_t current_pump_off = 0;
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD>Ӹ<EFBFBD>Һλ<D2BA><CEBB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
uint32_t current_high_fan_on = 0;
|
|
|
|
|
uint32_t current_high_fan_off = 0;
|
|
|
|
|
// <20><><EFBFBD>ӵ<EFBFBD>Һλ<D2BA><CEBB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
uint32_t current_low_fan_on = 0;
|
|
|
|
|
uint32_t current_low_fan_off = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch (current_mode)
|
|
|
|
|
{
|
|
|
|
|
case MODE_IRRIGATION:
|
|
|
|
|
current_pump_on = HIGH_LEVEL_PUMP_ON_TIME;
|
|
|
|
|
current_pump_off = HIGH_LEVEL_PUMP_OFF_TIME;
|
|
|
|
|
current_high_fan_on = HIGH_LEVEL_FAN_ON_TIME;
|
|
|
|
|
current_high_fan_off = HIGH_LEVEL_FAN_OFF_TIME;
|
|
|
|
|
current_low_fan_on = LOW_LEVEL_FAN_ON_TIME; // <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>Һλ<D2BA><CEBB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
current_low_fan_off = LOW_LEVEL_FAN_OFF_TIME;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_FLUSH:
|
|
|
|
|
current_pump_on = FLUSH_HIGH_PUMP_ON_TIME;
|
|
|
|
|
current_pump_off = FLUSH_HIGH_PUMP_OFF_TIME;
|
|
|
|
|
current_high_fan_on = FLUSH_HIGH_FAN_ON_TIME;
|
|
|
|
|
current_high_fan_off = FLUSH_HIGH_FAN_OFF_TIME;
|
|
|
|
|
current_low_fan_on = FLUSH_LOW_FAN_ON_TIME; // <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>Һλ<D2BA><CEBB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
current_low_fan_off = FLUSH_LOW_FAN_OFF_TIME;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MODE_DIRECT:
|
|
|
|
|
current_pump_on = DIRECT_HIGH_PUMP_ON_TIME;
|
|
|
|
|
current_pump_off = DIRECT_HIGH_PUMP_OFF_TIME;
|
|
|
|
|
current_high_fan_on = DIRECT_HIGH_FAN_ON_TIME;
|
|
|
|
|
current_high_fan_off = DIRECT_HIGH_FAN_OFF_TIME;
|
|
|
|
|
current_low_fan_on = DIRECT_LOW_FAN_ON_TIME; // ֱ<><D6B1>ģʽ<C4A3><CABD>Һλ<D2BA><CEBB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
current_low_fan_off = DIRECT_LOW_FAN_OFF_TIME;
|
|
|
|
|
break;
|
|
|
|
|
case MODE_SPECIAL:
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ֱ<EFBFBD><D6B1>ģʽ<C4A3><CABD>ͬ<EFBFBD><CDAC>
|
|
|
|
|
current_high_fan_on = DIRECT_HIGH_FAN_ON_TIME; // 40<34><30><EFBFBD><EFBFBD>
|
|
|
|
|
current_high_fan_off = DIRECT_HIGH_FAN_OFF_TIME; // 2<><32><EFBFBD><EFBFBD>
|
|
|
|
|
current_low_fan_on = DIRECT_LOW_FAN_ON_TIME; // 10<31><30><EFBFBD><EFBFBD>
|
|
|
|
|
current_low_fan_off = DIRECT_LOW_FAN_OFF_TIME; // 20<32><30><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD>ˮ<EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
|
|
|
|
switch(special_phase) {
|
|
|
|
|
case SPECIAL_INITIAL_STOP:
|
|
|
|
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD> - 24Сʱֹͣ\n");
|
|
|
|
|
current_pump_on = 0;
|
|
|
|
|
current_pump_off = SPECIAL_INITIAL_STOP_TIME; // 1440<34><30><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SPECIAL_FIRST_PHASE:
|
|
|
|
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD> - 6Сʱѭ<CAB1><D1AD>\n");
|
|
|
|
|
current_pump_on = SPECIAL_PUMP_RUN_TIME; // 1<><31><EFBFBD><EFBFBD>
|
|
|
|
|
current_pump_off = SPECIAL_FIRST_STOP_TIME; // 359<35><39><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SPECIAL_SECOND_PHASE:
|
|
|
|
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD> - 4Сʱѭ<CAB1><D1AD>\n");
|
|
|
|
|
current_pump_on = SPECIAL_PUMP_RUN_TIME; // 1<><31><EFBFBD><EFBFBD>
|
|
|
|
|
current_pump_off = SPECIAL_SECOND_STOP_TIME; // 239<33><39><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>\n");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><>ӡ<EFBFBD><D3A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
// printf("\n<><6E>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ֵ:\n");
|
|
|
|
|
// printf("ģʽ: %d\n", current_mode);
|
|
|
|
|
// printf("ˮ<>ÿ<EFBFBD><C3BF><EFBFBD>ʱ<EFBFBD><CAB1>: %d<><64><EFBFBD><EFBFBD>\n", current_pump_on);
|
|
|
|
|
// printf("ˮ<>ùر<C3B9>ʱ<EFBFBD><CAB1>: %d<><64><EFBFBD><EFBFBD>\n", current_pump_off);
|
|
|
|
|
// printf("<22><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>: %d<><64><EFBFBD><EFBFBD>\n", current_high_fan_on);
|
|
|
|
|
// printf("<22><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ʱ<EFBFBD><CAB1>: %d<><64><EFBFBD><EFBFBD>\n", current_high_fan_off);
|
|
|
|
|
// printf("<22><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>: %d<><64><EFBFBD><EFBFBD>\n", current_low_fan_on);
|
|
|
|
|
// printf("<22><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ʱ<EFBFBD><CAB1>: %d<><64><EFBFBD><EFBFBD>\n", current_low_fan_off);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>JSON<4F><4E><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>base_energy<67><79>
|
|
|
|
|
dataLen = sprintf((char *)payload,
|
|
|
|
|
"{"
|
|
|
|
|
|
|
|
|
|
"\"X4\":%d," // <20>ź<EFBFBD>ǿ<EFBFBD><C7BF> X4
|
|
|
|
|
"\"X10\":%d," // <20>ϴ<EFBFBD><CFB4><EFBFBD>ǰģʽ X10
|
|
|
|
|
"\"X12\":%d," // ˮ<><CBAE> X12
|
|
|
|
|
"\"X13\":%d," // <20><><EFBFBD><EFBFBD>1 X13
|
|
|
|
|
"\"X14\":%d," // <20><><EFBFBD><EFBFBD>2 X14
|
|
|
|
|
"\"X15\":%d," // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ X15
|
|
|
|
|
"\"X18\":%d," // <20><><EFBFBD><EFBFBD>Ĥ<EFBFBD><C4A4><EFBFBD><EFBFBD> X18
|
|
|
|
|
"\"X20\":%d," // <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> X20
|
|
|
|
|
"\"X21\":%d," // <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ʱ<EFBFBD><CAB1> X21
|
|
|
|
|
"\"X5\":%.2f," // <20>¶<EFBFBD> X5
|
|
|
|
|
"\"X22\":%.1f," // <20>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD> X22
|
|
|
|
|
"\"X23\":%.1f," // <20>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD> X23
|
|
|
|
|
"\"X24\":%d," // <20><>ǰˮ<C7B0>ÿ<EFBFBD><C3BF><EFBFBD>ʱ<EFBFBD><CAB1> X24
|
|
|
|
|
"\"X25\":%d," // <20><>ǰˮ<C7B0>ùر<C3B9>ʱ<EFBFBD><CAB1> X25
|
|
|
|
|
"\"X35\":%d," //<2F><>ǰˮ<C7B0>õĹ<C3B5><C4B9><EFBFBD> X35
|
|
|
|
|
"\"X37\":%d," //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>1<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD> X37
|
|
|
|
|
"\"X38\":%d," //<2F><>ǰˮ<C7B0>õĹ<C3B5><C4B9><EFBFBD> X38
|
|
|
|
|
"\"X44\":%d," // <20><>ǰˮ<C7B0>ùر<C3B9>ʱ<EFBFBD><CAB1> X44
|
|
|
|
|
"\"X46\":%d," // <20>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD> X46
|
|
|
|
|
"\"X47\":%d," // X47
|
|
|
|
|
"\"X49\":%d," // <20><><EFBFBD><EFBFBD><D7BF><EFBFBD> X49
|
|
|
|
|
"\"X50\":%d," // <20><><EFBFBD><EFBFBD>״̬ X50
|
|
|
|
|
"\"X51\":%d," // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> X51
|
|
|
|
|
"\"X52\":%d," // <20><><EFBFBD><EFBFBD>ֹͣʱ<D6B9><CAB1> X52
|
|
|
|
|
"\"X53\":%d," // <20><><EFBFBD><EFBFBD> X53
|
|
|
|
|
"\"X54\":%d," // <20><>Һλ<D2BA><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> X54
|
|
|
|
|
"\"X55\":%d," // <20><>Һλ<D2BA><CEBB><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ʱ<EFBFBD><CAB1> X55
|
|
|
|
|
"\"X56\":%d," // <20><>Һλ<D2BA><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
"\"X57\":%d," // <20><>Һλ<D2BA><CEBB><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
"\"X58\":%d," // <20><>Һλ<D2BA><CEBB><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ʱ<EFBFBD><CAB1>
|
2025-05-20 09:41:22 +08:00
|
|
|
|
"\"X59\":%d," // ϵͳ״̬
|
|
|
|
|
"\"X300\":%.6f," // <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>ֶ<EFBFBD> X300
|
|
|
|
|
"\"X001\":\"%s\"" // <20><><EFBFBD><EFBFBD>ICCID<49>ֶ<EFBFBD>
|
2025-04-16 09:58:09 +08:00
|
|
|
|
"}",
|
|
|
|
|
// device_status[11], // ˮ<><CBAE> X1
|
|
|
|
|
gsm_signal_strength, // <20>ź<EFBFBD>ǿ<EFBFBD><C7BF> X4
|
|
|
|
|
current_mode, // <20>ϴ<EFBFBD><CFB4><EFBFBD>ǰģʽ X10
|
|
|
|
|
device_status[1], // ˮ<><CBAE> X12
|
|
|
|
|
device_status[2], // <20><><EFBFBD><EFBFBD>1 X13
|
|
|
|
|
device_status[3], // <20><><EFBFBD><EFBFBD>2 X14
|
|
|
|
|
ozone_running, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ X15
|
|
|
|
|
device_status[7], // <20><><EFBFBD><EFBFBD>Ĥ״̬ X18
|
|
|
|
|
OZONE_ON_TIME, // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> X20
|
|
|
|
|
OZONE_OFF_TIME, // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ʱ<EFBFBD><CAB1> X21
|
|
|
|
|
temperature, // <20><><EFBFBD>¶<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ӵ<EFBFBD>JSON<4F><4E> X5
|
|
|
|
|
temp_lower_limit, // <20>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD> X22
|
|
|
|
|
temp_upper_limit, // <20>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD> X23
|
|
|
|
|
current_pump_on, // ֻ<>ϴ<EFBFBD>ˮ<EFBFBD><CBAE>ʱ<EFBFBD><CAB1> X24
|
|
|
|
|
current_pump_off, // ֻ<>ϴ<EFBFBD>ˮ<EFBFBD><CBAE>ʱ<EFBFBD><CAB1> X25
|
|
|
|
|
device_fault.pump_fault, // <20><><EFBFBD>ӹ<EFBFBD><D3B9><EFBFBD>״̬ 0:<3A><><EFBFBD><EFBFBD> 1:<3A><><EFBFBD><EFBFBD> X35
|
|
|
|
|
device_fault.fan1_fault, //<2F><><EFBFBD><EFBFBD>1<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD> X37
|
|
|
|
|
device_fault.fan2_fault, //<2F><><EFBFBD><EFBFBD>2<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD> X38
|
|
|
|
|
device_status[5], // <20><>Һλˮ<CEBB><CBAE>״̬ X44
|
|
|
|
|
device_status[8], // <20>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD> X46
|
2025-05-20 09:41:22 +08:00
|
|
|
|
power_type, // <20><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>״̬ X47
|
2025-04-16 09:58:09 +08:00
|
|
|
|
Dephosphorization_state, // <20><><EFBFBD><EFBFBD><D7BF><EFBFBD>״̬ X49
|
|
|
|
|
device_status[9], // <20><><EFBFBD><EFBFBD>״̬ X50
|
|
|
|
|
PHOSPHORUS_RUN_TIME, // <20><>ǰ<EFBFBD><C7B0><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
PHOSPHORUS_STOP_TIME, // <20><>ǰ<EFBFBD><C7B0><EFBFBD>õ<EFBFBD>ֹͣʱ<D6B9><CAB1>
|
|
|
|
|
device_status[10], // <20><><EFBFBD><EFBFBD>״̬ X53
|
|
|
|
|
current_high_fan_on, // X54
|
|
|
|
|
current_high_fan_off, // X55
|
|
|
|
|
current_low_fan_on, // X56
|
|
|
|
|
current_low_fan_off, // X57
|
|
|
|
|
(current_mode == MODE_SPECIAL) ? 1 : 0, // <20><><EFBFBD><EFBFBD>ģʽ<C4A3>Σ<D7B6><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> x58
|
2025-05-20 09:41:22 +08:00
|
|
|
|
device_status[11], // ϵͳ״̬ X59
|
|
|
|
|
base_energy, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ӵ<EFBFBD>JSON<4F><4E> X300
|
|
|
|
|
sim_iccid // ICCIDֵ
|
2025-04-16 09:58:09 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Inf_EC800_SendMqttData(0, payload, dataLen);
|
|
|
|
|
// <20><><EFBFBD>ӵ<EFBFBD><D3B5>Դ<EFBFBD>ӡ
|
|
|
|
|
// printf("<22><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD>͵<EFBFBD>ˮ<EFBFBD><CBAE>ֵ<EFBFBD><D6B5>%d\r\n", device_status[11]);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// pump_flow = 0;
|
|
|
|
|
// device_status[11] = 0;
|
|
|
|
|
// flow_to_upload = 0;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ǿ<EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD>
|
|
|
|
|
int8_t gsm_signal_strength = 0;
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD>ź<EFBFBD>ǿ<EFBFBD>Ⱥ<EFBFBD><C8BA><EFBFBD>
|
|
|
|
|
void Get_Signal_Strength(void)
|
|
|
|
|
{
|
|
|
|
|
memset(rxBuff, 0, sizeof(rxBuff));
|
|
|
|
|
rxDataSize = 0;
|
|
|
|
|
|
|
|
|
|
Inf_4G_SendAtCmd("AT+CSQ\r\n");
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ǿ<EFBFBD><C7BF>
|
|
|
|
|
char *ptr = strstr((char *)rxBuff, "+CSQ:");
|
|
|
|
|
if (ptr)
|
|
|
|
|
{
|
|
|
|
|
int csq;
|
|
|
|
|
if (sscanf(ptr, "+CSQ: %d", &csq) == 1)
|
|
|
|
|
{
|
|
|
|
|
gsm_signal_strength = csq;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// ... existing code ...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// ... existing code ...
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
|
|
|
|
|
static uint32_t last_check_time = 0;
|
|
|
|
|
static uint8_t reconnect_count = 0;
|
|
|
|
|
#define MAX_RECONNECT_ATTEMPTS 3
|
|
|
|
|
#define CHECK_INTERVAL 60000 // 60<36><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void Check_4G_Connection(void)
|
|
|
|
|
{
|
|
|
|
|
uint32_t current_time = HAL_GetTick();
|
|
|
|
|
|
|
|
|
|
// ÿ60<36><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|
|
|
|
if(current_time - last_check_time >= CHECK_INTERVAL)
|
|
|
|
|
{
|
|
|
|
|
last_check_time = current_time;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
memset(rxBuff, 0, sizeof(rxBuff));
|
|
|
|
|
rxDataSize = 0;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD>״̬
|
|
|
|
|
Inf_4G_SendAtCmd("AT+QMTCONN?\r\n");
|
|
|
|
|
HAL_Delay(100);
|
|
|
|
|
|
|
|
|
|
// ֻ<>е<EFBFBD>MQTTδ<54><CEB4><EFBFBD><EFBFBD>ʱ<EFBFBD>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if(!strstr((char *)rxBuff, "+QMTCONN: 0,3"))
|
|
|
|
|
{
|
|
|
|
|
// printf("MQTT<54><54><EFBFBD>ӶϿ<D3B6><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...\n");
|
|
|
|
|
|
|
|
|
|
if(reconnect_count < MAX_RECONNECT_ATTEMPTS)
|
|
|
|
|
{
|
|
|
|
|
reconnect_count++;
|
|
|
|
|
Inf_EC800_MQTT_Init(); // ֻ<><D6BB><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>MQTT<54><54><EFBFBD><EFBFBD>
|
|
|
|
|
// printf("MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d/%d\n", reconnect_count, MAX_RECONNECT_ATTEMPTS);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// printf("MQTT<54><54><EFBFBD><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>࣬<EFBFBD><E0A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
reconnect_count = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-20 09:41:22 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ӻ<EFBFBD>ȡICCID<49>ĺ<EFBFBD><C4BA><EFBFBD>
|
|
|
|
|
void Get_ICCID(void)
|
|
|
|
|
{
|
|
|
|
|
memset(rxBuff, 0, sizeof(rxBuff));
|
|
|
|
|
rxDataSize = 0;
|
|
|
|
|
|
|
|
|
|
Inf_4G_SendAtCmd("AT+QCCID\r\n");
|
|
|
|
|
HAL_Delay(100);
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ICCID
|
|
|
|
|
char *ptr = strstr((char *)rxBuff, "+QCCID:");
|
|
|
|
|
if (ptr)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>"+QCCID: "<22><>ֱ<EFBFBD>ӻ<EFBFBD>ȡICCID
|
|
|
|
|
ptr += 8; // <20><><EFBFBD><EFBFBD>"+QCCID: "
|
|
|
|
|
// ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD>ܵĿո<C4BF><D5B8>ͻ<EFBFBD><CDBB>з<EFBFBD>
|
|
|
|
|
while (*ptr == ' ') ptr++;
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ICCID<49><44>sim_iccid<69><64><EFBFBD><EFBFBD>
|
|
|
|
|
strncpy(sim_iccid, ptr, ICCID_LENGTH - 1);
|
|
|
|
|
sim_iccid[ICCID_LENGTH - 1] = '\0'; // ȷ<><C8B7><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
}
|