Cấu hình chân GPIO mà bạn muốn đọc trạng thái làm INPUT. Sử dụng pinMode() để cấu hình input/ouput:

pinMode(GPIO_NUM_0, INPUT_PULLUP);

Để đọc trạng thái chân Input, bạn chỉ cần sử dụng hàm digitalRead(), đối số đầu vào là GPIO (kiểu dữ liệu int – Tất cả các GPIO của ESP32 đều có thể được sử dụng làm đầu ra, ngoại trừ GPIO từ 6 đến 11) là chân mà bạn muốn đọc giá trị.

digitalRead(GPIO_NUM_0); // Kết quả trả về = LOW ,HIGH

Bây giờ mình sẽ xây dựng một project sử dụng digital Input và digital Output, ví dụ đơn giản với nút nhấn và đèn LED. Mình sẽ đọc trạng thái của nút bấm và sáng đèn LED tương ứng như minh họa trong hình sau. Nếu bạn không có Button và Led thì có thể sử dụng ngay GPIO 0 và GPIO 2 ngay trên board.

Chương trình trên Arduino IDE:

int PressButton= 0;
const int Button = 0; // Khai báo chân GPIO 0 là Button pinconst int Led = 2; //

void setup() {
Serial.begin(115200);
// Khởi tạo Button pin (GPIO 0) là chân Input
pinMode(Button, INPUT_PULLUP);
// Khởi tạo Led pin (GPIO 2) là chân Output
pinMode(Led, OUTPUT);
}

void loop() {
PressButton = digitalRead(Button);
Serial.println(PressButton);
if (PressButton == LOW) {
// Mở Led
digitalWrite(Led, HIGH);
} else {
// Tắt Led
digitalWrite(Led, LOW);
}
}

Giải thích code:

Đặt 1 biến PressButton để lưu trạng thái nút nhấn. Ban đầu là 0.

int PressButton= 0;

Trong setup(), chúng ta sẽ khởi tạo nút nhấn dưới dạng INPUT, và đèn LED dưới dạng OUTPUT. Bạn sử dụng hàm pinMode() và truyền vào pin mà bạn đang muốn cấu hình và chế độ: INPUT_PULLUP hoặc là OUTPUT. INPUT_PULLUP là mode sử dụng nội trở kéo lên của ESP32. Nghĩa là chân Button là Input và ban đầu sẽ ở trạng thái HIGH.

pinMode(Button, INPUT_PULLUP);
pinMode(Led, OUTPUT);

Trong void loop() là nơi bạn đọc trạng thái nút nhấn và đặt đèn LED theo ý muốn của bạn. Tiếp theo, khi nút nhấn thay đổi trạng thái chúng ta sẽ đọc nó và lưu nó vào PressButton. Sử dụng hàm digitalRead() để đọc trạng thái nút nhấn nó sẽ trả về 2 giá trị LOW hoặc HIGH (hay 0 và 1). Ta có thể mở Serial Monitor ở góc phải bên trên để theo dõi sự thay đổi của biến PressButton khi nhấn nút.

PressButton = digitalRead(buttonPin);
Serial.println(PressButton);

Kiểm tra xem trạng thái nút nhấn, so sánh biến PressButton với HIGH. Nếu có, đèn LED sẽ sáng bằng cách sử dụng digitalWirte() để chuyển trạng thái LED.

if (PressButton == LOW) {
digitalWrite(Led, HIGH);
}

Nếu trạng thái nút không ở mức LOW, tắt LED.

else {
digitalWrite(Led, LOW);
}

Cuối cùng nối mạch như hình vẽ và nạp code cho ESP32, chân Boot chính là chân GPIO 0 và LED xanh trên board là led chúng ta cần điều khiển.

Trao đổi học tập

Comments