ESP32是一个集成了Wi-Fi、蓝牙并支持低功耗的微控制器。它有许多GPIO(通用输入/输出)引脚,可以用于连接各种外部设备,如传感器、按钮、开关等。
  在使用这些外部设备时,我们经常需要知道它们何时发生了变化,比如按钮是否按下,传感器是否检测到了某个信号。为了检测这些变化,ESP32提供了中断功能,当GPIO引脚状态发生改变时,ESP32可以立即暂停当前任务并开始处理中断程序。这样可以大大提高系统的实时性和响应速度。
  外部中断的处理需要一定的硬件和软件支持,因此只有特定的GPIO引脚才能用于外部中断。ESP32的所有GPIO引脚(除了34-39之外)都可以被配置为中断引脚,其中一些引脚还具有额外的功能,如触摸感应和内部上拉电阻。
使用外部中断有以下几个好处:
1. 实时响应:外部中断可以立即暂停当前任务并执行中断程序,因此可以实现对外部事件的实时响应。比如,当按下按钮时,可以立即触发中断处理程序,而不需要在主循环中轮询按钮状态。
2. 节省CPU资源:外部中断的处理由硬件负责,不需要CPU持续监测输入状态。这样可以节省CPU的资源,使得CPU可以处理其他任务,提供更好的系统性能。
3. 减少功耗:通过使用外部中断来检测外部事件,可以让系统进入低功耗状态,只有当中断事件发生时才唤醒系统处理。这在对功耗要求较高的应用中尤为重要,可以延长电池寿命或降低能耗。
4. 精准触发:外部中断可以通过配置边沿触发方式(上升沿、下降沿或双边沿)以及滤波选项,实现对特定事件的精确触发。这对于需要高精度的事件检测和计时非常有用,如测量脉冲宽度或计数器应用。
5. 提高系统可靠性:使用外部中断可以减少出错的可能性。由于中断是硬件级别的,不容易受到软件逻辑控制的干扰,因此可以提高系统的可靠性和稳定性。
总之,使用外部中断可以实现实时响应、节省CPU资源、降低功耗,并且具有精准触发和提高系统可靠性的优势。在需要对外部事件进行快速和可靠处理的应用中,使用外部中断是一个非常有效的方法。
在单片机中,中断是指当 CPU 在正常处理主程序时,突然发生了另一件事件 A(中断发生)需要 CPU 去处理,这时 CPU 就会暂停处理主程序(中断响应),转而去处理事件 A(中断服务)。当事件 A 处理完以后,再回到主程序原来中断的地方继续执行主程序(中断返回)。这一整个过程称为中断。

中断可以根据中断源分为 硬件中断 和 软件中断:
注意:ESP32 无法使用 MicroPython 设置中断的优先级。
ESP32 的外部中断有上升沿、下降沿、低电平、高电平触发模式。上升沿和下降沿触发如下:

通过外部中断实现按键控制 LED。
from machine import Pin
button = Pin(14, Pin.IN, Pin.PULL_DOWN) # 配置中断模式
button.irq(handler, trigger)外部中断通过 Pin 模块来配置。
其中 button.irq(handler, trigger) 是配置中断模式,参数意义:
完整代码
实例1(MicroPython)
import time
from machine import Pin
# 定义 PIN 引脚对象
button = Pin(14, Pin.IN, Pin.PULL_DOWN)
led = Pin(2, Pin.OUT) 
# 定义 button 的外部中断函数
def button_irq(button):
  time.sleep_ms(20) # 按键消抖
  if button.value() == 1:
    led.value(not led.value())
# 绑定中断函数
button.irq(button_irq, Pin.IRQ_RISING)实例2(Arduino)
/*
 *该程序的作用是实现在串口屏中显示中断触发信息
 */
#define BUTTON 14
// 定义可以在外部中断函数内部使用的变量
volatile bool flag = false;
void handle_interrupt() {
    flag = true;
}
void setup() {
    Serial.begin(9600);
    pinMode(BUTTON, INPUT_PULLDOWN);
    // 配置中断引脚
    attachInterrupt(digitalPinToInterrupt(BUTTON), handle_interrupt, FALLING);
}
void loop() {
    if (flag) {
        Serial.println("外部中断触发了");
        flag = false;
    }
} 
            PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过调节占空比的变化来调节信号、能量等的变化。
Arduino-ESP32与ESP-IDF的版本对应表。
Arduino-ESP32提供了多种文件系统解决方案,本文将深入解析SPIFFS、LittleFS和SD卡三种主流存储方案,帮助你做出最佳选择。
ESP32-P4-WIFI6-DEV-KIT是一款微雪(Waveshare)设计的基于 ESP32-P4 的多媒体开发板,并集成 ESP32-C6,支持 Wi-Fi 6 和 BLE 5 无线连接。它提供丰富的人机交互接口,包括 MIPI-CSI (集成图像信号处理器 ISP)、MIPI-DSI、SPI、I2S、I2C、LED PWM、MCPWM、RMT、ADC、UART 和 TWAI 等。
 
            ESP-Hosted 解决方案提供了将 ESP 板用作 Wi-Fi 和 Bluetooth/BLE 连接的通信处理器的方法。
ESP-Hosted 提供了一种将ESP芯片和模组用作通信协处理器的解决方案,该解决方案为主机微处理器或微控制器提供无线连接,使主机能够与其他设备通信。简单来说为网卡方案。
Arduino+ESP32上使用TFT_eSPI库快速点亮这个屏幕,驱动芯片ST7789
本文给出了一个ESP32与SPI 接口TFT显示屏接线的详细说明,供大家参考。
本文讲解如何在Micropython环境下使用ESP32的ESPNow功能进行数据传输。
ESP-Dongle 是一款基于 ESP32-S3 芯片开发的多功能 USB Device 解决方案。它不仅外形小巧,功能齐全,更集成了无线 U 盘、SD 卡读取以及 USB 无线网卡等多项功能。
 
            ESP32 系列芯片可以利用 CSI 数据实现动作检测和存在检测。无论是自动调节灯光、风扇,还是节能控制,CSI 技术为智能家居带来了新的可能性。随着 CSI 技术的发展,未来的智能家居将能够更精确地感知和响应我们的行为,实现更高效、更人性化的控制。
