Interrupt trong ESP32: Hướng dẫn chi tiết từ cơ bản đến nâng cao
Interrupt là một cơ chế quan trọng trong lập trình nhúng, cho phép ESP32 phản ứng ngay lập tức với sự kiện mà không cần phải liên tục kiểm tra trong vòng lặp loop.
Interrupt là gì
Interrupt là tín hiệu làm gián đoạn chương trình chính để chuyển sang xử lý một hàm đặc biệt gọi là ISR (Interrupt Service Routine).
Sau khi xử lý xong, chương trình sẽ quay lại vị trí trước đó.
Interrupt giúp:
Phản hồi nhanh
Tiết kiệm CPU
Xử lý sự kiện real-time
Các loại interrupt trong ESP32
ESP32 hỗ trợ nhiều loại interrupt:
GPIO interrupt
Timer interrupt
UART interrupt
WiFi và system interrupt
Trong bài này tập trung vào GPIO interrupt vì dùng nhiều nhất.
Cách hoạt động
Khi một chân GPIO thay đổi trạng thái, ESP32 sẽ:
Tạm dừng chương trình chính
Chạy hàm ISR
Quay lại chương trình chính
Code ví dụ cơ bản
#define BUTTON_PIN 4 #define LED_PIN 2 volatile bool triggered = false; void IRAM_ATTR handleInterrupt() { triggered = true; } void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(LED_PIN, OUTPUT); attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), handleInterrupt, FALLING); } void loop() { if (triggered) { digitalWrite(LED_PIN, !digitalRead(LED_PIN)); triggered = false; } }