此筆記由個人整理
華爲IOT LiteOS開發實戰營
第七天
一、控制移植
定義變量(在數據上報時使用)
uint8_t Light_state;
uint8_t Motor_state;
按鍵一
- 代碼
//按鍵1任務
void Key1_task_entry()
{
if (Light_state == 0)
{
//此處燈控制開
HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_SET);
POINT_COLOR = GREEN;
LCD_ShowString(175, 198, 210, 32, 32, "ON ");
Light_state = 1;
}
else
{
//此處燈控制關
HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_RESET);
POINT_COLOR = RED;
LCD_ShowString(175, 198, 210, 32, 32, "OFF");
Light_state = 0;
}
__HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_2);
}
按鍵二
- 代碼
//按鍵2任務:
void Key2_task_entry()
{
if (Motor_state == 0)
{
//此處電機控制開
HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_SET);
POINT_COLOR = GREEN;
LCD_ShowString(83, 198, 210, 32, 32, "ON ");
Motor_state = 1;
}
else
{
//此處電機控制關
HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_RESET);
POINT_COLOR = RED;
LCD_ShowString(83, 198, 210, 32, 32, "OFF");
Motor_state = 0;
}
__HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_3);
}
主函數
- 創建中斷
osal_int_connect(KEY1_EXTI_IRQn, 2,0,Key1_task_entry,NULL);
osal_int_connect(KEY2_EXTI_IRQn, 3,0,Key2_task_entry,NULL);
二、數據上報
- 在數據上報結構體中添加之前定義的變量
typedef struct
{
int8_t messageId;
int8_t Temperature;
int8_t Humidity;
uint16_t Luminance;
uint8_t Light_state;
uint8_t Motor_state;
} AG_sensor_report;
- 數據上報任務中,在死循環中添加新增的結構體變量
static int app_report_task_entry()
{
int ret = -1;
oc_config_param_t oc_param;
AG_sensor_report Agriculture;
(void)memset(&oc_param, 0, sizeof(oc_param));
oc_param.app_server.address = cn_app_server;
oc_param.app_server.port = cn_app_port;
oc_param.app_server.ep_id = cn_endpoint_id;
oc_param.boot_mode = en_oc_boot_strap_mode_factory;
oc_param.rcv_func = app_msg_deal;
ret = oc_lwm2m_config(&oc_param);
if (0 != ret)
{
return ret;
}
//install a dealer for the led message received
while (1) //--TODO ,you could add your own code here
{
Agriculture.messageId = cn_AG_sensorID;
Agriculture.Temperature = (int8_t)E53_IA1_Data.Temperature;
Agriculture.Humidity = (int8_t)E53_IA1_Data.Humidity;
Agriculture.Luminance = htons((uint16_t)E53_IA1_Data.Lux);
Agriculture.Light_state = (int8_t)Light_state;
Agriculture.Motor_state = (int8_t)Motor_state;
oc_lwm2m_report((char *)&Agriculture, sizeof(Agriculture), 1000);
osal_task_sleep(2 * 1000);
}
return ret;
}
- 在數據解析任務中添加變量
if (Agriculture_Control_Light->Light[0] == 'O' && Agriculture_Control_Light->Light[1] == 'N')
{
HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_SET);
LCD_ShowString(175, 198, 210, 32, 32, "ON ");
Light_state=1;//變量置1
}
if (Agriculture_Control_Light->Light[0] == 'O' && Agriculture_Control_Light->Light[1] == 'F' && Agriculture_Control_Light->Light[2] == 'F')
{
HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_RESET);
LCD_ShowString(175, 198, 210, 32, 32, "OFF");
Light_state=0;//變量置0
}
if (Agriculture_Control_Motor->Motor[0] == 'O' && Agriculture_Control_Motor->Motor[1] == 'N')
{
HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_SET);
LCD_ShowString(83, 198, 210, 32, 32, "ON ");
Motor_state=1;//變量置1
}
if (Agriculture_Control_Motor->Motor[0] == 'O' && Agriculture_Control_Motor->Motor[1] == 'F' && Agriculture_Control_Motor->Motor[2] == 'F')
{
HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_RESET);
LCD_ShowString(83, 198, 210, 32, 32, "OFF");
Motor_state=0;//變量置0
}
- 然後在華爲雲平臺中agriculture服務依次添加Light_state,Motor_state(可讀可寫可執行)
- 在編解碼插件中添加數據,與其相對應
- 完成數據上報,實現項目的閉環設計