Trong bài hướng dẫn bắt đầu này, bạn sẽ học cách đọc tín hiệu đầu vào số như nút nhấn (button)điều khiển đầu ra số như đèn LED bằng ESP32 sử dụng Arduino IDE.



1) ESP32 Control Digital Outputs

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

Để điều khiển một đầu ra số, bạn chỉ cần dùng hàm digitalWrite(), hàm này nhận hai tham số:

  • GPIO (số chân),
  • Trạng thái: HIGH hoặc LOW.

Ví dụ: digitalWrite(GPIO, STATE);

Tất cả các GPIO đều có thể dùng làm output, ngoại trừ:

  • GPIO 6 đến GPIO 11 (kết nối với bộ nhớ SPI flash bên trong)
  • GPIO 34, 35, 36 và 39 (chỉ hỗ trợ input)


2) ESP32 Read Digital Inputs

Trước tiên, hãy thiết lập GPIO bạn muốn đọc thành INPUT, sử dụng hàm pinMode() như sau: pinMode(GPIO, INPUT);

Để đọc một đầu vào số, như nút nhấn, bạn sử dụng hàm digitalRead(), hàm này nhận tham số là số GPIO cần đọc: digitalRead(GPIO);

Tất cả các GPIO của ESP32 đều có thể sử dụng làm input, ngoại trừ:

  • GPIO 6 đến GPIO 11 (kết nối với bộ nhớ SPI flash tích hợp)


3) Project ví dụ

Để hướng dẫn bạn cách sử dụng digital inputdigital output, chúng ta sẽ làm một ví dụ đơn giản với nút nhấn (pushbutton)đèn LED.

Chúng ta sẽ đọc trạng thái của nút nhấnbật/tắt đèn LED tương ứng, như minh hoạ trong hình dưới đây.

Sơ đồ kết nối: Trước khi tiếp tục, bạn cần lắp mạch với một đèn LED và một nút nhấn (pushbutton). Trong ví dụ này, chúng ta sẽ kết nối LED với GPIO 25nút nhấn với GPIO 4.

Linh kiện cần chuẩn bị

  • ESP32 DOIT DEVKIT 
  • LED 5 mm
  • Điện trở 220Ω (cho LED)
  • Nút nhấn (Pushbutton)
  • Điện trở 10kΩ (làm pull-down hoặc pull-up cho nút nhấn)
  • Breadboard
  • Dây nối (jumper wires)


Code tham khảo:

// set pin numbers

const int buttonPin = 4; // the number of the pushbutton pin

const int ledPin = 25;  // 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 code: Chương trình liên tục đọc trạng thái của nút nhấn và bật/tắt LED tương ứng. Đồng thời, trạng thái nút nhấn được in ra Serial Monitor để dễ kiểm tra


1️⃣ Khai báo chân và biến

const int buttonPin = 4;

const int ledPin = 25;

int buttonState = 0;

  • Xác định các chân GPIO: buttonPin dùng để đọc trạng thái nút nhấn, ledPin dùng để xuất tín hiệu cho LED.
  • Biến buttonState dùng để lưu trạng thái hiện tại của nút nhấn.

2️⃣ Thiết lập chân trong setup()

pinMode(buttonPin, INPUT);

pinMode(ledPin, OUTPUT);

Serial.begin(115200);

  • Cấu hình ESP32:
  • buttonPininput để đọc trạng thái nút nhấn.
  • ledPinoutput để điều khiển LED.
  • Serial.begin() mở cổng Serial để in trạng thái nút nhấn ra màn hình (monitor)

3️⃣ Đọc trạng thái nút nhấn trong loop()

buttonState = digitalRead(buttonPin);

Serial.println(buttonState);

  • Đọc giá trị điện áp trên chân nút nhấn (HIGH hoặc LOW) và in ra Serial để theo dõi

4️⃣ Kiểm soát LED dựa trên trạng thái nút nhấn

if (buttonState == HIGH) {

  digitalWrite(ledPin, HIGH);

} else {

  digitalWrite(ledPin, LOW);

}

  • Xử lý logic LED:
  • Nếu nút nhấn được nhấn (HIGH), LED bật.
  • Nếu nút nhấn không nhấn (LOW), LED tắt
  • Upload code và sẽ thấy led sáng khi ấn nút, không sáng khi không ấn nút