第八章 ESP32驱动LED灯

学习目的及目标

掌握LED灯电路设计:控制方式

掌握ESP32库函数对IO配置的相关参数设置

掌握ESP32库函数对IO控制的操作

编写LED闪烁和流水灯程序

硬件设计及原理

本实验板连接了一个 RGB彩灯,RGB彩灯实际上由三盏分别为红色、绿色、蓝色的 LED 灯组成,通过控制 RGB颜色强度的组合,可以混合出各种色彩,此章只学习如何开关,调色放在PWM章学习。

这些 LED 灯的阴极都是通过0欧姆电阻连接到ESP32的 GPIO引脚,只要我们控制 GPIO引脚的电平输出状态,即可控制 LED 灯的亮灭。图中去掉0欧姆电阻,可以切断和单片机的连接,释放这个GPIO。3个LED灯占用ESP32的引脚如下:

LED标号

LED颜色

接至ESP32的引脚

LP2A

红色

IO2

LP2B

绿色

IO18

LP2C

蓝色

IO19

若您使用的实验板 LED 灯的连接方式或引脚不一样,只需根据我们的工程修改引脚即可,程序的控制原理相同。

 

软件设计

代码逻辑

ESP32的GPIO接口介绍

设置IO模式函数:gpio_set_pull_mode();

函数原型

esp_err_t gpio_set_pull_mode

(

gpio_num_t gpio_num,

gpio_pull_mode_t pull

)

函数功能

设置IO模式

参数

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

[in]pull:IO模式,可以设置:

GPIO_MODE_DISABLE:不输入不输出

GPIO_MODE_INPUT:输入模式

GPIO_MODE_OUTPUT:输出模式

GPIO_MODE_OUTPUT_OD:开漏输出模式

GPIO_MODE_INPUT_OUTPUT_OD:开漏输入输出模式

GPIO_MODE_INPUT_OUTPUT:输入输出模式

 

返回值

ESP_OK:成功

ESP_ERR_INVALID_ARG : 参数错误

设置IO输出值函数:gpio_set_level();

函数原型

esp_err_t gpio_set_level

(

gpio_num_t gpio_num,

uint32_t level

)

函数功能

设置IO输出值

参数

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

[in]pull:IO模式,可以设置:

0:输出低

1:输出高

 

返回值

ESP_OK:成功

ESP_ERR_INVALID_ARG : 参数错误

更多更详细接口请参考官方指南

 

代码编写

闪灯代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

#include <stdio.h>

#include "freertos/FreeRTOS.h"

#include "freertos/task.h"

#include "driver/gpio.h"

#include "sdkconfig.h"

#define LED_R_IO 2

#define LED_G_IO 18

#define LED_B_IO 19

void app_main()

{

  //选择IO

    gpio_pad_select_gpio(LED_R_IO);

    //设置IO为输出

    gpio_set_direction(LED_R_IO, GPIO_MODE_OUTPUT);

    while(1) {

        //红灯亮

        gpio_set_level(LED_R_IO, 0);

        vTaskDelay(100 / portTICK_PERIOD_MS);

//红灯灭

        gpio_set_level(LED_R_IO, 1);

        vTaskDelay(100 / portTICK_PERIOD_MS);

    }

}

 

流水灯的源码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

void app_main()

{

//选择IO

    gpio_pad_select_gpio(LED_R_IO);

    gpio_pad_select_gpio(LED_G_IO);

    gpio_pad_select_gpio(LED_B_IO);

    //设置IO为输出

    gpio_set_direction(LED_R_IO, GPIO_MODE_OUTPUT);

    gpio_set_direction(LED_G_IO, GPIO_MODE_OUTPUT);

    gpio_set_direction(LED_B_IO, GPIO_MODE_OUTPUT);

    while(1) {

        //只点亮红灯

        gpio_set_level(LED_R_IO, 0);

        gpio_set_level(LED_G_IO, 1);

        gpio_set_level(LED_B_IO, 1);

        vTaskDelay(100 / portTICK_PERIOD_MS);

        //只点亮绿灯

        gpio_set_level(LED_R_IO, 1);

        gpio_set_level(LED_G_IO, 0);

        gpio_set_level(LED_B_IO, 1);

        vTaskDelay(100 / portTICK_PERIOD_MS);

        //只点亮蓝灯

        gpio_set_level(LED_R_IO, 1);

        gpio_set_level(LED_G_IO, 1);

        gpio_set_level(LED_B_IO, 0);

        vTaskDelay(100 / portTICK_PERIOD_MS);

    }

}

 

硬件连接

开发板默认已经连接好LED,下载程序即可,使用其他开发板需要修改程序或者修改硬件连接皆可。

效果展示

闪灯:红灯100ms取反一次

流水灯:红绿蓝100ms循环点亮

驱动LED灯总结

上面的方法是使用库函数配置GPIO,也可以使用结构体进行配置,先设置结构体参数,再使用结构体配置IO,实现功能一样。

源码地址:https://github.com/xiaolongba/wireless-tech

点我->更多ESP32开发指南系列目录

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值