ESP32-驱动LED灯

冇雨
2023-09-10 / 0 评论 / 128 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年09月13日,已超过467天没有更新,若内容或图片失效,请留言反馈。

学习目标

  1. 掌握LED灯电路的控制方式
  2. 掌握 ESP32 库函数对 IO 配置
  3. 掌握 ESP32 库函数对 IO 控制的操作
  4. 编写 LED 闪烁和流水灯程序

硬件设计

由于ESP32开发板上自带一颗引脚为2的LED灯,所以直接使用这一颗就能进行实验

实现原理

01

代码实现

闪烁灯代码

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

#define LED_IO 2
static const char *TAG = "example";

void app_main(void)
{
   //选择IO口
   esp_rom_gpio_pad_select_gpio(LED_IO);
   //设置IO口模式
   gpio_set_direction(LED_IO,GPIO_MODE_OUTPUT);
   while (1)
   {
       //IO拉高,灯亮
       gpio_set_level(LED_IO,1);
       ESP_LOGI(TAG,"The LED is turn");
       //延迟1秒
       vTaskDelay(1000 / portTICK_PERIOD_MS);
       //IO拉高,灯灭
       gpio_set_level(LED_IO,1);
       ESP_LOGI(TAG,"The LED is off");
       vTaskDelay(1000 / portTICK_PERIOD_MS);
   }  
}

流水灯代码

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

#define LED_IO1 2
#define LED_IO2 18
#define LED_IO3 19
static const char *TAG = "example";

void app_main(void)
{
    //选择IO口
    esp_rom_gpio_pad_select_gpio(LED_IO1);
    esp_rom_gpio_pad_select_gpio(LED_IO2);
    esp_rom_gpio_pad_select_gpio(LED_IO3);
    //设置IO口模式
    gpio_set_direction(LED_IO1,GPIO_MODE_OUTPUT);
    gpio_set_direction(LED_IO2,GPIO_MODE_OUTPUT);
    gpio_set_direction(LED_IO3,GPIO_MODE_OUTPUT);        
    while (1)
    {
        //1灯亮
        gpio_set_level(LED_IO1,1);
        gpio_set_level(LED_IO2,0);
        gpio_set_level(LED_IO3,0);
        ESP_LOGI(TAG,"The LED1 is turn");
        //延迟1秒
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        
        //2灯亮
        gpio_set_level(LED_IO1,0);
        gpio_set_level(LED_IO2,1);
        gpio_set_level(LED_IO3,0);    
        ESP_LOGI(TAG,"The LED2 is turn");
        //延迟1秒
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    
        //3灯亮
        gpio_set_level(LED_IO1,0);
        gpio_set_level(LED_IO2,0);
        gpio_set_level(LED_IO3,1);  
        ESP_LOGI(TAG,"The LED3 is turn");
        //延迟1秒
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}
0

评论

博主关闭了所有页面的评论