文章目錄
- 實現功能:
- 項目展示:
- 代碼解析:
實現功能:
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);}
}