Dùng nút nhấn ESP32 điều khiển đèn LED – Digital Input & Output

Trong hướng dẫn này, IoTZone sẽ hướng dẫn bạn cách đọc tín hiệu Digital Input như nút nhấn và điều khiển tín hiệu Digital Output như đèn LED, thông qua mạch ESP32 và phần mềm Arduino IDE nhé!

Điều khiển Digital Input (nút nhấn) và Digital Output (đèn LED) trên ESP32
Điều khiển Digital Input (nút nhấn) và Digital Output (đèn LED) trên ESP32

Cài đặt phần mềm

Bạn cần cài đặt sẵn Arduino IDE trên máy tính của mình, tham khảo hướng dẫn sau để thực hiện nhé: Cách lập trình ESP32 bằng Arduino IDE (Windows, Linux, Mac OS X)

Chọn chân Digital Output trên ESP32

Trước tiên, chúng ta cần cấu hình chân GPIO dùng để điều khiển Output. Bạn sử dụng câu lệnh sau:

pinMode(GPIO, OUTPUT);

Để điều khiển tín hiệu đầu ra, bạn chỉ cần sử dụng hàm digitalWrite() với các thông số gồm: số thứ tự của chân GPIO và trạng thái (HIGH hoặc LOW):

digitalWrite(GPIO, STATE);

Như trình bày ở hướng dẫn trước (Tổng quan về ESP32 Pinout GPIOs & Cách sử dụng), tất cả các chân GPIOs từ 6 đến 11 đều có thể dùng làm output. Ngược lại, các chân 34, 35, 36 và 39 chỉ phù hợp để làm đầu vào (input).

Chọn chân Digital Input trên ESP32

Tương tự, bạn sử dụng câu lệnh sau để cấu hình chân GPIO mà bạn muốn dùng để điều khiển tín hiệu đầu vào:

pinMode(GPIO, INPUT);

Để đọc tín hiệu đầu vào, bạn dùng hàm digitalWrite(), trong đó có số thứ tự của chân GPIO.

digitalWrite(GPIO);

Tất cả các chân GPIOs đều có thể dùng làm đầu vào, ngoại trừ chân GPIO từ 6 đến 11 (đây là các chân dùng để kết nối với đèn flash SPI tích hợp trên mạch)

Thực hiện dự án: Dùng nút nhấn điều khiển đèn LED

Để bạn hiểu rõ hơn về cách hoạt động của Digital Input và Output, chúng ta hãy cùng làm một dự án đơn giản với nút nhấn và đèn LED, cụ thể:

Thực hiện dự án: Dùng nút nhấn điều khiển đèn LED qua Input và Output Digital

Kết nối phần cứng

Trước khi lập trình, chúng ta cần kết nối các phần cứng với nhau, cụ thể là kết nối đèn LED và nút nhấn:

  • Đèn LED: Nối với GPIO 5
  • Nút nhấn: Nối với GPIO 4

Chuẩn bị

Dưới đây là danh sách các linh kiện điện tử bạn cần dùng trong dự án này:

  • Mạch ESP32
  • Đèn LED
  • Điện trở 330 Ohm
  • Nút nhấn
  • Điện trở 10k Ohm
  • Breadboard
  • Dây Jumper

Kết nối

Bạn kết nối như hình sau:

Kết nối phần cứng Thực hiện dự án: Dùng nút nhấn điều khiển đèn LED

Lập trình

Dưới đây là đoạn code cho dự án: Dùng nút nhấn điều khiển đèn LED, bạn chỉ cần copy và nạp vào mạch là được nhé:

// set pin numbers
const int buttonPin = 4;  // the number of the pushbutton pin
const int ledPin =  5;    // the number of the LED pin

// variable for storing the pushbutton status 
int buttonState = 0;

void setup() {
  Serial.begin(115200);  
  // initialize the pushbutton pin as an input
  pinMode(buttonPin, INPUT);
  // initialize the LED pin as an output
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // read the state of the pushbutton value
  buttonState = digitalRead(buttonPin);
  Serial.println(buttonState);
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH
  if (buttonState == HIGH) {
    // turn LED on
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off
    digitalWrite(ledPin, LOW);
  }
}

Giải thích chương trình

  • Tạo các biến để gán chân GPIO cần dùng (nút nhấn chân số 4, đèn LED chân số 5)
const int buttonPin = 4;
const int ledPin = 5;
  • Tạo biến để lưu trạng thái của nút, chúng ta quy định trạng thái mặc định là 0 (nút chưa được nhấn):
int buttonState = 0;
  • Bên trong setup (), chúng ta lưu nút nhấn làm đầu vào (input) và đèn LED làm đầu ra (output):
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
  • Bên trong loop (), chúng ta sẽ lưu trạng thái của nút nhấn và đèn LED tương ứng thông qua biến. Cụ thể:
    1, Đọc trạng thái của digital input nút nhấn và lưu giá trị này vào một biến có tên “ButtonState”, chúng ta sẽ sử dụng hàm digitalRead như bên dưới:
buttonState = digitalRead(buttonPin);

2, Kiểm tra điều kiện: Nếu nút nhấn đang ở trạng thái HIGH, nút nhấn sẽ bật đèn LED. Lúc này chúng ta sẽ sử dụng hàm digitalWrite(), bao gồm thông tin là LedPin và HIGH:

if (buttonState == HIGH) {
  digitalWrite(ledPin, HIGH);
}

3, Kiểm tra điều kiện: Nếu nút nhấn không ở trạng thái HIGH, chúng ta sẽ tắt đèn LED. Bạn chỉ cần đổi thành LOW như đoạn code dưới:

else {
  digitalWrite(ledPin, LOW);
}

Upload chương trình

Lưu ý: Trước khi upload chương trình, bạn cần click vào Tool >> Board và chọn đúng bảng mạch ESP32 mà bạn đang dùng.

Sau đó, bạn click vào Tools Port và chọn đúng cổng COM mà mạch của bạn đang kết nối rồi nhấn nút Upload, chờ tới khi giao diện thông báo “Done uploading” (đã tải lên xong).

Nếu trên màn hình xuất hiện nhiều dấu chấm (ví dụ như …__…__) trong cửa sổ gỡ lỗi (debugging) và xuất hiện thông báo “Failed to connect to ESP32: Timed out waiting for packet header”, thì bạn cần nhấn nút BOOT (khởi động) trên mạch ESP32 sau khi dấu chấm xuất hiện.

Kết quả

Sau khi uploading code, hãy kiểm tra kết quả thực hiện của bạn nhé! Đèn LED sẽ bật khi bạn nhấn nút, như hình dưới:

Nhấn nút làm thay đổi digital input, đèn LED sẽ bật
Nhấn nút làm thay đổi digital input, đèn LED sẽ bật

Khi bạn thả tay ra khỏi nút nhấn, digital input thay đổi, đèn LED sẽ tắt:

Thả nút làm thay đổi digital input, đèn LED sẽ tắt
Thả nút làm thay đổi digital input, đèn LED sẽ tắt

Kết luận

Trong hướng dẫn này, mình đã hướng dẫn bạn cách đọc các tín hiệu digital input, digital output và ứng dụng chúng vào thực hành một dự án đơn giản: Điều khiển đèn LED bằng nút nhấn. Chúc các bạn thành công!

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 *