关于ESP32上的GPIO外设详细介绍会放在本栏目的ESP-IDF开发文章中,跳转栏目目录可以找到对应的文章。
1. API
1.1 管脚配置
void pinMode(uint8_t pin, uint8_t mode);
- pin:管脚号;
- mode:GPIO模式,配置选项如下。
配置项 | 功能 |
---|---|
INPUT | 输入模式 |
OUTPUT | 输入模式 |
INPUT_PULLDOWN | 下拉输入模式 |
INPUT_PULLUP | 上拉输入模式 |
1.2 管脚输出
void digitalWrite(uint8_t pin, uint8_t val);
- pin:管脚号;
- val:输出状态;HIGH:高电平;LOW:低电平。
1.3 管脚输入
int digitalRead(uint8_t pin);
- pin:管脚号。
返回管脚的输入电平。
2. 例程
2.1 LED点灯
这个例程实现LED的点灯,主循环中每秒改变一次LED的状态。
#include <Arduino.h>
void setup()
{
pinMode(2, OUTPUT);
}
void loop()
{
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(2, LOW);
delay(1000);
}
Arduino里面,初始化操作放在setup函数中,loop函数就是主任务循环。我开发板上的LED是连在IO2上的。在setup函数中初始化管脚为输出模式;loop函数中每一秒改变一次管脚输出;延时调用delay函数即可,单位是毫秒。
下载程序后,开发板上的LED灯就会开始闪烁了。
2.2 按键输入
这个例程实现按键的输入检测,检测到按键输入就往串口打印一条信息。
#include <Arduino.h>
void setup()
{
pinMode(0, INPUT_PULLUP);
Serial.begin(115200);
}
void loop()
{
if (LOW == digitalRead(0)) {
/* 软件去抖 */
while (LOW == digitalRead(0)) {
delay(20);
}
Serial.println("Key pressed");
}
}
我这里使用的按键是连接到IO0管脚上的,带外部上拉,所以这里管脚配置成输入上拉模式;顺便初始化串口,用于打印log。
主循环就是不断读取管脚的信号,检测到按键按下后会经过一个软件去抖操作,防止程序误检测,最后就是打印信息。