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ơ đồ
📖 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ểm | Arduino Uno | ESP32 DevKit |
|---|---|---|
| Điện áp làm việc của chân | 5V | 3.3V (không cấp 5V vào chân GPIO!) |
| Tốc độ | 16 MHz | 240 MHz, 2 nhân |
| WiFi / Bluetooth | Không | Có sẵn |
| ADC (đọc analog) | 10 bit (0–1023) | 12 bit (0–4095) |
| Giá tham khảo | ~120.000đ | ~90.000–130.000đ |
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
- 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).
- Chạy file cài đặt, bấm I Agree → Next → Install. Nếu Windows hỏi cài driver, chọn Install.
- 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
- 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
- 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…
- 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).
- Vào Tools → Board → esp32 → ESP32 Dev Module.
4. Cài driver và chọn cổng COM
- Cắm ESP32 vào máy tính bằng cáp USB. Đèn đỏ (nguồn) trên board phải sáng.
- 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.
- 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).
5. Nạp chương trình đầu tiên: Blink
- Tạo sketch mới: File → New Sketch. Xoá hết nội dung, dán Code 1.1 bên dưới.
- 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.
- 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ả. - Thấy
Hard resetting via RTS pin...là nạp xong. Đèn xanh trên board nhấp nháy mỗi giây. - 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”.
6. Xử lý lỗi thường gặp
| Thông báo lỗi | Nguyên nhân | Cách sửa |
|---|---|---|
Failed to connect to ESP32: No serial data received | Board không vào chế độ nạp | Giữ nút BOOT khi thấy Connecting... |
Port not selected / không có cổng | Cá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 độ baud | Chọn 115200 cho khớp Serial.begin(115200) |
A fatal error occurred: ... port is busy | Cổ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 →.
// 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.
- 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ử).
- Ở tab sketch.ino: xoá hết, dán code mẫu ở phần trên.
- Ở 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.
- Bấm nút ▶ màu xanh để chạy. Serial Monitor hiện ở phía dưới khung mạch.
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.
- Vào tinkercad.com → Circuits, đăng nhập (miễn phí, có thể dùng tài khoản Google), bấm + Create → Circuit.
- Ở 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 - 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.
- 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.
- Bấm Start Simulation. Mở Serial Monitor ở đáy khung Code để xem dữ liệu in ra.
// 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);
}▶ 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:
✍️ Bài tập vận dụng
- Đổi thời gian để LED sáng 0,2 giây và tắt 0,8 giây.
- 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).
- 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.