天天看點

補充第一章:ESP32定時器的使用關注嘉友創科技公衆号 學習目的及目标 硬體設計及原理 軟體設計代碼編寫硬體連接配接效果展示定時器總結

  • 關注嘉友創科技公衆号

    補充第一章:ESP32定時器的使用關注嘉友創科技公衆号 學習目的及目标 硬體設計及原理 軟體設計代碼編寫硬體連接配接效果展示定時器總結
  • 源碼位址:https://github.com/HX-IoT/ESP32-Developer-Guide
  • ESP32開發指南QQ群:824870185,内有pdf版,排版整潔。

學習目的及目标

  1. 掌握LED燈電路設計:控制方式
  2. 掌握ESP32定時器的庫函數
  3. 編寫LED閃爍燈程式

硬體設計及原理

本實驗闆連接配接了一個 RGB彩燈,RGB彩燈實際上由三盞分别為紅色、綠色、藍色的 LED 燈組成,通過控制 RGB顔色強度的組合,可以混合出各種色彩,此章隻學習如何開關,調色放在PWM章學習。

補充第一章:ESP32定時器的使用關注嘉友創科技公衆号 學習目的及目标 硬體設計及原理 軟體設計代碼編寫硬體連接配接效果展示定時器總結

這些 LED 燈的陰極都是通過0歐姆電阻連接配接到ESP32的 GPIO引腳,隻要我們控制 GPIO引腳的電平輸出狀态,即可控制 LED 燈的亮滅。圖中去掉0歐姆電阻,可以切斷和單片機的連接配接,釋放這個GPIO。3個LED燈占用ESP32的引腳如下:

LED标号 LED顔色 接至ESP32的引腳
LP2A 紅色 IO2
LP2B 綠色 IO18
LP2C 藍色 IO19

若您使用的實驗闆 LED 燈的連接配接方式或引腳不一樣,隻需根據我們的工程修改引腳即可,程式的控制原理相同。

軟體設計

代碼邏輯

補充第一章:ESP32定時器的使用關注嘉友創科技公衆号 學習目的及目标 硬體設計及原理 軟體設計代碼編寫硬體連接配接效果展示定時器總結

ESP32的軟定時器接口介紹

建立定時器函數:esp_timer_create();

函數原型

esp_err_t esp_timer_create

(

const esp_timer_create_args_t* create_args,

esp_timer_handle_t* out_handle

)

函數功能 建立定時器函數
參數

[in]create_args:定時器結構體

typedef struct {

    esp_timer_cb_t callback;        //定時器時間到回調

    void* arg;                      //要傳入回調的參數

esp_timer_dispatch_t dispatch_method;   //從任務或ISR調用回調

 const char* name;               //定時器名稱,esp_timer_dump函數使用

} esp_timer_create_args_t;

[in]out_handle:定時器句柄

傳回值

ESP_OK:成功

ESP_ERR_INVALID_ARG : 參數錯誤

ESP_ERR_INVALID_STATE:定時器已經運作

啟動單次定時器函數:esp_timer_start_once();基本同下

啟動周期定時器函數:esp_timer_start_periodic();

函數原型

esp_err_t esp_timer_start_periodic

(

esp_timer_handle_t timer,

uint64_t period

)

函數功能 啟動周期定時器
參數

[in]timer:定時器句柄

[in]period:定時周期,機關微秒,1000表示1ms

傳回值

ESP_OK:成功

ESP_ERR_INVALID_ARG : 參數錯誤

ESP_ERR_INVALID_STATE:定時器已經運作

停止定時器函數:esp_timer_stop();

函數原型

esp_err_t esp_timer_stop

(

esp_timer_handle_t timer

);

函數功能 停止定時器
參數 [in]timer:定時器句柄
傳回值

ESP_OK:成功

ESP_ERR_INVALID_STATE:定時器已經停止

删除定時器函數:esp_timer_delete();

函數原型

esp_err_t esp_timer_delete

(

esp_timer_handle_t timer

);

函數功能 删除定時器
參數

[in]gpio_num:引腳編号,0~34(存在部分)

[in]pull:IO模式,可以設定:

0:輸出低

1:輸出高

傳回值

ESP_OK:成功

ESP_ERR_INVALID_ARG : 參數錯誤

擷取定時器時間函數:esp_timer_get_time();

函數原型 int64_t esp_timer_get_time()
函數功能 設定IO輸出值
參數 none
傳回值 自調用esp計時器init以來的微秒數(通常在應用程式啟動的早期發生)

更多更詳細接口請參考官方指南。

代碼編寫

定時器配置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

void app_main() {

  //選擇IO

    gpio_pad_select_gpio(LED_R_IO);

    //設定IO為輸出

    gpio_set_direction(LED_R_IO, GPIO_MODE_OUTPUT);

//定時器結構體初始化

esp_timer_create_args_t fw_timer =

{

.callback = &fw_timer_cb, //回調函數

.arg = NULL, //參數

.name = "fw_timer" //定時器名稱

};

//定時器建立、啟動

esp_err_t err = esp_timer_create(&fw_timer, &fw_timer_handle);

err = esp_timer_start_periodic(fw_timer_handle, 1000 * 1000);//1秒回調

if(err == ESP_OK)

{

printf("fw timer cteate and start ok!\r\n");

}

}

定時器回調函數

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

void fw_timer_cb(void *arg)

{

//擷取時間戳

int64_t tick = esp_timer_get_time();

printf("timer cnt = %lld \r\n", tick);

if (tick > 50000000) //50秒結束

{

//定時器暫停、删除

esp_timer_stop(fw_timer_handle);

esp_timer_delete(fw_timer_handle);

printf("timer stop and delete!!! \r\n");

//重新開機

esp_restart();

}

gpio_set_level(LED_R_IO, 0);

vTaskDelay(100 / portTICK_PERIOD_MS);

gpio_set_level(LED_R_IO, 1);

vTaskDelay(100 / portTICK_PERIOD_MS);

}

硬體連接配接

開發闆預設已經連接配接好LED,下載下傳程式即可,使用其他開發闆需要修改程式或者修改硬體連接配接皆可。

效果展示

紅燈1000ms閃一次

補充第一章:ESP32定時器的使用關注嘉友創科技公衆号 學習目的及目标 硬體設計及原理 軟體設計代碼編寫硬體連接配接效果展示定時器總結
補充第一章:ESP32定時器的使用關注嘉友創科技公衆号 學習目的及目标 硬體設計及原理 軟體設計代碼編寫硬體連接配接效果展示定時器總結

定時器總結

主要學習ESP32軟定時器的使用,方法很簡單。建立》開始》回調,可擷取時間,也可以停止》暫停。

源碼位址:https://github.com/HX-IoT/ESP32-Developer-Guide

點我->更多ESP32開發指南系列目錄