ESP32单片机基础入门

第3课:第一个ESP32程序 - LED闪烁与按键中断

课程目标

在本课程中,您将学习如何编写第一个ESP32程序,包括:

所需硬件

🔌
ESP32开发板
(如ESP32-DevKitC)
💡
LED灯
(建议5mm)
🔘
按键开关
(轻触开关)
🔄
电阻
(220Ω和10kΩ各1个)
🔌
面包板
(用于连接电路)
🔌
杜邦线
(若干)

1. LED闪烁(GPIO输出)

电路连接

将LED的正极(长脚)通过220Ω电阻连接到ESP32的GPIO2引脚
将LED的负极(短脚)连接到GND(地)
注意: ESP32开发板通常自带一个连接到GPIO2的LED,可以直接使用这个LED进行测试。

代码实现

使用Arduino IDE创建一个新项目,输入以下代码:

// 定义LED引脚
#define LED_PIN 2

void setup() {
  // 初始化LED引脚为输出模式
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  // 点亮LED
  digitalWrite(LED_PIN, HIGH);
  // 延时1秒
  delay(1000);
  // 熄灭LED
  digitalWrite(LED_PIN, LOW);
  // 延时1秒
  delay(1000);
}
        
将代码上传到ESP32开发板
观察LED是否按照1秒间隔闪烁
成功! 您已经完成了第一个ESP32程序,控制LED闪烁!

2. 按键输入与中断(gpio_isr_handler_add)

电路连接

将按键开关的一端连接到ESP32的GPIO0引脚
将按键开关的另一端通过10kΩ电阻连接到GND(下拉电阻)
同时将按键开关的另一端连接到3.3V电源(上拉)
重要: ESP32的GPIO0在启动时用于确定启动模式,不要在该引脚上连接强下拉电路。

代码实现 - 轮询方式

首先,我们实现一个简单的按键检测(轮询方式):

#define BUTTON_PIN 0
#define LED_PIN 2

void setup() {
  pinMode(BUTTON_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  if (digitalRead(BUTTON_PIN) == LOW) {
    // 按键按下(假设是上拉电路)
    digitalWrite(LED_PIN, HIGH);
  } else {
    digitalWrite(LED_PIN, LOW);
  }
}
        

代码实现 - 中断方式

更高效的方式是使用中断,ESP32支持GPIO中断:

#include "driver/gpio.h"

#define BUTTON_PIN GPIO_NUM_0
#define LED_PIN GPIO_NUM_2

// 中断处理函数
void IRAM_ATTR button_isr_handler(void* arg) {
  // 切换LED状态
  gpio_set_level(LED_PIN, !gpio_get_level(LED_PIN));
}

void setup() {
  // 配置LED引脚
  gpio_pad_select_gpio(LED_PIN);
  gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
  
  // 配置按键引脚
  gpio_pad_select_gpio(BUTTON_PIN);
  gpio_set_direction(BUTTON_PIN, GPIO_MODE_INPUT);
  gpio_set_pull_mode(BUTTON_PIN, GPIO_PULLUP_ONLY);
  
  // 配置中断
  gpio_set_intr_type(BUTTON_PIN, GPIO_INTR_NEGEDGE); // 下降沿触发
  gpio_install_isr_service(0); // 安装GPIO ISR服务
  gpio_isr_handler_add(BUTTON_PIN, button_isr_handler, NULL); // 添加中断处理函数
}

void loop() {
  // 主循环可以空置或执行其他任务
  delay(1000);
}
        
技术要点:

课后练习

  1. 修改LED闪烁程序,使LED闪烁频率可以通过按键调整
  2. 实现双击按键切换LED模式(常亮/闪烁/关闭)
  3. 尝试使用不同的GPIO引脚,了解ESP32的GPIO特性
客服小姐姐(优先添加)

客服小姐姐(优先添加)

客服微信

讲师微信(备用)