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é!
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ể:
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:
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:
Khi bạn thả tay ra khỏi nút nhấn, digital input thay đổi, đè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!