【ESP32 项目】使用Arduino库的GPIO框架点亮ESP32的灯
0. 搭建平台
推荐文章:《老宇哥带你玩转ESP32:02使用VSCode+PlatformIO搭建开发环境》
1. GPIO 输入输出
数字输出功能
这里我们就以一个LED灯来演示,首先,我们需要在setup()中初始化对应的IO在输出模式,使用pinMode函数,第一个参数上对应的IO序号,第二个是IO的模式
pinMode(4, OUTPUT);
然后可以通过digitalWrite()函数改变数字引脚的电平状态,HIGH输出高平,LOW输出低电平
digitalWrite(4, HIGH); // 输出高电平
digitalWrite(4, LOW); // 输出低电平
所有 ESP32 GPIO 引脚都可以在输入或输出模式下运行。引脚34-39只能用于输入。还有其他一些引脚也有其它特性,这个我们现在也没必要太纠结,用到的时候再去看就好了。
数字输入功能
在输入模式下,我们可以通过IO来读取外部数字信号,我们这里用按键来表示。
跟输出模式一样,我们在setup()中初始化对应的IO在输入模式,也使用pinMode函数
pinMode(2, INPUT);
然后通过digitalRead(GPIO_pin)就可以读取对应IO的电平了。
代码示例
下面的代码我们定义了2个GPIO引脚。GPIO2用于按键输入,GPIO4用于LED输出。
初始化之后,我们在loop()中不断的读取按键的电平状态,并赋值给LED,实现按键下去灯熄灭,松开灯点亮的效果。
#define LED_GPIO 4
#define BTN_GPIO 2
int BTN_State = 0; //按键状态
void setup()
{
pinMode(LED_GPIO, OUTPUT);
pinMode(BTN_GPIO, INPUT);
}
void loop()
{
// 读取按键状态
BTN_State = digitalRead(BTN_GPIO);
// 把按键状态做为LED灯的输出
digitalWrite(LED_GPIO, BTN_State);
}
接下来我们用中断的方式实现一下:
attachInterrupt(uint8_t pin, void ()(void), int mode)函数用来配置中断功能:
-
参数一,GPIO引脚号
-
参数二,中断回调函数
-
参数三,中断触发模式(RISING、FALLING、CHANGE等)
参数三这个可以设置各种模式,例如上升沿触发,下降沿出发,任意沿触发,电平信号等等模式。
我们用上面的例子改一下:
#define LED_GPIO 4
#define BTN_GPIO 2
int BTN_State = 0; //按键状态
//中断回调函数
void bt_callBack(void)
{
BTN_State = digitalRead(BTN_GPIO); // 读取按键状态
digitalWrite(LED_GPIO, BTN_State); // 把按键状态做为LED灯的输出
}
void setup()
{
pinMode(LED_GPIO, OUTPUT); //LED输出模式
pinMode(BTN_GPIO, INPUT); //输入上拉模式
attachInterrupt(BTN_GPIO, bt_callBack, CHANGE); //使能中断
}
void loop()
{
}
转载自:
《老宇哥带你玩转ESP32:02使用VSCode+PlatformIO搭建开发环境》
《老宇哥带你玩转ESP32:03 GPIO数字输入与数字输出》
《老宇哥带你玩转 ESP32:05 ADC用起来这也太简单了吧》
原文作者:CSDN-芯片之家