日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ESP32 + ESP-IDF |GPIO 01 - 驱动外部两个LED灯,以每300ms的时间间隔闪烁

發(fā)布時(shí)間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ESP32 + ESP-IDF |GPIO 01 - 驱动外部两个LED灯,以每300ms的时间间隔闪烁 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、前言
  • 二、VSCODE + ESP-IDF
    • 2.1、快速創(chuàng)建項(xiàng)目
    • 2.2、選擇串口通道,ESP芯片型號(hào)
  • 三、代碼
    • 3.1、main.c
      • 3.1.1、頭文件
    • 3.1.2、全局變量
      • 3.1.3、app_main( )函數(shù)
    • 3.2、實(shí)驗(yàn)代碼
  • 四、相關(guān)API
    • 4.1、gpio_reset_pin(gpio_num_t gpio_num)
    • 4.2、gpio_set_direction(gpio_num_t gpio_num,gpio_mode_t mode)
    • 4.3、gpio_set_level(gpio_num_t gpio_num, uint32_t level)
    • 4.4、vTaskDelay(const TickType_t xTicksToDelay)

一、前言


我使用的硬件:

嵌入式軟件開發(fā)從來都不是從hello world開始,而是從GPIO驅(qū)動(dòng)LED閃爍開始。
本次實(shí)驗(yàn)的目的是使用GPIO26與GPIO27各驅(qū)動(dòng)一個(gè)LED燈,以300ms的時(shí)間間隔閃爍。

ESP-IDF Monitor打印出來的調(diào)試信息:

需要注意??:

二、VSCODE + ESP-IDF


2.1、快速創(chuàng)建項(xiàng)目




2.2、選擇串口通道,ESP芯片型號(hào)



創(chuàng)建項(xiàng)目模塊成功,代碼成功被編譯。

三、代碼


3.1、main.c

3.1.1、頭文件

  • ESP-IDF是基于freertos的SDK,所以需要包含F(xiàn)reeRTOS.h頭文件與task.h頭文件。
  • 使用ESP_LOGI( )函數(shù)打印一些調(diào)試信息,所以包含esp_log.h頭文件。
  • 使用GPIO,所以包含driver/gpio.h。

3.1.2、全局變量

3.1.3、app_main( )函數(shù)

  • 第一步通過gpio_reset_pin( )函數(shù)初始化引腳。
  • 第二步通過gpio_set_direction( )函數(shù)將對(duì)應(yīng)的GPIO口設(shè)置為輸出。
  • 第三步通過gpio_set_level( )函數(shù)將電平輸出到pin腳上。

3.2、實(shí)驗(yàn)代碼

#include <stdio.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/gpio.h" #include "esp_log.h"static uint8_t s_led_state = 0; static const char *TAG = "first_example";void app_main(void) {ESP_LOGI(TAG, "Example configured to blink GPIO LED!");/* 復(fù)位GPIO的狀態(tài) */gpio_reset_pin(26);gpio_reset_pin(27);/* 設(shè)置GPIO為輸出模式 */gpio_set_direction(26,GPIO_MODE_OUTPUT);gpio_set_direction(27,GPIO_MODE_OUTPUT);while(1){ESP_LOGI(TAG, "Turning the LED %s!", s_led_state == true ? "ON" : "OFF");gpio_set_level(26,s_led_state); /* GPIO26輸出電平 */gpio_set_level(27,s_led_state); /* GPIO27輸出電平 */s_led_state = !s_led_state; /* 取反LED的狀態(tài) */vTaskDelay(300 / portTICK_PERIOD_MS); /* 延時(shí)300ms */} }

四、相關(guān)API


esp官方網(wǎng)址:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/gpio.html

4.1、gpio_reset_pin(gpio_num_t gpio_num)


這個(gè)函數(shù)用于重置mcu引腳的狀態(tài),值得注意的是引腳被重置后會(huì)使能“上拉”。

4.2、gpio_set_direction(gpio_num_t gpio_num,gpio_mode_t mode)


這個(gè)函數(shù)用于設(shè)置mcu引腳的功能(輸入或者輸出,或者即是輸入又是輸出)。

4.3、gpio_set_level(gpio_num_t gpio_num, uint32_t level)

gpio_set_level(GPIO_NUM_16,0); //gpio16輸出低電平 gpio_set_level(GPIO_NUM_16,1); //gpio16輸出高電平

4.4、vTaskDelay(const TickType_t xTicksToDelay)


沒有學(xué)習(xí)過rtos的同學(xué)可以認(rèn)為它是一個(gè)延時(shí)函數(shù)。學(xué)過rtos的同學(xué)其實(shí)知道它會(huì)啟動(dòng)rtos的調(diào)度器,將CPU的執(zhí)行權(quán)交給其他線程,等待一段時(shí)間后回來繼續(xù)執(zhí)行代碼。

至于為什么以下代碼會(huì)延時(shí)300ms,是因?yàn)閒reeRTOS的滴答定時(shí)器的頻率被設(shè)置為1000Hz。

vTaskDelay(300 / portTICK_PERIOD_MS); /* 延時(shí)300ms */

總結(jié)

以上是生活随笔為你收集整理的ESP32 + ESP-IDF |GPIO 01 - 驱动外部两个LED灯,以每300ms的时间间隔闪烁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。