Trải nghiệm học Lập trình ESP32 miễn phí

💡 Trong bài học này

🎯 Mục tiêu

Sau bài học này, bạn sẽ:

  • Hiểu khái niệm chân GPIO trên ESP32.
  • Biết cách kết nối LED với ESP32.
  • Biết sử dụng pinMode() để cấu hình chân GPIO.
  • Biết sử dụng digitalWrite() để điều khiển LED.
  • Biết sử dụng delay() để tạo khoảng dừng.
  • Làm quen với Function.
  • Viết được chương trình làm LED nhấp nháy.

📖 Nội dung bài học

1. GPIO là gì?

GPIO (General Purpose Input/Output) là các chân vào/ra đa năng trên ESP32, dùng để giao tiếp với các thiết bị bên ngoài như LED, nút nhấn, cảm biến, relay, màn hình…

GPIO ESP32 DEVKIT V1

GPIO có hai chế độ hoạt động chính:

  • Output: Xuất tín hiệu để điều khiển thiết bị.
  • Input: Đọc tín hiệu từ thiết bị bên ngoài.

2. GPIO Output là gì?

GPIO ở chế độ Output dùng để xuất tín hiệu điều khiển các thiết bị bên ngoài.

Một số thiết bị thường sử dụng GPIO Output:

  • LED
  • Relay
  • Buzzer
  • Servo
  • Động cơ (thông qua mạch điều khiển)

Trong bài học này, chúng ta sẽ sử dụng GPIO Output để điều khiển một đèn LED.


3. Kết nối LED với ESP32

LED có hai chân:

  • Anode (+): nối với GPIO thông qua điện trở 220Ω.
  • Cathode (-): nối với chân GND.

Ví dụ sử dụng GPIO2:

GPIO2 ──[220Ω]──[+LED-]── GND

Lưu ý: Một số board ESP32 đã tích hợp sẵn LED trên GPIO2, bạn có thể sử dụng trực tiếp mà không cần đấu nối thêm.


4. Hàm pinMode()

Hàm pinMode() dùng để cấu hình chế độ hoạt động cho chân GPIO.

Cú pháp

pinMode(pin, mode);

Tham số

  • pin: Chân GPIO cần cấu hình.
  • mode: Chế độ hoạt động (INPUT, OUTPUT hoặc INPUT_PULLUP).

Ví dụ

pinMode(2, OUTPUT);

Cấu hình chân GPIO2 ở chế độ xuất tín hiệu.


5. Hàm digitalWrite()

Hàm digitalWrite() dùng để xuất mức điện áp HIGH hoặc LOW ra chân GPIO.

Cú pháp

digitalWrite(pin, value);

Tham số

  • pin: Chân GPIO cần điều khiển.
  • value: Mức tín hiệu (HIGH hoặc LOW).

Mức logic HIGH và LOW

ESP32 sử dụng điện áp 3.3V, vì vậy khi điều khiển chân GPIO sẽ có hai mức logic:

Mức logicĐiện ápÝ nghĩa
HIGHKhoảng 3.3VLogic 1
LOWKhoảng 0VLogic 0

Ví dụ:

digitalWrite(2, HIGH);

GPIO xuất ra mức điện áp khoảng 3.3V, LED sẽ sáng.

digitalWrite(2, LOW);

GPIO xuất ra mức điện áp khoảng 0V, LED sẽ tắt.

Lưu ý: ESP32 hoạt động với mức logic 3.3V, không phải 5V như một số dòng Arduino Uno.


6. Hàm delay()

Hàm delay() dùng để tạo khoảng dừng trong chương trình.

Cú pháp

delay(time);

Tham số

  • time: Thời gian dừng (đơn vị: mili giây – ms).

Ví dụ

delay(1000);

Chương trình sẽ tạm dừng 1000 ms (1 giây) trước khi thực hiện câu lệnh tiếp theo.


7. Function (Hàm)

Function là một nhóm các câu lệnh được đặt tên để có thể gọi lại nhiều lần.

Việc sử dụng Function giúp chương trình ngắn gọn, dễ đọc và dễ quản lý.

Cú pháp

void tenHam()
{
    // Các câu lệnh
}

Ví dụ

void blinkLED()
{
    digitalWrite(LED_PIN, HIGH);
    delay(1000);

    digitalWrite(LED_PIN, LOW);
    delay(1000);
}

Khi cần sử dụng chỉ cần gọi:

blinkLED();

🔀Sơ đồ giải thuật

💻 Source Code

const int LED_PIN = 2;

// Hàm điều khiển LED nhấp nháy
void blinkLED()
{
    digitalWrite(LED_PIN, HIGH);
    delay(1000);

    digitalWrite(LED_PIN, LOW);
    delay(1000);
}

void setup()
{
    pinMode(LED_PIN, OUTPUT);
}

void loop()
{
    blinkLED();
}
C++

🔍 Giải thích chương trình

const int LED_PIN = 2;

Khai báo chân GPIO điều khiển LED.

pinMode(LED_PIN, OUTPUT);

Cấu hình GPIO2 là chân xuất tín hiệu.

digitalWrite(LED_PIN, HIGH);

Bật LED.

delay(1000);

Giữ LED sáng trong 1 giây.

digitalWrite(LED_PIN, LOW);

Tắt LED.

Sau đó hàm blinkLED() được gọi liên tục trong loop(), vì vậy LED sẽ nhấp nháy không ngừng.


✅ Kết quả mong đợi

Sau khi nạp chương trình thành công:

  • LED sáng trong 1 giây.
  • LED tắt trong 1 giây.
  • Quá trình này lặp lại liên tục.

💡 Lưu ý

  • Sử dụng điện trở 220Ω hoặc 330Ω để bảo vệ LED.
  • ESP32 hoạt động ở mức điện áp 3.3V.
  • Luôn gọi pinMode() trước khi sử dụng digitalWrite().
  • Nên khai báo số chân GPIO bằng hằng số:
const int LED_PIN = 2;
  • Sử dụng Function giúp chương trình dễ đọc và dễ mở rộng.

⚠ Lỗi thường gặp

  • Cắm ngược cực LED.
  • Quên nối chân GND.
  • Quên gọi pinMode().
  • Khai báo sai chân GPIO.
  • Không sử dụng điện trở bảo vệ LED.

📝 Bài tập

Bài 1: Thay đổi thời gian nhấp nháy của LED thành 500 ms.

Bài 2: Cho LED sáng 2 giây, tắt 1 giây.

Bài 3: Tạo hai Function:

void turnOnLED()
{
    digitalWrite(LED_PIN, HIGH);
}

void turnOffLED()
{
    digitalWrite(LED_PIN, LOW);
}

Sau đó gọi hai Function này trong loop() để điều khiển LED.

Bài 4: Thử thay đổi chân GPIO điều khiển LED (nếu board hỗ trợ) và quan sát kết quả.


📥 Tài liệu tải về

  • Slide bài giảng.