Phần 1. Làm quen ESP32 · Bài 1/13 · ⏱ 45 phút

Làm quen ESP32 và cài đặt môi trường lập trình

Biết ESP32 là gì, cài Arduino IDE 2, thêm gói ESP32, cài driver USB và nạp chương trình đầu tiên làm nhấp nháy đèn LED có sẵn trên board.

🎯 Mục tiêu bài học

Học xong bài này, bạn có thể:

  • Nêu được ESP32 khác Arduino Uno ở điểm nào (WiFi, Bluetooth, 2 nhân, 3.3V).
  • Cài đặt xong Arduino IDE 2 và gói board ESP32 của Espressif.
  • Nạp thành công chương trình Blink và mở được Serial Monitor.

🧰 Chuẩn bị linh kiện

  • 1 board ESP32 DevKit V1 (ESP32-WROOM-32, 30 hoặc 38 chân)
  • 1 cáp micro-USB (hoặc USB-C) có truyền dữ liệu, không phải cáp chỉ sạc
  • Máy tính Windows/macOS/Linux

🔌 Hình và sơ đồ

Sơ đồ chân ESP32 DevKit V1 (30 chân) – nhìn từ trên xuốngESP32-WROOM-32cổng USBENVP/GPIO36VN/GPIO39GPIO34GPIO35GPIO32GPIO33GPIO25GPIO26GPIO27GPIO14GPIO12GNDGPIO13VIN 5VGPIO23GPIO22 SCLTX0 GPIO1RX0 GPIO3GPIO21 SDAGNDGPIO19GPIO18GPIO5GPIO17GPIO16GPIO4GPIO2 (LED)GPIO153V3GPIO vào/raChỉ đọc vào (ADC)I2CNguồnGNDHệ thống/Serial
Hình 1.1. Sơ đồ chân ESP32 DevKit V1
Từ code đến boardViết codeArduino IDEBiên dịch(Verify ✓)Nạp(Upload →)ESP32 chạychương trìnhXem kết quảSerial Monitor
Hình 1.2. Quy trình làm việc với ESP32

📖 Nội dung và các bước thực hành

1. ESP32 là gì?

ESP32 là vi điều khiển của hãng Espressif (Trung Quốc) có sẵn WiFi và Bluetooth, 2 nhân xử lý tốc độ tới 240 MHz, bộ nhớ lớn hơn Arduino Uno nhiều lần. Vì vậy ESP32 rất hợp với các dự án IoT (Internet vạn vật): đọc cảm biến rồi gửi dữ liệu lên điện thoại, lên web.

Đặc điểmArduino UnoESP32 DevKit
Điện áp làm việc của chân5V3.3V (không cấp 5V vào chân GPIO!)
Tốc độ16 MHz240 MHz, 2 nhân
WiFi / BluetoothKhôngCó sẵn
ADC (đọc analog)10 bit (0–1023)12 bit (0–4095)
Giá tham khảo~120.000đ~90.000–130.000đ
Ghi nhớ an toàn: chân GPIO của ESP32 chỉ chịu 3.3V. Mỗi chân chỉ nên cấp tối đa khoảng 20 mA, vì vậy luôn mắc điện trở khi nối LED.

Trên board có 2 nút: EN (khởi động lại) và BOOT (giữ khi nạp nếu máy báo lỗi kết nối). Đèn LED xanh dương trên board nối với GPIO2.

2. Cài Arduino IDE 2

  1. Vào trang arduino.cc/en/software, tải Arduino IDE 2.x đúng hệ điều hành (Windows: chọn bản Windows Win 10 and newer, 64 bits).
  2. Chạy file cài đặt, bấm I Agree → Next → Install. Nếu Windows hỏi cài driver, chọn Install.
  3. Mở Arduino IDE. Vào File → Preferences (macOS: Arduino IDE → Settings). Ở ô Language có thể chọn Tiếng Việt nếu muốn.

3. Thêm gói board ESP32

  1. Trong File → Preferences, tìm ô Additional boards manager URLs, dán dòng sau rồi bấm OK:
    https://espressif.github.io/arduino-esp32/package_esp32_index.json
  2. Bấm biểu tượng Boards Manager (hình bảng mạch ở thanh bên trái) hoặc Tools → Board → Boards Manager…
  3. Gõ esp32 vào ô tìm kiếm, chọn gói esp32 by Espressif Systems (phiên bản 3.x), bấm INSTALL. Chờ tải xong (khoảng 200–300 MB).
  4. Vào Tools → Board → esp32 → ESP32 Dev Module.

4. Cài driver và chọn cổng COM

  1. Cắm ESP32 vào máy tính bằng cáp USB. Đèn đỏ (nguồn) trên board phải sáng.
  2. Nhìn con chip nhỏ cạnh cổng USB: ghi CP2102 thì cài driver Silicon Labs CP210x; ghi CH340/CH9102 thì cài driver WCH CH340.
  3. Rút cáp ra cắm lại. Vào Tools → Port, chọn cổng mới xuất hiện (Windows: COM3, COM5…; macOS: /dev/cu.usbserial-… hoặc /dev/cu.SLAB_USBtoUART).
Không thấy cổng nào? 90% là do cáp chỉ sạc. Hãy thử cáp khác (cáp kèm điện thoại thường truyền được dữ liệu).

5. Nạp chương trình đầu tiên: Blink

  1. Tạo sketch mới: File → New Sketch. Xoá hết nội dung, dán Code 1.1 bên dưới.
  2. Bấm ✓ Verify để biên dịch. Lần đầu mất 1–2 phút. Dòng Done compiling là thành công.
  3. Bấm → Upload. Khi cửa sổ dưới hiện Connecting...., nếu chờ lâu thì nhấn giữ nút BOOT trên board khoảng 2 giây rồi thả.
  4. Thấy Hard resetting via RTS pin... là nạp xong. Đèn xanh trên board nhấp nháy mỗi giây.
  5. Mở Tools → Serial Monitor, chọn tốc độ 115200 baud ở góc phải. Bạn sẽ thấy dòng chữ “LED BAT / LED TAT”.
Sản phẩm của bài: đèn LED trên board nhấp nháy và Serial Monitor in trạng thái đèn.

6. Xử lý lỗi thường gặp

Thông báo lỗiNguyên nhânCách sửa
Failed to connect to ESP32: No serial data receivedBoard không vào chế độ nạpGiữ nút BOOT khi thấy Connecting...
Port not selected / không có cổngCáp chỉ sạc hoặc thiếu driverĐổi cáp, cài driver CP210x/CH340
Serial Monitor ra kí tự lạSai tốc độ baudChọn 115200 cho khớp Serial.begin(115200)
A fatal error occurred: ... port is busyCổng đang bị chương trình khác dùngĐóng Serial Monitor/phần mềm khác rồi nạp lại

💻 Code mẫu

Bấm Sao chép, dán vào Arduino IDE (xoá hết code cũ trước), rồi bấm Upload →.

Code 1.1 – Blink: nhấp nháy LED trên board (GPIO2)
// Bài 1 - Chương trình đầu tiên: nhấp nháy LED có sẵn trên board
const int LED_PIN = 2;          // LED xanh trên ESP32 DevKit nối với GPIO2

void setup() {
  Serial.begin(115200);         // mở cổng Serial tốc độ 115200
  pinMode(LED_PIN, OUTPUT);     // khai báo chân LED là ngõ ra
  Serial.println("Xin chao ESP32!");
}

void loop() {
  digitalWrite(LED_PIN, HIGH);  // bật LED (3.3V)
  Serial.println("LED BAT");
  delay(1000);                  // chờ 1000 ms = 1 giây
  digitalWrite(LED_PIN, LOW);   // tắt LED (0V)
  Serial.println("LED TAT");
  delay(1000);
}

🖥️ Mô phỏng trên Wokwi (không cần linh kiện thật)

Mô phỏng chỉ có board ESP32: LED trên board (GPIO2) sẽ nhấp nháy, Serial Monitor hiện ở dưới.

  1. Bấm nút Mở Wokwi ESP32 bên dưới (mở tab mới, không cần đăng nhập để chạy thử).
  2. Ở tab sketch.ino: xoá hết, dán code mẫu ở phần trên.
  3. Ở tab diagram.json: xoá hết, dán sơ đồ mạch (nút Sao chép diagram.json). Mạch tự hiện ra với đầy đủ linh kiện và dây nối.
  4. Bấm nút ▶ màu xanh để chạy. Serial Monitor hiện ở phía dưới khung mạch.

🖥️ Mở Wokwi ESP32 ↗

Xem nội dung diagram.json
{
  "version": 1,
  "author": "STEM AI - IoT",
  "editor": "wokwi",
  "parts": [
    {
      "type": "board-esp32-devkit-c-v4",
      "id": "esp",
      "top": 0,
      "left": 0,
      "attrs": {}
    }
  ],
  "connections": [
    [
      "esp:TX",
      "$serialMonitor:RX",
      "",
      []
    ],
    [
      "esp:RX",
      "$serialMonitor:TX",
      "",
      []
    ]
  ],
  "dependencies": {}
}

🟧 Mô phỏng trên Tinkercad (Arduino Uno)

Tinkercad Circuits của Autodesk chưa có ESP32, chỉ có board Arduino. Phần này là phiên bản Arduino Uno của cùng mạch và cùng kiến thức. Mã nguồn khác bản ESP32 ở số chân, mức điện áp 5V và ADC 10 bit.

Arduino Uno có LED sẵn ở chân 13 (kí hiệu L), tương tự LED GPIO2 của ESP32. Không cần nối dây.

  1. Vào tinkercad.com → Circuits, đăng nhập (miễn phí, có thể dùng tài khoản Google), bấm + Create → Circuit.
  2. Ở khung linh kiện bên phải, chọn All rồi gõ tên vào ô tìm kiếm để kéo từng linh kiện ra màn hình:
    Arduino Uno R3
  3. Nối dây theo bảng bên dưới: bấm vào một chân, kéo tới chân kia. Bấm vào dây để đổi màu (đỏ = 5V, đen = GND) cho dễ kiểm tra.
  4. Bấm nút Code, đổi chế độ Blocks thành Text (chọn Continue khi được hỏi), xoá hết code mẫu, dán code Tinkercad ở dưới.
  5. Bấm Start Simulation. Mở Serial Monitor ở đáy khung Code để xem dữ liệu in ra.
Code Tinkercad – Arduino Uno (Bài 1)
// Bài 1 - Tinkercad (Arduino Uno): nhấp nháy LED có sẵn chân 13
const int LED_PIN = 13;

void setup() {
  Serial.begin(9600);          // Tinkercad dùng 9600 baud
  pinMode(LED_PIN, OUTPUT);
  Serial.println("Xin chao Arduino!");
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  Serial.println("LED BAT");
  delay(1000);
  digitalWrite(LED_PIN, LOW);
  Serial.println("LED TAT");
  delay(1000);
}

🟧 Mở Tinkercad Circuits ↗

▶ Video hướng dẫn

Giáo viên sẽ cập nhật video cho bài này. Trong lúc chờ, bạn có thể xem các video công khai về cùng chủ đề trên YouTube:

🔎 Tìm thêm video trên YouTube ↗

✍️ Bài tập vận dụng

  1. Đổi thời gian để LED sáng 0,2 giây và tắt 0,8 giây.
  2. Cho LED nháy nhanh 3 lần rồi nghỉ 2 giây (gợi ý: dùng 3 cặp bật/tắt).
  3. In ra Serial số lần đã nhấp nháy: “Lan thu 1”, “Lan thu 2”…

Gợi ý: lưu mỗi bài tập thành một sketch riêng (File → Save As…), chụp ảnh/quay video sản phẩm gửi vào nhóm Zalo để được nhận xét.

✅ Trắc nghiệm kiểm tra nhanh

Chọn đáp án cho từng câu rồi bấm Nộp bài.

Câu 1. Điện áp làm việc của chân GPIO trên ESP32 là bao nhiêu?
Câu 2. Đèn LED có sẵn trên board ESP32 DevKit V1 thường nối với chân nào?
Câu 3. Khi nạp mà báo “Failed to connect… No serial data received”, bạn nên làm gì?
Câu 4. Hàm nào chỉ chạy MỘT lần khi ESP32 khởi động?
Câu 5. Serial Monitor hiển thị kí tự lạ, nguyên nhân hay gặp nhất?

Đăng ký để học trọn 13 bài →
💬Zalo