初次学习ESP32。记录一下,以免遗忘。方便日后项目查询。

学习平台为VS Code中PlatformIO搭建的环境,写法与Arduino的一样。

对于ESP32的引脚读/写操作与Arduino一样函数分别为

pinMode(pin.mode);//功能:工作模式设置
//模块的23个引脚均可作为读IO口,除34,35,36,39不可做写IO口其他均可写IO口
//34,35,36,39在作为读IO口时不能设置为上拉或者下拉模式
//mode:                INPUT:输入
//                   OUTPUT:输出
//                   PULLUP:上拉
//                   INPUT_PULLUP:输入上拉模式
//                   PULLDOWN:下拉
//                   INPUT_PULLDOWN:输入下拉模式
//                   OPEN_DRAIN:开漏模式
//                   OUTPUT_OPEN_DRAIN:输出开漏模式
//                   ANALOG:模拟量输入模式 DAC
digitalRead(pin);   //功能:从指定引脚读取外部输入的数字信号
//返回值:当引脚接受为高电平时返回值为1,当引脚接受为低电平时,返回值为0
digitalWrite(pin,value);//功能:向指定引脚输出高低电平数字信号
//value:HIGH(高电平)LOW(低电平),HIGH为1,LOW为0;

中断触发模式:当引脚接受到中断信号时,内部程序进行执行中断函数程序

attachInterrupt(pin,function,mode);//功能:指定中断的引脚,并对中断引脚进行初始化的设置
//pin:设置中断的引脚,23个引脚都可设置为中断引脚
//function:中断回调函数,当引脚触发时执行的中断函数,中断回调函数不能有输入参数及其返回值
//mode:引脚中断方式模式
//                        RISING:上升沿
//                        FALLING:下降沿
//                        CHANGE:电平的跳变(从低到高,或从高到低)
//                        ONLOW:在低电平的时候,一直处于低电平的时候
//                        ONHIGH:在高电平的时候,一直处于高电平的时候
detachInterrupt(pin);//功能:关闭指定引脚的中断功能

学习了GPIO口的配置方式以及中断函数的调用;实现功能,按键控制LED灯

以下为例程:

#include <Arduino.h>
/
//GPIO设置以及外部中断函数的使用//

#define EXT_ISR 2
uint8_t start=0;

void PinIntEvent()
{
  start = ~ start;
  digitalWrite(2,start);
}
void setup()
{
  // put your setup code here, to run once:
#if 1==EXT_ISR 
  pinMode(2,OUTPUT);      //引脚设置为输出模式
  pinMode(0,INPUT_PULLUP);//引脚设置为输入,输入上拉模式
  //GPIO口的模式设置
  //第一参数:引脚选择,结合原理图
  //第二参数:模式选择  INPUT:输入
  //                   OUTPUT:输出
  //                   PULLUP:上拉
  //                   INPUT_PULLUP:输入上拉模式
  //                   PULLDOWN:下拉
  //                   INPUT_PULLDOWN:输入下拉模式
  //                   OPEN_DRAIN:开漏模式
  //                   OUTPUT_OPEN_DRAIN:输出开漏模式
  //                   ANALOG:模拟量输入模式 DAC

#elif 2==EXT_ISR
  pinMode(2,OUTPUT);                      //引脚设置为输出模式
  pinMode(0,INPUT_PULLUP);
  attachInterrupt(0,PinIntEvent,FALLING); //外部中断函数调用
  //第一参数:引脚
  //第二参数:中断函数名
  //第三参数:外部中断触发模式  RISING:上升沿
  //                          FALLING:下降沿
  //                          CHANGE:电平的跳变(从低到高,或从高到低)
  //                          ONLOW:在低电平的时候,一直处于低电平的时候
  //                          ONHIGH:在高电平的时候,一直处于高电平的时候


#endif
}

void loop()
{
#if 1==EXT_ISR
  if (digitalRead(0)==0)
  {
    delay(10);
    if (digitalRead(0)==0)
    {
      start =~start;
      digitalWrite(2,start);
    }
    while(digitalRead(0)!=1);
  }
#endif
  // put your main code here, to run repeatedly:
}

效果展示:

一开始:蓝色LED灯不亮

esp32 IO口 esp32 io口 输入输出模式_esp32 IO口

第一次按下:蓝色LED灯亮

esp32 IO口 esp32 io口 输入输出模式_外部中断_02

 再次按下时:蓝色LED灯灭

esp32 IO口 esp32 io口 输入输出模式_esp32 IO口_03