三、ESP32开发板NodeMcu-32S点灯和按键控制

LED电路分析

(看完文章如果需要代码或者原理图等文件可在下方留言邮箱)

本期在我们点亮和熄灭板子上的LED之前还是需要分析LED在板子上的电路以便我们控制
在这里插入图片描述
我们放大看到LED部分的电路

在这里插入图片描述
LED一端通过限流电阻接到ESP32模组的GPIO2上面,另一端接地,那么我们GPIO2端口输出高电平正负两端有电压差那么灯就会亮,输出低电平两端都是0V那么灯灭

LED程序编写

有接触过arduino编程的可能会对界面比较熟悉,没有的话也可以参考arduino社区中的GPIO控制的函数功能,查看函数

点亮LED

控制LED灯也可以说是我们控制GPIO口状态的过程,在控制GPIO口电平变化的过程中我们需要用到以下几个函数

pinMode(pin, mode)

函数功能:设置GPIO端口的状态

参数pin指定需要设置的GPIO端口
参数mode指定GPIO端口的模式,有以下三个参数可选
INPUT :输入模式
OUTPUT :输出模式
INPUT_PULLUP :输入上拉模式

digitalWrite(pin, value)

函数功能:可以使用这个函数让GPIO口输出高电平或者低电平

参数pin指定需要设置电平的GPIO端口
参数value指定端口输出的电平状态,有以下两个参数可选
HIGH :高电平
LOW :低电平

接下来我们打开arduino IDE开始编写我们的第一个程序,点击下图中朝下的箭头保存程序,我把他保存到资料中的程序文件夹下面
在这里插入图片描述
默认的工程下面有两个建立工程就有的函数 void setup()void loop()

void setup()为程序初始化函数,在上电启动的时候会执行一次,执行完一次之后程序将会进入到loop()函数不再执行setup() ,直到程序再次重新启动

void loop()为循环执行的函数,在程序执行完setup()初始化函数之后执行,loop()中的程序代码执行完一次之后将会从loop()中最开始的代码重新执行,也就是说我们这个函数中的代码会一直循环的执行下去

我们的灯只要执行一次GPIO2的状态就行,程序比较简单我们参考下方的程序编写思路

在这里插入图片描述

最终代码如下

void setup() {
    
    
  // put your setup code here, to run once:
  pinMode(2,OUTPUT);  //配置GPIO2端口模式为输出模式
  digitalWrite(2,HIGH);  //配置GPIO2端口为高电平,灯亮
}

void loop() {
    
    
  // put your main code here, to run repeatedly:

}

接下来我们选择对应开发板和对应的端口点击上方向右的箭头烧录,与前文的烧录一样

在这里插入图片描述
烧录完之后可以看到板子上的蓝灯会亮起来
在这里插入图片描述

LED闪烁

我们点亮LED之后进一步实现LED闪烁的程序,闪烁的程序中包含点亮和熄灭的代码,我们这里有另外一个函数来控制LED闪烁的速度,同样可以在arduino社区中找到参考函数

delay( ms)

函数功能:延时

参数ms为时长,单位毫秒,数据类型unsigned long

我们写一个一秒钟灯闪烁一次的程序,通过delay()函数来控制闪烁的时间,程序我们参考下方的思路编写

在这里插入图片描述

接下来新建工程、保存、程序编辑、代码下载与我们点亮LED那一部分相同,我们保存程序到资料里面工程名为LED_twinkle

代码如下:

void setup() {
    
    
  // put your setup code here, to run once:
  pinMode(2,OUTPUT);  //将GPIO2配置为输出模式
}

void loop() {
    
    
  // put your main code here, to run repeatedly:
  digitalWrite(2,HIGH);  //GPIO2输出高电平 灯亮
  delay(500);  //保持GPIO2高电平500毫秒,即灯亮500ms
  digitalWrite(2,LOW);  //GPIO2输出低电平 灯灭
  delay(500);  //保持GPIO低电平500毫秒,即灯灭500ms
}

烧完程序之后可以看到板子蓝灯在闪烁

在这里插入图片描述

按键控制LED亮灭

我们接下来通过按键控制LED灯,按键按下灯亮,松开灯灭

和控制LED灯一样,在使用板子按键之前我们先看原理图中按键的部分
在这里插入图片描述

可以看到原理图中的按键时接地的,上拉了电阻到VCC之后接到了GPIO0端口,当我们按键未按下的时候GPIO0端口上拉电阻到3.3V,端口电平为高电平,按下按键之后通过按键把GPIO0下拉到GND,端口电平为低电平,我们只需要检测GPIO0的端口电平状态即可判断按键是否按下
关于GPIO0端口的模式配置我们配置成输入上拉确保端口电平能够被拉低
既然是检测端口的电平输入状态,我们需要用到一个检测函数

digitalRead(pin)

函数功能:读取引脚状态,并对返回状态值,返回1为高电平,0为低电平

参数pin为需要检测状态的端口

接着按照下方的思维编写程序

在这里插入图片描述

新建工程、保存、程序编辑,我们保存程序到资料里面工程名为key_LED

代码如下

void setup() {
    
    
  // put your setup code here, to run once:
  pinMode(2,OUTPUT);  //配置LED所在端口为输出模式
  pinMode(0,INPUT_PULLUP);  //配置按键所在端口为上拉输入模式
}

void loop() {
    
    
  // put your main code here, to run repeatedly:
  if(!digitalRead(0))  //如果按键按下,即GPIO0的端口状态为低电平
  {
    
    
    digitalWrite(2,HIGH);  //灯亮
    }
  else
  {
    
    
    digitalWrite(2,LOW);  //灯灭
    }
}

在这里插入图片描述

总结

本期通过一个控制LED灯的程序学会怎么控制ESP32上的GPIO端口的输出电平,并通过一个按键程序学会如何读取GPIO端口的输入状态,简单学会ESP32对GPIO端口电平控制,其他的关于串口、时间控制等函数均可以在arduino社区的函数参考中找到相关的说明,下一期文章我们将一起学习ESP32的wifi以及热点功能的开启关闭与连接,下面是arduino中的函数参考界面
在这里插入图片描述
需要资料、程序文件可私聊或在下方留言邮箱

猜你喜欢

转载自blog.csdn.net/qq_42250136/article/details/108579350