记录自己学esp32过程,内容仅供参考。
前言
本文主要介绍如何用esp32点亮一个LED灯并实现跑马灯效果,所用配置如下:
开发框架:VScode+PlatfornIO+Arduino
芯片型号:ESP-WROOM-32
开发板型号:ESP32 DEVKITV1
一、GPIO
GPIO,即General Purpose Input Output,是通用输入输出的简称。当设置为输入模式时可用于获取外部输入信号,设置为输出模式时可通过输出高低电平来控制外部设备。
本文用到的外部模块为LED,只需将其与esp32的GPIO连接,控制GPIO输出/读取高低电平即可。
二、相关函数
如下是乐鑫Arduino ESP32的官方文档,接下来所有用到的函数都在这里可以查到
乐鑫 Arduino ESP32 文档
- 设置引脚模式
void pinMode(uint8_t pin, uint8_t mode)
pin
:数字引脚编号,例如:2表示GPIO2
mode
:数字引脚工作模式,常用模式如下:
INPUT:输入模式
OUTPUT:输出模式
INPUT_PULLDOWN:下拉输入模式
INPUT_PULLUP:上拉输入模式
返回值
:无
- 设置引脚状态(只有pinMode函数为OUTPUT模式时才可使用该函数)
void digitalWrite(uint8_t pin, uint8_t val)
pin
:数字引脚编号,例如:2表示GPIO2
val
:输出数字引脚的电平状态,可设为HIGH/LOW
返回值
:无
- 延时函数
void delay(uint32_t ms)
ms
:延时时间,单位为ms
三、程序设计
1.点亮一个LED灯
开发板自带LED灯所连接引脚为2引脚,原理图如下:
只需设置引脚2输出高电平即可点亮LED,完整代码如下:
#include <Arduino.h>
// 定义LED管脚
#define LED_BLUE 2
//实现跑马灯
void setup() {
//设置LED管脚为输出模式
pinMode(LED_BLUE,OUTPUT);
}
void loop() {
//设置LED管脚输出高电平
digitalWrite(LED_BLUE,HIGH);
}
板载LED被点亮
2.实现跑马灯
因为板载LED有限所以在面包板外接了三个LED灯,颜色分别为绿、红、黄,对应引脚为14,12,13。跑马灯实现流程如下:
绿灯亮,延时500ms;红灯亮,延时500ms;黄灯亮,延时500ms。绿灯灭,延时500ms;红灯灭·,延时500ms;黄灯灭·,延时500ms。以此循环就实现了跑马灯的效果,下面编写两个函数实现:
函数一(加长版):
void led_running_1()
{
//将引脚置为高电平
digitalWrite(LED_GREEN,HIGH);
//延时500ms
delay(500);
digitalWrite(LED_GREEN,HIGH);
delay(500);
digitalWrite(LED_GREEN,HIGH);
delay(500);
//将引脚置为低电平
digitalWrite(LED_GREEN,LOW);
delay(500);
digitalWrite(LED_GREEN,LOW);
delay(500);
digitalWrite(LED_GREEN,LOW);
delay(500);
}
该函数运用正常控制流程编写,代码较为冗余。
函数二(精简版):
void led_running_2()
{
//定义引脚数组
const int st[] = {15,14,13};
for(int i = 0;i < 3;i++)
{
digitalWrite(st[i],HIGH);
delay(500);
}
for(int i = 0;i < 3;i++)
{
digitalWrite(st[i],LOW);
delay(500);
}
}
该代码通过for循环,代替了重复定义,相比一实现了代码的简化。
全部代码如下:
#include <Arduino.h>
// 定义LED管脚
#define LED_GREEN 14
#define LED_RED 12
#define LED_YELLOW 13
//实现跑马灯
void led_running_1();
void led_running_2();
void setup() {
//设置LED管脚为输出模式
pinMode(LED_GREEN,OUTPUT);
pinMode(LED_RED,OUTPUT);
pinMode(LED_YELLOW,OUTPUT);
}
void loop() {
led_running_1();
}
void led_running_1()
{
//将引脚置为高电平
digitalWrite(LED_GREEN,HIGH);
//延时500ms
delay(500);
digitalWrite(LED_GREEN,HIGH);
delay(500);
digitalWrite(LED_GREEN,HIGH);
delay(500);
//将引脚置为低电平
digitalWrite(LED_GREEN,LOW);
delay(500);
digitalWrite(LED_GREEN,LOW);
delay(500);
digitalWrite(LED_GREEN,LOW);
delay(500);
}
void led_running_2()
{
const int st[] = {15,14,13};
for(int i = 0;i < 3;i++)
{
digitalWrite(st[i],HIGH);
delay(500);
}
for(int i = 0;i < 3;i++)
{
digitalWrite(st[i],LOW);
delay(500);
}
}
下载到开发板,可以看到三个灯依次亮起,这样就实现了一个跑马灯。
跑马灯效果
总结
以上就是今天要讲的内容,本文仅仅简单介绍了如何用esp32点亮LED,之后会继续记录esp32其他方面的学习。