← Quay lại danh sách ESP32 Cơ Bản
Khóa học:
1 Bài 1: Hướng Dẫn Khởi Đầu Với Board Phát Triển ESP32 Cho Người Mới Bắt Đầu 2 Bài 2: Điều Khiển Động Cơ Servo Bằng ESP32 Qua Web Server 🔒 3 Bài 3: Điều Khiển Động Cơ DC (Tốc Độ và Chiều Quay) Sử Dụng ESP32 và Mạch Cầu H L298N 🔒 4 Bài 4: Lấy Ngày và Giờ Thực Tế trên ESP32 qua Giao Thức NTP (NTP Client) 🔒 5 Bài 5: Hướng Dẫn Kết Nối Và Sử Dụng Màn Hình I2C LCD Với ESP32 và ESP8266 🔒 6 Bài 6: Cấu Hình ESP32 Thành Trạm Phát Wi-Fi (Access Point - AP) Và Tạo Web Server Điều Khiển Thiết Bị 🔒 7 Bài 7: Lập Trình ESP32 Phát Hiện Chuyển Động Với Cảm Biến PIR Sử Dụng Ngắt (Interrupts) Và Bộ Đếm Thời Gian (Timers) 🔒 8 Bài 8: Tra Cứu Sơ Đồ Chân ESP32 - Hướng Dẫn Chọn GPIO Phù Hợp Cho Dự Án 🔒 9 Bài 9: Điều Khiển Độ Sáng LED Bằng PWM Trên ESP32 (Analog Output) 🔒 10 Bài 10: Lập Trình Web Server Trên ESP32 Sử Dụng Hệ Thống Tập Tin SPIFFS 🔒 11 Bài 11: Lập Trình Điều Khiển ESP32 Đọc Cảm Biến Nhiệt Độ và Độ Ẩm DHT11 / DHT22 🔒 12 Bài 12: Lập Trình ESP32 Giao Tiếp Bluetooth Classic Với Điện Thoại Android 🔒 13 Bài 13: Giao Tiếp Vi Điều Khiển ESP32 Với Màn Hình Hiển Thị OLED SSD1306 Qua Chuẩn I2C 🔒 14 Bài 14: Đọc Giá Trị Analog (ADC) Trên ESP32 Bằng Arduino IDE 🔒 15 Bài 15: Lập Trình ESP32 Đọc Cảm Biến Nhiệt Độ DS18B20 (Đơn, Đa Cảm Biến và Web Server) 🔒 16 Bài 16: Giao Thức Giao Tiếp I2C Trên ESP32 - Cấu Hình Chân, Kết Nối Nhiều Thiết Bị Và Đa Bus 🔒 17 Bài 17: Lập Trình Điều Khiển Ngõ Vào/Ra Số (Digital Input/Output) Trên ESP32 🔒 18 Bài 18: Thiết Kế Web Server Điều Khiển Độ Sáng LED Bằng Thanh Trượt (Slider PWM) Trên ESP32 🔒 19 Bài 19: Lập Trình Điều Khiển Động Cơ Bước Stepper Motor 28BYJ-48 với ESP32 và Driver ULN2003 🔒 20 Bài 20: Lập Trình Điều Khiển ESP32 Với Module Thời Gian Thực DS1307 RTC 🔒 21 Bài 21: Hướng Dẫn Toàn Diện Xây Dựng Web Server Với ESP32 Cho Người Mới Bắt Đầu 🔒 22 Bài 22: Lập Trình Ngắt GPIO (Interrupts) trên ESP32 🔒

Bài 1: Hướng Dẫn Khởi Đầu Với Board Phát Triển ESP32 Cho Người Mới Bắt Đầu

🎯 Độ khó: Dễ ⏱️ Thời lượng: 45 phút 📘 Khóa: ESP32 Cơ Bản
💡 Tóm tắt bài học: Bài học này sẽ giúp bạn làm quen với ESP32 - dòng vi điều khiển mạnh mẽ tích hợp Wi-Fi và Bluetooth với chi phí cực kỳ tối ưu. Bạn sẽ hiểu rõ cấu trúc phần cứng, cách lựa chọn board phát triển, sơ đồ chân GPIO và cách lập trình chương trình đầu tiên trên Arduino IDE.
📖 1. Lý Thuyết & Kiến Thức Nền Tảng

🔹 1. Giới Thiệu Về ESP32

ESP32 là một dòng vi điều khiển Hệ thống trên một vi mạch (SoC - System on a Chip) giá rẻ, tiêu thụ năng lượng thấp do hãng Espressif Systems phát triển. Đây là phiên bản nâng cấp vượt trội của dòng chip ESP8266 huyền thoại, được thiết kế đặc biệt cho các ứng dụng Internet vạn vật (IoT) và các dự án nhà thông minh.

Tổng quan chip ESP32
📌 Tổng quan chip ESP32

▪️ Các tính năng nổi bật của ESP32:

▪Chi phí cực thấp: Chỉ với một khoản chi phí rất nhỏ, bạn đã có thể sở hữu một vi điều khiển mạnh mẽ tích hợp đầy đủ kết nối không dây.
▪Tiết kiệm năng lượng: ESP32 tiêu thụ rất ít điện năng và hỗ trợ nhiều chế độ ngủ sâu (Deep Sleep) để tối ưu hóa thời lượng pin cho các thiết bị di động.
▪Tích hợp Wi-Fi: Cho phép thiết bị kết nối vào mạng Wi-Fi cục bộ để truy cập Internet (Station Mode) hoặc tự phát Wi-Fi (Access Point Mode) để các thiết bị khác kết nối trực tiếp.
▪Tích hợp Bluetooth: Hỗ trợ cả Bluetooth Classic (cho truyền tải âm thanh, dữ liệu lớn) và Bluetooth Low Energy (BLE - cực kỳ tiết kiệm pin, phù hợp cho cảm biến IoT).
▪Bộ xử lý lõi kép (Dual-Core): Hầu hết các phiên bản ESP32 sở hữu bộ vi xử lý Xtensa 32-bit LX6 hai nhân (Core 0 và Core 1), cho phép xử lý đa nhiệm mượt mà thông qua hệ điều hành thời gian thực FreeRTOS.
▪Ngoại vi phong phú: Hỗ trợ cảm biến chạm điện dung (Capacitive Touch), bộ chuyển đổi ADC, DAC, các giao tiếp UART, SPI, I2C, PWM và nhiều hơn thế nữa.
▪Tương thích cao: Dễ dàng lập trình bằng ngôn ngữ C/C++ (phong cách Arduino) hoặc MicroPython.
Chip ESP-WROOM-32
📌 Chip ESP-WROOM-32
---

🔹 2. Thông Số Kỹ Thuật Chi Tiết

Nếu bạn muốn đi sâu vào khía cạnh kỹ thuật phần cứng, dưới đây là thông số chi tiết của module phổ biến ESP-WROOM-32:
▪Bộ vi xử lý: Tensilica Xtensa Dual-Core 32-bit LX6, hoạt động ở tần số 160 hoặc 240 MHz.
▪Bộ nhớ:
▪ROM: 448 KB (dành cho khởi động và các chức năng cốt lõi).
▪SRAM: 520 KB (dành cho dữ liệu và lệnh).
▪RTC Fast SRAM: 8 KB (lưu trữ dữ liệu khi CPU khởi động lại từ chế độ Deep Sleep).
▪RTC Slow SRAM: 8 KB (cho phép bộ đồng xử lý truy cập trong chế độ Deep Sleep).
▪Flash ngoài: Thường là 4MB hoặc 8MB tùy phiên bản board.
▪Kết nối không dây:
▪Wi-Fi: 802.11 b/g/n (tốc độ lên tới 150 Mbps).
▪Bluetooth: v4.2 BR/EDR và BLE.
---

🔹 3. So Sánh ESP32 và ESP8266

ESP32 là phiên bản kế thừa trực tiếp của ESP8266. Dưới đây là bảng so sánh trực quan giúp bạn thấy rõ sự nâng cấp vượt trội của ESP32:

So sánh ESP32 và ESP8266
📌 So sánh ESP32 và ESP8266
Nhìn chung, ESP32 cung cấp nhiều chân GPIO hơn, tốc độ xử lý nhanh hơn gấp đôi, bộ nhớ RAM lớn hơn và đặc biệt là tích hợp thêm Bluetooth - thứ mà ESP8266 hoàn toàn không có.

---

🔹 4. Các Board Phát Triển ESP32 Phổ Biến

Trên thị trường hiện nay có rất nhiều loại board phát triển ESP32 khác nhau được thiết kế để phục vụ cho các nhu cầu từ học tập đến sản xuất công nghiệp.

Các loại board ESP32 phổ biến
📌 Các loại board ESP32 phổ biến
Đối với người mới bắt đầu, board ESP32 DEVKIT DOIT là sự lựa chọn tối ưu nhất nhờ thiết kế chuẩn chân cắm breadboard, tích hợp sẵn mạch nạp USB-to-UART và các nút nhấn chức năng.

Board ESP32 DEVKIT DOIT
📌 Board ESP32 DEVKIT DOIT
---

🔹 5. Sơ Đồ Chân GPIO (Pinout Guide)

Để làm chủ được ESP32, việc hiểu rõ chức năng của từng chân GPIO là cực kỳ quan trọng. Dưới đây là sơ đồ chân của phiên bản ESP32 DEVKIT DOIT 30 chân:

Sơ đồ chân ESP32 DOIT 30 chân
📌 Sơ đồ chân ESP32 DOIT 30 chân

▪️ Phân loại các chân chức năng đặc biệt:

▪GPIOs đa chức năng: Hầu hết các chân đều có thể cấu hình làm Input hoặc Output.
Các chân GPIO đa chức năng
📌 Các chân GPIO đa chức năng
▪Cảm biến chạm (Touch Pins): ESP32 tích hợp sẵn 10 chân cảm biến chạm điện dung, có thể nhận biết điện tích từ ngón tay người mà không cần nút nhấn cơ học.
Chân cảm biến chạm Touch Pins
📌 Chân cảm biến chạm Touch Pins
▪Bộ chuyển đổi Analog-to-Digital (ADC): ESP32 có các kênh ADC 12-bit giúp đọc các giá trị điện áp tương tự từ cảm biến.
Chân ADC trên ESP32
📌 Chân ADC trên ESP32
▪Bộ chuyển đổi Digital-to-Analog (DAC): Cung cấp tín hiệu điện áp analog thực sự (8-bit), rất hữu ích cho việc phát âm thanh.
Chân DAC trên ESP32
📌 Chân DAC trên ESP32
▪Giao tiếp I2C: Chân SDA và SCL mặc định dùng để kết nối màn hình OLED, cảm biến nhiệt độ, v.v.
Chân giao tiếp I2C trên ESP32
📌 Chân giao tiếp I2C trên ESP32
▪Giao tiếp SPI: Dành cho các thiết bị ngoại vi tốc độ cao như thẻ nhớ SD, màn hình TFT màu.
Chân giao tiếp SPI trên ESP32
📌 Chân giao tiếp SPI trên ESP32
▪Chân PWM (Pulse Width Modulation): Tất cả các chân GPIO có cấu hình Output đều có thể dùng để phát xung PWM điều khiển động cơ hoặc độ sáng LED.
Chân PWM trên ESP32
📌 Chân PWM trên ESP32
▪Chân Nguồn (Power & GND): Chân VIN dùng để cấp nguồn ngoài (5V), chân 3V3 cấp nguồn ra 3.3V, và các chân GND làm chân đất chung.
Chân nguồn và GND
📌 Chân nguồn và GND
▪Nút nhấn EN và BOOT: Nút EN (Enable/Reset) dùng để khởi động lại chip. Nút BOOT dùng để đưa chip vào chế độ nạp chương trình (Flash Mode).
Nút nhấn EN và BOOT trên ESP32
📌 Nút nhấn EN và BOOT trên ESP32
🔌 2. Sơ Đồ Đấu Dây & Linh Kiện

🔹 Sơ Đồ Đấu Nối Linh Kiện

Để thực hành bài học đầu tiên, chúng ta sẽ kết nối một đèn LED đơn vào chân GPIO 23 của ESP32 thông qua một điện trở hạn dòng 220 Ohm.

▪️ Bảng đấu nối chi tiết:

Linh kiệnChân trên ESP32Ghi chú
Cực dương LED (Anode - Chân dài)GPIO 23Chân điều khiển tín hiệu
Điện trở 220 OhmNối tiếp giữa cực âm LED và GNDHạn dòng bảo vệ LED không bị cháy
Cực âm LED (Cathode - Chân ngắn)GNDChân đất chung

▪️ Hình ảnh minh họa sơ đồ cắm dây:

Sơ đồ cắm dây LED với ESP32
📌 Sơ đồ cắm dây LED với ESP32
Sơ đồ nguyên lý mạch LED
📌 Sơ đồ nguyên lý mạch LED
Thực tế kết nối trên Breadboard
📌 Thực tế kết nối trên Breadboard
💻 3. Chương Trình Mã Nguồn C++ Arduino / ESP32
⚡ Arduino C++ (ESP32)
// ========================================== 
// BÀI 1: CHƯƠNG TRÌNH ĐIỀU KHIỂN LED & SERIAL MONITOR
// ========================================== 

// Khai báo hằng số chân LED kết nối với GPIO 23
const int ledPin = 23;

void setup() {
  // Khởi tạo giao tiếp Serial với tốc độ baudrate 115200
  Serial.begin(115200);
  
  // Cấu hình chân ledPin làm ngõ ra (OUTPUT)
  pinMode(ledPin, OUTPUT);
  
  // In thông báo chào mừng ra màn hình Serial Monitor
  Serial.println("ESP32 da san sang! Bat dau chuong trinh...");
}

void loop() {
  // Bật sáng LED bằng cách xuất mức điện áp CAO (3.3V)
  digitalWrite(ledPin, HIGH);
  // Gửi trạng thái LED lên máy tính
  Serial.println("LED dang BAT (ON)");
  // Chờ trong 1 giây (1000 miligiây)
  delay(1000);
  
  // Tắt LED bằng cách xuất mức điện áp THẤP (0V)
  digitalWrite(ledPin, LOW);
  // Gửi trạng thái LED lên máy tính
  Serial.println("LED dang TAT (OFF)");
  // Chờ trong 1 giây (1000 miligiây)
  delay(1000);
}
📝 4. Giải Thích Thuật Toán & Mã Nguồn C++

🔹 Giải Thích Chi Tiết Mã Nguồn

Chương trình trên được viết theo cấu trúc chuẩn của Arduino IDE gồm hai hàm bắt buộc là setup() và loop():
▪Khai báo biến: const int ledPin = 23; định nghĩa chân điều khiển LED là chân số 23. Việc sử dụng từ khóa const giúp tối ưu hóa bộ nhớ vì giá trị này không thay đổi trong suốt quá trình chạy.
▪Hàm setup():
▪Serial.begin(115200);: Kích hoạt cổng giao tiếp nối tiếp (Serial) giữa ESP32 và máy tính với tốc độ truyền dữ liệu là 115200 bits/giây (baudrate). Đây là tốc độ chuẩn khuyến nghị cho ESP32.
▪pinMode(ledPin, OUTPUT);: Thiết lập chân GPIO 23 hoạt động ở chế độ xuất tín hiệu (OUTPUT) để có thể cấp nguồn cho LED.
▪Hàm loop():
▪digitalWrite(ledPin, HIGH);: Cấp điện áp 3.3V vào chân GPIO 23, làm dòng điện chạy qua LED và phát sáng.
▪Serial.println("...");: Gửi chuỗi ký tự lên màn hình máy tính để người dùng dễ dàng giám sát trạng thái hệ thống.
▪delay(1000);: Tạm dừng chương trình trong 1000ms (1 giây) trước khi thực hiện lệnh tiếp theo.
▪digitalWrite(ledPin, LOW);: Ngắt điện áp tại chân GPIO 23 về 0V, làm LED tắt.
🚀 5. Thử Nghiệm Vận Hành & Khắc Phục Lỗi (Troubleshooting)

🔹 Hướng Dẫn Nạp Code Và Kiểm Tra Kết Quả

▪️ Bước 1: Cấu hình Arduino IDE để hỗ trợ ESP32

1. Mở Arduino IDE, vào File > Preferences.
2. Nhập đường dẫn sau vào ô *Additional Boards Manager URLs*:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Cài đặt ESP32 Board Manager
📌 Cài đặt ESP32 Board Manager
3. Vào Tools > Board > Boards Manager..., tìm kiếm từ khóa esp32 và nhấn Install.

Tìm kiếm gói cài đặt ESP32
📌 Tìm kiếm gói cài đặt ESP32

▪️ Bước 2: Chọn Board và Cổng COM

1. Vào Tools > Board, chọn đúng board của bạn (Ví dụ: DOIT ESP32 DEVKIT V1).

Chọn Board ESP32 trong Arduino IDE
📌 Chọn Board ESP32 trong Arduino IDE
2. Kết nối ESP32 với máy tính qua cáp Micro-USB. Vào Tools > Port và chọn cổng COM tương ứng.

Chọn cổng COM kết nối
📌 Chọn cổng COM kết nối

▪️ Bước 3: Nạp Code

1. Nhấn nút Upload (mũi tên bên góc trái) để biên dịch và nạp code xuống board.

Quá trình nạp code thành công
📌 Quá trình nạp code thành công
2. Khắc phục lỗi "Connecting...": Nếu màn hình hiển thị thông báo Connecting...___...___ liên tục mà không nạp được, hãy nhấn và giữ nút BOOT trên ESP32 cho đến khi quá trình nạp bắt đầu chạy phần trăm (%), sau đó thả tay ra.

Lỗi Connecting và cách xử lý bằng nút BOOT
📌 Lỗi Connecting và cách xử lý bằng nút BOOT

▪️ Bước 4: Xem kết quả vận hành

1. Mở Serial Monitor (biểu tượng kính lúp ở góc trên bên phải).
2. Chọn tốc độ baudrate là 115200.
3. Bạn sẽ thấy thông điệp trạng thái LED được in ra liên tục mỗi giây, đồng thời đèn LED trên breadboard sẽ nhấp nháy đồng bộ.

Kết quả hiển thị trên Serial Monitor
📌 Kết quả hiển thị trên Serial Monitor