文章目录
- 实现功能:
- 项目展示:
- 代码解析:
实现功能:
1.主要功能:通过485通信获取传感器温湿度,温湿度数据显示、实时时钟显示与用户交互。使用LVGL在显示屏上展示传感器温湿度数据,并提供UI设置温度、湿度的阈值和映射关系,并提供字体颜色切换
2.运行指示:系统运行时(绿灯)闪烁,超出阈值红灯闪烁,蜂鸣器长鸣
3.红外遥控:通过红外接收模块接收用户指令并控制UI
4.FLASH存储:将用户配置(阈值、字体颜色)保存在STM32F407ZGT6内部FLASH,并在开机时读取
5.数据存储与导出:按下保存按键时,保存实时温湿度数据(CSV文件),并可以通过菜单栏导出数据
6.本地升级:IAP本地升级、U盘升级
7.菜单功能:时间设置,U盘导出数据
8.按键功能:KEY_UP菜单键,KEY0切换键,KEY1确认键
9.5分钟更新一次天气
10.图标地址:icon
项目展示:
代码解析:
#include "main.h"FATFS fs;//任务句柄
TaskHandle_t vTaskLed_handle;
//任务函数
void vTaskLed(void *pvParameters);//任务句柄
TaskHandle_t vTaskDisplay_handle;
//任务函数
void vTaskDisplay(void *pvParameters);//任务句柄
TaskHandle_t vTaskSensor_handle;
//任务函数
void vTaskSensor(void *pvParameters);void Hardware_Init(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); /* 设置系统中断优先级分组4 */delay_init(); /* 延时初始化 */usart3_init(115200); /* 初始化ESP8266串口3 */LED_Init();LCD_Init(); /* LCD初始化 */My_RTC_Init(); /* RTC初始化 */ RS485_Init(9600); /* 初始化RS485串口2 */ SD_Init(); /* SD卡初始化 */f_mount(&fs,"0:",1); /* 挂载SD卡 */Display_Main();atk_8266_wifista_config();get_current_weather();delay_xms(500);get_3days_weather();delay_xms(500);get_beijing_time();
}int main(void)
{/* 硬件初始化 */Hardware_Init();/* 创建app_task1任务 */xTaskCreate((TaskFunction_t )vTaskLed, /* 任务入口函数 */(const char* )"vTaskLed", /* 任务名字 */(uint16_t )256, /* 任务栈大小 */(void* )NULL, /* 任务入口函数参数 */(UBaseType_t )1, /* 任务的优先级 */(TaskHandle_t* )&vTaskLed_handle); /* 任务控制块指针 */ /* 创建app_task2任务 */ xTaskCreate((TaskFunction_t )vTaskDisplay, /* 任务入口函数 */(const char* )"vTaskDisplay", /* 任务名字 */(uint16_t )256, /* 任务栈大小 */(void* )NULL, /* 任务入口函数参数 */(UBaseType_t )2, /* 任务的优先级 */(TaskHandle_t* )&vTaskDisplay_handle); /* 任务控制块指针 */ /* 创建app_task2任务 */ xTaskCreate((TaskFunction_t )vTaskSensor, /* 任务入口函数 */(const char* )"vTaskSensor", /* 任务名字 */(uint16_t )256, /* 任务栈大小 */(void* )NULL, /* 任务入口函数参数 */(UBaseType_t )3, /* 任务的优先级 */(TaskHandle_t* )&vTaskSensor_handle); /* 任务控制块指针 */ /* 开启任务调度 */vTaskStartScheduler(); while(1);}/* 任务1:LED 闪烁(优先级1) */
static void vTaskLed(void *pvParameters)
{while(1){if(Update_Flag == 1){get_current_weather();vTaskDelay(200);get_3days_weather();Update_Flag = 0; }LED1=~LED1;vTaskDelay(200);}
}
/* 任务2:显示温湿度(优先级2) */
static void vTaskDisplay(void *pvParameters)
{while(1){Display_TempHumi_Value();RTC_Show();vTaskDelay(200);}
}
/* 任务3:485获取温湿度(优先级3) */
static void vTaskSensor(void *pvParameters)
{while(1){Get_TempHumi_Value();vTaskDelay(200);}
}