TechPartner

← Quay lại Blog
Khóa lập trình Arduino ESP32 cơ bản — IoT từ Blink đến SmartNode · Phần 2 / 8

Lập trình ESP32 (2/8): GPIO digital, nút bấm & chống dội (debounce)

GPIO ESP32: digitalRead/Write, nút bấm pull-up nội, toggle LED, debounce phần mềm — nền tảng đọc cảm biến digital.

· 2 min read

Khóa lập trình Arduino ESP32 cơ bản — IoT từ Blink đến SmartNode · Phần 2/8
  1. 1Cài đặt & Blink
  2. 2GPIO digital
  3. 3PWM & servo
  4. 4ADC & cảm biến
  5. 5WiFi Station
  6. 6HTTP client
  7. 7Web server
  8. 8Capstone SmartNode
Mục lục
  1. Mục tiêu
  2. Sơ đồ nút bấm
  3. Strapping pins
  4. Bài tập

Phần 2/8 (~30 phút) · Trước: Phần 1 · Sau: Phần 3 — PWM & servo

Mục tiêu

  • Cấu hình INPUT / OUTPUT
  • Nút bấm với INPUT_PULLUP
  • Toggle LED theo cạnh nhấn
  • Debounce cơ bản

Sơ đồ nút bấm

  • Một chân nút → GPIO 18
  • Chân còn lại → GND
  • LED vẫn ở GPIO 2
const int LED_PIN = 2;
const int BTN_PIN = 18;
bool ledOn = false;
unsigned long lastDebounce = 0;
const unsigned long DEBOUNCE_MS = 50;

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(BTN_PIN, INPUT_PULLUP);
  Serial.begin(115200);
}

void loop() {
  int reading = digitalRead(BTN_PIN);
  if (reading == LOW) {
    if (millis() - lastDebounce > DEBOUNCE_MS) {
      lastDebounce = millis();
      ledOn = !ledOn;
      digitalWrite(LED_PIN, ledOn ? HIGH : LOW);
      Serial.println(ledOn ? "LED ON" : "LED OFF");
    }
  }
}

Cách trên đơn giản; production nên dùng state machine debounce (HIGH → LOW ổn định 50 ms mới tính một lần nhấn).

Strapping pins

Tránh dùng làm nút/LED tùy ý: GPIO 0, 2, 12, 15 (ảnh hưởng boot). GPIO 18, 19, 21, 22, 23 an toàn cho demo.

Bài tập

  1. Nhấn giữ 2 giây → đổi tốc độ Blink (chuẩn bị cho phần 3).
  2. Thêm nút thứ hai trên GPIO 19 — reset LED về OFF.

Điều hướng seri: ← Phần 1 · Phần 3 →

Câu hỏi thường gặp

INPUT_PULLUP nghĩa là gì?

Kích hoạt điện trở kéo lên nội bộ — nút nối GPIO với GND: thả = HIGH, nhấn = LOW. Không cần điện trở ngoài 10k nếu dùng pull-up nội.

Startup của bạn cần tech partner?

Trao đổi miễn phí về MVP, timeline và mô hình chia lợi nhuận phù hợp.