ESP32 開發筆記(三)源碼示例 2_LED_Task ESP32任務方式控制LED

開發板購買連接windows

https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=626366733674app

開發板簡介
開發環境搭建 windows
源碼示例:
    0_Hello Bug (ESP_LOGX與printf)    工程模板/打印調試輸出
    1_LED                                                    LED亮滅控制       
    2_LED_Task                                          使用任務方式控制LED
    3_LEDC_PWM                                      使用LEDC來控制LED實現呼吸燈效果
    4_ADC_LightR                                      使用ADC讀取光敏電阻實現光照傳感
    5_KEY_Short_Long                              按鈕長按短按實現
    6_TouchPad_Interrupt                          電容觸摸中斷實現
    7_WS2812_RMT                                  RGB_LED彩虹變色示例
    8_DHT11_RMT                                    使用RMT實現讀取DHT11溫溼度傳感器
    9_SPI_SDCard                                    使用SPI總線實現TF卡文件系統示例
    10_IIC_ADXL345                                使用IIC總線實現讀取ADXL345角度加速度傳感器
    11_IIC_AT24C02                                 使用IIC總線實現小容量數據儲存測試
    12_IR_Rev_RMT                                使用RMT實現紅外遙控接收掃碼(NEC)
    13_IR_Send_RMT                              使用RMT實現紅外數據發送(NEC)
    14_WIFI_Scan                                    附近WIFI信號掃描示例    
    15_WIFI_AP                                        建立軟AP示例
    16_WIFI_AP_TCP_Server                  在軟AP模式下實現TCP服務端
    17_WIFI_AP_TCP_Client                   在軟AP模式下實現TCP客戶端
    18_WIFI_AP_UDP                              在軟AP模式下實現UDP通信
    19_WIFI_STA                                      建立STA站模
    20_WIFI_STA_TCP_Server                在站模式STA下實現TCP服務端
    21_WIFI_STA_TCP_Client                 在站模式STA下實現TCP客戶端
    22_WIFI_STA_UDP                            在站模式STA下實現UDP通信
    23_LVGL_Test                                     LVGL圖形庫簡單示例框架

1、硬件設計/原理

查看開發板原理圖,能夠看到開發板上有兩個指示燈,一個是電源指示燈,直接3.3V到地,不受程序控制,APP_LED接在ESP32-WROOM-32E集成模擬的GPIO4腳上,看原理圖可得知IO4拉高LED即滅掉,到地則亮起函數

2、程序設計

先引用必要頭文件測試

控制LED其實就是控制GPIO的電平高低,須要操做GPIO因此要引入esp_idf框架的gpio頭文件ui

// LED_Task Example
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"
#include <esp_log.h>

定義LED所鏈接的GPIO號.net

#define BLINK_GPIO			4	// LED 鏈接的 GPIO端口

編寫main函數設計

void app_main(void)
{
	ESP_LOGI(TAG, "APP Start......");
	// 參數:任務函數,任務別名,任務堆棧的深度,參數的指針,任務優先級,回傳句柄
	xTaskCreate(&blink_task,"LED_Task",configMINIMAL_STACK_SIZE,NULL,5,NULL);
}

xTaskCreate函數原型指針

portBASE_TYPE xTaskCreate(
pdTASK_CODE pvTaskCode,
const portCHAR * const pcName,
unsigned portSHORT usStackDepth,
void *pvParameters,
unsigned portBASE_TYPE uxPriority,
xTaskHandle *pvCreatedTask);

pvTaskCode :指向任務函數。任務必須以永不返回的形式實現(好比一個死循環)調試

pcName : 任務函數的別名,僅僅是方便調試所用

usStackDepth :任務堆棧的深度,定義了堆棧能夠包含的變量數——不是字節數。好比若是堆棧的寬度爲16BIT,而 usStackDepth定義爲100,則200 字節被分配給堆棧存儲。堆棧深度乘以堆棧寬度的最大值,不能超過 size_t變量能包含的最大值

pvParameters :做爲參數的指針,當任務建立時

 uxPriority :任務的優先級。包括MPU支持的系統能夠選擇在特權模式(系統模式)建立任務,經過設置優先級參數的portPRIVILEGE_BIT位。好比,建立一個特權任務在優先級2,則uxPriority 應當設置爲( 2 | portPRIVILEGE_BIT )

 pvCreatedTask :回傳一個句柄,以便建立的任務能夠被關聯。返回值:pdPASS,若是任務成功建立且添加到就緒列表,不然返回一個錯誤代碼,見 projdefs.h

blink_task任務函數

void blink_task(void *pvParameter)
{
	gpio_pad_select_gpio(BLINK_GPIO);// 選擇要操做的GPIO
	gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);// 設置GPIO爲推輓輸出模式
	while(1) {
		ESP_LOGI(TAG, "Turning On the LED\n");
		gpio_set_level(BLINK_GPIO, 0);// GPIO輸出低
		vTaskDelay(1000 / portTICK_PERIOD_MS);
		
		ESP_LOGI(TAG, "Turning Off the LED\n");
		gpio_set_level(BLINK_GPIO, 1);// GPIO輸出高
		vTaskDelay(1000 / portTICK_PERIOD_MS);
	}
}

此函數和

http://www.javashuo.com/article/p-mbzynjwm-ne.html 控制LED函數同樣

3、下載測試

打開ESP-IDF Command Prompt

cd命令進入此工程目錄

cd F:\ESP32_DevBoard_File\2_LED_Task

查看電腦設備管理器中開發板的串口號

執行idf.py -p COM9 flash monitor從串口9下載並運行打開口顯示設備調試信息   Ctrl+c退出運行

能夠看到開發板的APP_LED一直閃爍。