ESP32 Digital Input và Digital Output (Arduino IDE)

Trong bài hướng dẫn này, bạn sẽ học cách đọc chân digital input bằng nút nhấn và điều khiển chân digital output là một LED, sử dụng ESP32 với Arduino IDE.

Yêu cầu

Chúng ta sẽ lập trình ESP32 bằng Arduino IDE. Vì vậy, hãy đảm bảo rằng bạn đã cài ESP32 boards add-on trước khi tiếp tục:

Điều khiển Digital Output của ESP32

Trước tiên, bạn cần set GPIO mà bạn muốn điều khiển làm OUTPUT. Sử dụng hàm pinMode() như sau:

pinMode(GPIO, OUTPUT);

Để điều khiển chân digital output chỉ cần sử dụng hàm digitalWrite(), chấp nhận những đối số (argument) là GPIO (số int) mà bạn đang tham chiếu, và trạng thái HIGH hoặc LOW.

digitalWrite(GPIO, STATE);

Tất cả chân GPIO có thể được dùng làm output, ngoại trừ những chân GPIO từ 6 đến 11 (được kết nối với bộ nhớ flash SPI tích hợp) và GPIO 34, 35, 36 và 39 (chỉ làm GPIO input);

Tìm hiểu thêm về các chân ESP32 GPIO: Tham khảo Chân Ra của ESP32

Đọc Chân Digital Input của ESP32

Đầu tiên, set GPIO mà bạn muốn đọc thành INPUT, sử dụng hàm pinMode() như sau:

pinMode(GPIO, INPUT);

Để đọc một chân digital input, như là một nút nhấn, bạn sử dụng hàm digitalRead(), chấp nhận những đối số (argument) là GPIO (số int) mà bạn đang tham chiếu.

digitalRead(GPIO);

Tất cả GPIO của ESP32 đều có thể được dùng làm input, ngoại trừ GPIO 6 đến 11 (được kết nối với bộ nhớ flash SPI tích hợp).

Tìm hiểu thêm về các chân ESP32 GPIO: Tham khảo Chân Ra của ESP32

Project Example

Để chỉ bạn cách sử dụng những chân digital input và digital output, chúng ta sẽ xây dựng một dự án ví dụ với một nút bấm (pushbutton) và một LED. Chúng ta sẽ đọc trạng thái của pushbutton và bật tắt LED tương ứng với mô tả của hình sau.

Schematic Diagram

Trước khi tiếp tục, bạn cần phải lắp ráp mạch điện với đèn LED và một pushbutton. Chúng ta sẽ kết nối đèn LED với GPIO 5 và nút pushbutton với GPIO 4.

Linh Kiện Cần Thiết

Dưới đây là danh sách các linh kiện cần thiết để xây dựng mạch điện:

Code

Copy đoạn code dưới đây bỏ vô Arduino IDE của bạn.

// Complete Instructions: https://RandomNerdTutorials.com/esp32-digital-inputs-outputs-arduino/

// 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);
  }
}

Đoạn Code Hoạt Động Như Thế Nào

Trong hai dòng sau, bạn tạo giá trị để gán cho các chân:

const int buttonPin = 4;
const int ledPin = 5;

Nút nhấn (button) được kết nối với GPIO 4 và đèn LED được kết nối với GPIO 5. Khi sử dụng Arduino IDE với ESP32, 4 tương ứng với GPIO 4 và 5 tương ứng với GPIO 5.

Tiếp theo, bạn tạo một biến để giữ trạng thái nút nhấn. Theo mặc định là 0 (không nhấn).

int buttonState = 0;

Trong hàm setup(), bạn khởi tạo button dưới dạng INPUT và LED dưới dạng OUTPUT. Bằng cách sử dụng hàm pinMode() với tham số là chân mà bạn đang tham chiếu tới, và mode: INPUT hoặc OUTPUT.

pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);

Trong vòng lặp loop(), nơi bạn đọc trạng thái của button và điều khiển LED theo phù hợp.

Ở dòng tiếp theo, bạn đọc trạng thái button và lưu nó vào biến buttonState. Như chúng ta đã thấy, bạn sử dụng hàm digitalRead().

buttonState = digitalRead(buttonPin);

Câu lệnh if sau đây, kiểm tra xem trạng thái button là HIGH hay không. Nếu đúng như vậy, thì nó sẽ bật đèn LED bằng cách sử dụng hàm digitalWrite(), với tham số là ledPin và trạng thái HIGH.

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

Nếu trạng thái button không phải HIGH, bạn cho LED tắt. Chỉ cần đặt LOW ở tham số thứ hai trong hàm digitalWrite().

else {
  digitalWrite(ledPin, LOW);
}

Upload Code

Trước khi click nút upload, đi tới Tools > Board, và chọn loại board bạn đang sử dụng. Trong trường hợp của tôi thì là DOIT ESP32 DEVKIT V1 board.

Đi tới Tools > Port và chọn COM port mà ESP32 được kết nối tới. Kế đó, bấm nút upload và chờ thông báo “Done uploading”.

Nếu bạn thấy nhiều chấm (…__…__) trên cửa sổ debugging và thông báo “Failed to connect to ESP32: Timed out waiting for packet header”, điều đó có nghĩa là bạn cần nhấn nút BOOT trên board ESP32 sau khi những chấm kia xuất hiện.

Demonstration

Sau khi upload code, kiểm tra mạch điện của bạn. Đèn LED của bạn phải nên sáng mỗi khi bạn nhấn nút:

Và tắt khi bạn bỏ tay ra:

Tóm tắt

Với hướng dẫn này, bạn đã học cách đọc những chân digital input và điều khiển những chân digital output của ESP32, sử dụng Arduino IDE.

Nếu bạn muốn tìm hiểu cách đọc analog input hoặc tín hiệu PWM output, hãy đọc các bài hướng dẫn sau:

(Nguồn: randomnerdtutorials.com)

Icons made by Freepik from www.flaticon.com