ESP32 库函数对 IO 口的配置, 编写 LED 闪烁程序(4)

开发板设计了一个共阳极的 RGB 彩灯,彩灯实际上由三盏 LED 灯组成,LED 灯颜色分别为: 红色、绿色和蓝色,这个实验我们学习如何控制亮和灭。我们的彩灯是共阳极的,阴极通过电阻后连接到拨码开关上,经过拨码开 关才连接到 ESP32 上。我们这里的拨码开关的作用是控制 ESP32 的 IO 口和彩灯之间连接和断开。
ESP32 的 ESP-IDF 编程指南可以从官网上查询:
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/index.html
在这个实验里,实际上就是要设置 IO 口为输出功能,然后拉高拉低就可以了,分三步:选择 IO 口、 设置为输出功能和控制高低。
(1) 选择 IO 口
选择 IO 口是通过函数 gpio_pad_select_gpio()来实现的,这个函数只有一个参数,即 IO 口的序号。 比如选择 IO32,可以这样写:
gpio_pad_select_gpio(32);

(2) 设置为输出功能
设置 IO 口方向是通过函数 gpio_set_direction()来实现的,这个函数有二个参数,第一个参数是 IO 口的序号,第二个参数是方向(输出:GPIO_MODE_OUTPUT,输入:GPIO_MODE_INPUT),比如设置 IO32 为输出功能,可以这样写:
gpio_set_direction(32,GPIO_MODE_OUTPUT);

(3) 控制高低
控制 IO 口的电平是通过函数 gpio_set_level 来实现,这个函数有二个参数,第一个参数是 IO 口的 序号,第二个参数是高或者低(也就是 0 和 1),比如设置 IO32 输出高电平,可以这样写:
gpio_set_level(32,1);

(4) 任务睡眠函数
为了实现 LED 闪烁功能,我们在这里引入了任务睡眠函数,定义如下:
void vTaskDelay(portTickType xTicksToDelay);
该函数目的在于告诉操作系统,现在无任务在做,请告诉 kernel 将时间分配给其他任务,并在某 个时间点将该任务唤醒。这个时间点就是函数的入参,一般都是以 tick 为单位。
vTaskDelay(1)约等于 10 毫秒,如果要延时 1 秒可以写 vTaskDelay(100)。

//控制红灯
void  led_red(int on)
{
if(on==LED_ON)
{
gpio_set_level(LED_RED_IO, LED_ON);//开灯
}
else
{
gpio_set_level(LED_RED_IO, LED_OFF);//关灯
}
}

//控制绿灯
void  led_green(int on)
{
if(on==LED_ON)
{
gpio_set_level(LED_GREEN_IO, LED_ON);//开灯
}
else
{
gpio_set_level(LED_GREEN_IO, LED_OFF);//关灯
}
}

//控制蓝灯
void  led_blue(int on)
{
if(on==LED_ON)
{
gpio_set_level(LED_BLUE_IO, LED_ON);//开灯
}
else
{
gpio_set_level(LED_BLUE_IO, LED_OFF);//关灯
}
}

//LED 初始化 void initLed()
{
//初始化彩灯的 IO 口,
//红灯:GPIO32,绿灯:GPIO15,蓝灯:GPIO16 gpio_pad_select_gpio(LED_RED_IO); gpio_pad_select_gpio(LED_GREEN_IO); gpio_pad_select_gpio(LED_BLUE_IO); gpio_set_direction(LED_RED_IO, GPIO_MODE_OUTPUT); gpio_set_direction(LED_GREEN_IO, GPIO_MODE_OUTPUT); gpio_set_direction(LED_BLUE_IO, GPIO_MODE_OUTPUT);

//关红绿蓝三色灯 led_red(LED_OFF); led_green(LED_OFF); 

按下开发板的复位键,观察板子上的彩灯变化。
最后推荐一款开发套件,可以手淘扫码查看。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bytechip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值