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) và đ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 input và digital output, chúng ta sẽ làm một ví dụ đơn giản với nút nhấn (pushbutton) và đèn LED.
Chúng ta sẽ đọc trạng thái của nút nhấn và bậ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 25 và nú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:
- buttonPin là input để đọc trạng thái nút nhấn.
- ledPin là output để đ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




.png&w=3840&q=100)