Bài 2. Chức năng input, output và ngắt ngoài trên kít wifi ESP32

ESP32, với khả năng kết nối Wi-Fi và Bluetooth, cùng với một bộ tính năng phong phú, đã trở thành một lựa chọn hàng đầu cho các dự án IoT. Để tận dụng tối đa sức mạnh của ESP32, việc hiểu rõ về các tính năng cơ bản như chức năng input, output và ngắt ngoài là vô cùng quan trọng.

Input và output cho phép chúng ta tương tác với thế giới bên ngoài, đọc dữ liệu từ các cảm biến và điều khiển các thiết bị. Ngắt ngoài cung cấp một cách hiệu quả để phản ứng nhanh chóng với các sự kiện xảy ra, ví dụ như khi một nút nhấn được ấn hoặc một cảm biến phát hiện chuyển động.

Bài viết này Điện thông minh E-smart sẽ hướng dẫn bạn cách sử dụng các tính năng này một cách hiệu quả, cùng với các ví dụ thực tế để giúp bạn dễ dàng hình dung và áp dụng vào các dự án của mình.

Chức năng Input và Output

  • Input: Dùng để đọc dữ liệu từ các thiết bị ngoại vi như nút nhấn, cảm biến,…
  • Output: Dùng để điều khiển các thiết bị như đèn LED, động cơ, relay…
Input và output trên esp32

Các lệnh thiết lập chức năng input/ouput:

  • pinMode(pin, mode): Thiết lập chế độ cho chân (INPUT, INPUT_PULLUP, INPUT_PULLDOWN hoặc OUTPUT).
  • digitalRead(pin): Đọc giá trị số (0 hoặc 1) từ chân input/output.
  • digitalWrite(pin, value): Viết giá trị số (0 hoặc 1) ra chân output.

Ví dụ: Dùng chức năng input và output trên ESP32 điều khiển đèn LED bằng nút nhấn

Code điều khiển led bằng nút ấn

Code chương trình:

const int buttonPin = 0; // Chân kết nối cho nút nhấn
const int ledPin = 2;    // Chân kết nối cho đèn LED

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);//Đặt chế độ chân là INPUT_PULLUP
  pinMode(ledPin, OUTPUT);   // Đặt chế độ chân ledPin là OUTPUT
}

void loop() {
  int buttonState = digitalRead(buttonPin); // Đọc trạng thái nút nhấn
  if (buttonState == HIGH) {
    digitalWrite(ledPin, HIGH); // Bật đèn LED
  } else {
    digitalWrite(ledPin, LOW); // Tắt đèn LED
  }
}

Lưu ý khi dùng chức năng INPUT và OUTPUT trên ESP32

Kít ESP32 Devkit V1

Khi sử dụng chức năng INPUT OUTPUT trên ESP32 chúng tra cần chú ý lựa chọn chân cho phù hợp để không ảnh hưởng đến các chế độ hoạt động trên ESP32. Dưới đây là bảng tra cứu các bạn có thể tham khảo:

GPIOInputOutputNotes
0pulled upOKoutputs PWM signal at boot, must be LOW to enter flashing mode
1TX pinOKdebug output at boot
2OKOKconnected to on-board LED, must be left floating or LOW to enter flashing mode
3OKRX pinHIGH at boot
4OKOK
5OKOKoutputs PWM signal at boot, strapping pin
6xxconnected to the integrated SPI flash
7xxconnected to the integrated SPI flash
8xxconnected to the integrated SPI flash
9xxconnected to the integrated SPI flash
10xxconnected to the integrated SPI flash
11xxconnected to the integrated SPI flash
12OKOKboot fails if pulled high, strapping pin
13OKOK
14OKOKoutputs PWM signal at boot
15OKOKoutputs PWM signal at boot, strapping pin
16OKOK
17OKOK
18OKOK
19OKOK
21OKOK
22OKOK
23OKOK
25OKOK
26OKOK
27OKOK
32OKOK
33OKOK
34OKinput only
35OKinput only
36OKinput only
39OKinput only

Khi dùng các chân trên ESP32 làm INPUT hoặc OUTPUT chúng ta cần lưu ý đến 5 chân đặc biệt để tránh ảnh hưởng đến quá trình khởi động cũng như nạp chương trình:

  • GPIO 0: Phải ở mức LOW để vào chế độ bootloader.
  • GPIO 2: Phải ở trạng thái floating hoặc LOW trong quá trình khởi động.
  • GPIO 5: Phải ở mức HIGH trong quá trình khởi động.
  • GPIO 12: Phải ở mức LOW trong quá trình khởi động.
  • GPIO 15: Phải ở mức HIGH trong quá trình khởi động.

Các bạn có thể tham khảo thêm về chức năng input và output trên trang web: randomnerdtutorials.com

Ngắt ngoài trên ESP32

Ngắt ngoài cho phép chương trình của bạn phản ứng nhanh chóng với các sự kiện xảy ra trên một chân GPIO. Khi sự kiện xảy ra, một hàm callback sẽ được gọi để thực hiện các tác vụ cần thiết.

Hoạt động của ngắt ngoài

Cách sử dụng ngắt ngoài trên ESP32:

  • pinMode(pin, mode): Thiết lập chế độ INPUT/INPUT_PULLUP
  • attachInterrupt(pin, ISR, mode): Thiết lập ngắt cho một chân GPIO.
    • pin: Chân GPIO cần thiết lập ngắt.
    • ISR: Hàm callback sẽ được gọi khi ngắt xảy ra.
    • mode: Chế độ ngắt (RISING, FALLING, CHANGE).

Ví dụ: Bật còi báo động khi phát hiện chuyển động dùng ngắt ngoài trên ESP32

Bật còi báo động khi phát hiện chuyển động dùng ESP32

Code chương trình:

// Khai báo các chân kết nối
const int pirPin = 13; // Chân kết nối cảm biến PIR
const int buzzerPin = 14; // Chân kết nối còi báo

void setup() {
  // Thiết lập chế độ cho các chân kết nối
  pinMode(pirPin, INPUT); // Thiết lập chân PIR là đầu vào
  pinMode(buzzerPin, OUTPUT); // Thiết lập chân còi báo là đầu ra
  
  // Gắn ngắt ngoài cho chân PIR, gọi hàm motionDetected khi có tín hiệu RISING
  attachInterrupt(pirPin, motionDetected, RISING);
}

void loop() {
  // Chương trình chính (để trống vì xử lý ngắt ngoài)
}

// Hàm xử lý ngắt ngoài khi phát hiện chuyển động
ICACHE_RAM_ATTR void motionDetected() {
  digitalWrite(buzzerPin, HIGH); // Bật còi báo
  delay(1000); // Chờ 1 giây
  digitalWrite(buzzerPin, LOW); // Tắt còi báo
}

Kết luận

Chức năng Input, output và ngắt ngoài là những khái niệm cơ bản nhưng vô cùng quan trọng khi làm việc với ESP32. Bằng cách hiểu rõ và ứng dụng thành thạo các tính năng này, bạn có thể tạo ra vô số các dự án IoT thú vị và hữu ích.

5/5 - (2 bình chọn)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Chiêu sinh khóa Lập trình ESP32 căn bản, lớp (20h-21h30) 3-5-7 ngày 07/01/2024. Học phí 1tr/khóa (20 buổi). Đăng ký qua zalo: 0919.890.938

X
Contact Me on Zalo