此笔记由个人整理
华为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(可读可写可执行)
- 在编解码插件中添加数据,与其相对应
- 完成数据上报,实现项目的闭环设计