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.