学习目标
- 掌握LED灯电路的控制方式
- 掌握 ESP32 库函数对 IO 配置
- 掌握 ESP32 库函数对 IO 控制的操作
- 编写 LED 闪烁和流水灯程序
硬件设计
由于ESP32开发板上自带一颗引脚为2的LED灯,所以直接使用这一颗就能进行实验
实现原理
代码实现
闪烁灯代码
#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);
}
}
评论