Bài 9 :nạp chương trình esp32

Thương hiệu: (Đang cập nhật ...) Loại: (Đang cập nhật ...)

Liên hệ
Thiết lập môi trường lập trình, kết nối ESP32 với máy tính và nạp chương trình đầu tiên Trong chuỗi giáo án STEM Lập trình & Điều khiển Drone ESP32, sau khi học viên đã tìm hiểu phần cứng, giao tiếp ESP-NOW, joystick, MPU6050 và nguyên lý điều khiển Drone, bước tiếp theo là làm chủ quy trình ...

Thiết lập môi trường lập trình, kết nối ESP32 với máy tính và nạp chương trình đầu tiên

Trong chuỗi giáo án STEM Lập trình & Điều khiển Drone ESP32, sau khi học viên đã tìm hiểu phần cứng, giao tiếp ESP-NOW, joystick, MPU6050 và nguyên lý điều khiển Drone, bước tiếp theo là làm chủ quy trình nạp chương trình vào ESP32.

Đây là kỹ năng nền tảng. Nếu học viên chưa hiểu cách biên dịch, chọn đúng board, xác định đúng cổng COM và đưa ESP32 vào chế độ nạp chương trình, các bài điều khiển Drone phía sau sẽ rất khó triển khai.

Bài học này sử dụng Arduino IDE + Arduino-ESP32 Core. Espressif hiện cung cấp Arduino-ESP32 và hướng dẫn cài đặt thông qua Boards Manager.


1. MỤC TIÊU BÀI HỌC

Sau khi hoàn thành bài học, học viên có thể:

  • Cài đặt Arduino IDE.
  • Cài đặt bộ hỗ trợ ESP32.
  • Kết nối ESP32 với máy tính.
  • Nhận biết cổng COM của ESP32.
  • Chọn đúng board ESP32.
  • Tạo chương trình Arduino cơ bản.
  • Biên dịch chương trình.
  • Nạp chương trình vào ESP32.
  • Kiểm tra chương trình sau khi nạp.
  • Sử dụng Serial Monitor để kiểm tra hoạt động.
  • Hiểu vai trò của nút BOOT và EN/RESET.
  • Xử lý các lỗi thường gặp khi ESP32 không nhận chương trình.

Đặc biệt, học viên cần hiểu rằng:

Nạp chương trình không đơn giản chỉ là bấm nút Upload.

Một quy trình nạp hoàn chỉnh gồm:

Viết chương trình → Kiểm tra code → Biên dịch → Chọn đúng Board → Chọn đúng Port → Đưa ESP32 vào chế độ Download → Upload → Reset → Kiểm tra kết quả.


2. ESP32 LÀ GÌ?

ESP32 là dòng vi điều khiển của Espressif được sử dụng rộng rãi trong các hệ thống IoT, robot, thiết bị điều khiển và các ứng dụng nghiên cứu Drone.

Trong khóa học này, ESP32 đóng vai trò là bộ điều khiển trung tâm.

Ví dụ với hệ thống Drone đang nghiên cứu:

Joystick

↓

ESP32 điều khiển

↓

ESP-NOW / giao tiếp không dây

↓

ESP32 trên Drone

↓

MPU6050

↓

Thuật toán điều khiển

↓

Motor

Vì vậy, trước khi đi đến các thuật toán bay nâng cao, học viên phải biết cách đưa firmware vào ESP32 một cách chính xác.


3. CHUẨN BỊ THIẾT BỊ

3.1. Phần cứng

Cần chuẩn bị:

Thiết bị Số lượng
ESP32 Development Board 1
Máy tính 1
Cáp USB truyền dữ liệu 1
ESP32 Drone/Controller 1
Nguồn cấp phù hợp 1

Lưu ý quan trọng: cáp USB phải hỗ trợ truyền dữ liệu, không chỉ sạc. Một số dây USB chỉ có đường nguồn nên máy tính sẽ không nhận ESP32. Đây cũng là một trong những nguyên nhân được Espressif và Arduino đề cập khi xử lý lỗi upload.


4. CÀI ĐẶT ARDUINO IDE

Arduino IDE là môi trường dùng để viết, biên dịch và nạp chương trình.

Có thể sử dụng Arduino IDE trên Windows, macOS hoặc Linux.

Sau khi cài đặt, mở:

Arduino IDE

Giao diện chính sẽ xuất hiện.


5. CÀI ĐẶT ESP32 BOARD PACKAGE

Arduino IDE ban đầu không phải lúc nào cũng có sẵn bộ hỗ trợ cho ESP32.

Chúng ta cần cài Arduino-ESP32 Core.

Bước 1: Mở Preferences

Trong Arduino IDE:

File → Preferences

Tìm mục:

Additional Boards Manager URLs

Thêm địa chỉ Board Manager URL chính thức của Espressif:


https://espressif.github.io/arduino-esp32/package_esp32_index.json

Đây là URL stable release được Espressif hướng dẫn sử dụng cho Arduino-ESP32.

Sau đó nhấn:

OK


6. CÀI ESP32 TRONG BOARDS MANAGER

Vào:

Tools → Board → Boards Manager

hoặc sử dụng biểu tượng Boards Manager trong Arduino IDE.

Tại ô tìm kiếm nhập:


esp32

Chọn:

esp32 by Espressif Systems

Sau đó nhấn:

Install

Arduino IDE sẽ tải và cài đặt bộ công cụ cần thiết.

Espressif khuyến nghị sử dụng Boards Manager để cài Arduino-ESP32.


7. KẾT NỐI ESP32 VỚI MÁY TÍNH

Dùng cáp USB kết nối:

ESP32 ↔ Máy tính

Khi kết nối thành công, máy tính có thể nhận diện một cổng Serial/COM mới.

Trên Windows có thể kiểm tra tại:

Device Manager → Ports (COM & LPT)

Ví dụ:


USB-SERIAL CH340 (COM5)

hoặc:


Silicon Labs CP210x USB to UART Bridge (COM7)

Tên thiết bị phụ thuộc vào mạch USB-to-UART được sử dụng trên board.


8. XÁC ĐỊNH CỔNG COM

Trong Arduino IDE chọn:

Tools → Port

Ví dụ:


COM5
COM7
COM10

Chọn đúng cổng tương ứng với ESP32.

Cách xác định rất đơn giản

Nếu có nhiều COM:

  1. Rút ESP32 khỏi máy tính.
  2. Mở danh sách Port.
  3. Ghi nhớ các COM đang có.
  4. Cắm lại ESP32.
  5. Kiểm tra COM mới xuất hiện.

COM mới xuất hiện thường chính là ESP32.

Arduino cũng khuyến nghị kiểm tra Port bằng cách ngắt kết nối rồi kết nối lại board nếu không biết board đang sử dụng cổng nào.


9. CHỌN ĐÚNG BOARD ESP32

Đây là bước rất quan trọng.

Vào:

Tools → Board → esp32

Sau đó lựa chọn board phù hợp với phần cứng.

Ví dụ với nhiều board ESP32 DevKit sử dụng module ESP32-WROOM-32, có thể sử dụng:


ESP32 Dev Module

Tuy nhiên, không nên chọn board theo tên một cách máy móc. Giáo viên cần xác định đúng loại ESP32 đang sử dụng trong bộ kit.

Các dòng ESP32 khác nhau có thể có cấu hình USB, flash, boot và tùy chọn Arduino khác nhau.


10. CHƯƠNG TRÌNH ĐẦU TIÊN

Để kiểm tra việc nạp chương trình, trước tiên không nên đưa ngay chương trình điều khiển Drone vào ESP32.

Hãy bắt đầu bằng chương trình đơn giản.

Ví dụ:


void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println("ESP32 LINHKIEN1993 - OK");
  delay(1000);
}

Chương trình này thực hiện một nhiệm vụ rất đơn giản:

  • Khởi động Serial.
  • Gửi dữ liệu lên máy tính.
  • Cứ sau 1 giây gửi một dòng thông báo.

11. GIẢI THÍCH CHƯƠNG TRÌNH

Hàm setup()


void setup() {
  Serial.begin(115200);
}

setup() chỉ chạy một lần khi ESP32 khởi động hoặc reset.

Dòng:


Serial.begin(115200);

khởi tạo giao tiếp Serial với tốc độ:


115200 baud


Hàm loop()


void loop() {
  Serial.println("ESP32 LINHKIEN1993 - OK");
  delay(1000);
}

loop() được lặp liên tục.

Mỗi vòng lặp:


Gửi dữ liệu
↓
Chờ 1 giây
↓
Gửi dữ liệu
↓
Chờ 1 giây
↓
...


12. KIỂM TRA CHƯƠNG TRÌNH TRƯỚC KHI NẠP

Trước khi Upload, hãy nhấn:

Verify

Arduino IDE sẽ tiến hành biên dịch chương trình.

Mục đích của bước này là kiểm tra:

  • Lỗi cú pháp.
  • Thiếu dấu ;.
  • Thiếu thư viện.
  • Sai tên hàm.
  • Sai cấu trúc chương trình.
  • Lỗi tương thích.

Nếu chương trình biên dịch thành công, Arduino IDE sẽ báo hoàn tất quá trình compile.

Arduino cũng khuyến nghị có thể dùng nút Verify để kiểm tra chương trình trước khi Upload.


13. TIẾN HÀNH NẠP CHƯƠNG TRÌNH

Sau khi Verify thành công:

  1. Kết nối ESP32.
  2. Chọn đúng Board.
  3. Chọn đúng Port.
  4. Nhấn Upload.

Arduino IDE sẽ thực hiện quá trình:


Compile
↓
Prepare firmware
↓
Connect ESP32
↓
Enter Download Mode
↓
Erase/Write Flash
↓
Verify
↓
Reset

Espressif mô tả quá trình cơ bản gồm kết nối board, chọn board, chọn COM và Compile/Upload. Một số board có thể yêu cầu giữ nút BOOT trong lúc upload.


14. NÚT BOOT CÓ TÁC DỤNG GÌ?

Đây là phần học viên rất dễ nhầm.

ESP32 có chế độ hoạt động bình thường và Download Mode.

Khi nạp firmware qua giao tiếp Serial, ESP32 cần vào chế độ Download.

Với các board yêu cầu thao tác thủ công, có thể:

Giữ BOOT → nhấn Upload → khi IDE bắt đầu kết nối thì thả BOOT.

Về nguyên lý phần cứng, Download Mode liên quan đến việc đưa GPIO0 xuống LOW trong quá trình reset. Espressif mô tả đây là cơ chế để ESP32 nhận firmware qua giao tiếp serial.


15. NẾU ESP32 TỰ ĐỘNG NẠP

Nhiều board phát triển ESP32 có mạch Auto Boot/Auto Reset.

Trong trường hợp này, Arduino IDE có thể tự động đưa ESP32 vào Download Mode.

Khi đó học viên chỉ cần:

Upload

và chờ quá trình hoàn thành.

Nếu IDE dừng ở:


Connecting........

thì mới thử thao tác:

Giữ BOOT → Upload → thả BOOT khi bắt đầu kết nối.


16. KIỂM TRA CHƯƠNG TRÌNH SAU KHI NẠP

Sau khi Upload thành công, mở:

Tools → Serial Monitor

Chọn:


115200 baud

Nếu chương trình hoạt động đúng, màn hình sẽ xuất hiện:


ESP32 LINHKIEN1993 - OK
ESP32 LINHKIEN1993 - OK
ESP32 LINHKIEN1993 - OK
ESP32 LINHKIEN1993 - OK

Cứ khoảng 1 giây sẽ xuất hiện một dòng mới.

Điều này chứng minh:

ESP32 đã nhận chương trình và chương trình đang chạy.


17. SƠ ĐỒ QUY TRÌNH NẠP CHƯƠNG TRÌNH

Có thể đưa sơ đồ này trực tiếp vào giáo án:


┌─────────────────────┐
│ Viết chương trình   │
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│ Verify / Compile    │
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│ Chọn ESP32 Board    │
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│ Chọn đúng COM Port  │
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│ Upload               │
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│ Download Mode       │
│ BOOT nếu cần        │
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│ Ghi Firmware vào    │
│ Flash ESP32         │
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│ Reset ESP32         │
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│ Serial Monitor      │
│ Kiểm tra kết quả    │
└─────────────────────┘


18. CÁC LỖI THƯỜNG GẶP

Lỗi 1: Không thấy COM

Nguyên nhân có thể:

  • Cáp USB chỉ dùng để sạc.
  • Driver USB chưa được nhận.
  • Cổng USB có vấn đề.
  • Board chưa được cấp nguồn.
  • Board bị lỗi.

Cách xử lý:

  1. Đổi cáp USB.
  2. Đổi cổng USB.
  3. Không dùng USB Hub nếu không cần thiết.
  4. Kiểm tra Device Manager.
  5. Rút ESP32 và cắm lại.

Espressif cũng khuyến nghị thử cáp USB khác, cổng USB khác và ưu tiên kết nối trực tiếp với máy tính khi ESP32 không flash được.


19. LỖI “FAILED TO CONNECT TO ESP32”

Một lỗi rất thường gặp:


Failed to connect to ESP32:
Timed out waiting for packet header

Nguyên nhân có thể là ESP32 chưa vào Download Mode.

Thử:


Giữ BOOT
      ↓
Nhấn Upload
      ↓
Chờ IDE bắt đầu Connecting
      ↓
Thả BOOT

Nếu vẫn không được:

  • Kiểm tra cáp USB.
  • Kiểm tra Port.
  • Kiểm tra Board.
  • Kiểm tra nguồn.
  • Ngắt các thiết bị đang kết nối vào TX/RX.
  • Thử lại Download Mode.

Đây là các bước troubleshooting được Espressif liệt kê cho lỗi flash/upload.


20. LỖI CHỌN SAI BOARD

Ví dụ học viên sử dụng một loại ESP32 nhưng lại chọn board khác.

Có thể dẫn đến:

  • Compile không đúng cấu hình.
  • Upload không thành công.
  • Chương trình chạy không đúng.
  • Một số chân GPIO hoạt động không như dự kiến.

Vì vậy, nguyên tắc:

Xác định đúng phần cứng trước khi chọn Board trong Arduino IDE.


21. LỖI CÁP USB

Đây là lỗi rất cơ bản nhưng thường gây mất nhiều thời gian.

Không phải dây USB nào cũng có đường truyền dữ liệu.

Có hai trường hợp:


USB POWER
5V + GND

và:


USB DATA
5V + GND + D+ + D-

Nếu sử dụng dây chỉ có nguồn:

ESP32 có thể sáng đèn nhưng máy tính không nhận COM.

Đây là một điểm rất phù hợp để giáo viên giải thích cho học viên:

ESP32 sáng LED không đồng nghĩa với việc máy tính đã giao tiếp được với ESP32.


22. LỖI DO TX/RX

Trong quá trình phát triển Drone, ESP32 có thể kết nối với nhiều thiết bị ngoại vi.

Ví dụ:

  • GPS.
  • Bluetooth/UART.
  • Module khác.
  • USB-UART.
  • Thiết bị telemetry.

Nếu các thiết bị này chiếm đường TX/RX, quá trình nạp có thể bị ảnh hưởng.

Espressif khuyến nghị kiểm tra và tránh để thiết bị bên ngoài kết nối vào các chân TX/RX khi troubleshooting việc flash.


23. KHÔNG NÊN NẠP CODE BAY NGAY TỪ ĐẦU

Đối với Drone, đây là một nguyên tắc rất quan trọng.

Không nên:


Lắp motor
↓
Lắp cánh
↓
Cấp pin
↓
Nạp firmware
↓
Cho Drone chạy ngay

Quy trình an toàn hơn:


Nạp firmware
↓
Kiểm tra ESP32
↓
Kiểm tra Serial
↓
Kiểm tra cảm biến
↓
Kiểm tra joystick
↓
Kiểm tra tín hiệu điều khiển
↓
Kiểm tra motor khi tháo cánh
↓
Kiểm tra chiều quay
↓
Kiểm tra Motor Mixing
↓
Sau cùng mới thử bay

Trong các bài thực hành Drone, luôn tháo cánh quạt khi kiểm tra motor trên bàn.


24. BÀI THỰC HÀNH 1 – ESP32 GỬI DỮ LIỆU SERIAL

Yêu cầu học viên viết chương trình:


void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println("Drone ESP32 READY");
  delay(1000);
}

Kết quả mong đợi

Serial Monitor hiển thị:


Drone ESP32 READY
Drone ESP32 READY
Drone ESP32 READY
...


25. BÀI THỰC HÀNH 2 – ĐIỀU KHIỂN LED

Sau khi đã xác nhận ESP32 nhận chương trình, chuyển sang điều khiển GPIO.

Ví dụ:


#define LED_PIN 2

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

void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay(500);

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

Nếu board sử dụng GPIO2 cho LED tích hợp, LED sẽ thay đổi trạng thái theo chu kỳ.

Lưu ý: GPIO LED tích hợp không giống nhau trên tất cả board ESP32, vì vậy giáo viên cần kiểm tra sơ đồ chân của board đang sử dụng.


26. BÀI THỰC HÀNH 3 – ESP32 + SERIAL + GPIO

Khi học viên đã hiểu hai phần trên, có thể kết hợp:


#define LED_PIN 2

void setup() {

  pinMode(LED_PIN, OUTPUT);

  Serial.begin(115200);

  Serial.println("ESP32 START");
}

void loop() {

  digitalWrite(LED_PIN, HIGH);

  Serial.println("LED ON");

  delay(1000);

  digitalWrite(LED_PIN, LOW);

  Serial.println("LED OFF");

  delay(1000);
}

Qua bài này, học viên hiểu được mối quan hệ:

Code → GPIO → phần cứng → Serial → kiểm tra kết quả.

Đây chính là tư duy cần thiết khi chuyển sang lập trình Drone.


27. LIÊN HỆ VỚI HỆ THỐNG DRONE

Sau khi hoàn thành bài 9, ESP32 không còn chỉ là một board lập trình đơn giản.

Trong Drone, ESP32 sẽ phải thực hiện nhiều nhiệm vụ đồng thời:


             ESP32
               │
      ┌────────┼────────┐
      ↓        ↓        ↓
   MPU6050  Joystick  ESP-NOW
      │        │        │
      ↓        ↓        ↓
  Góc bay   Lệnh lái   Dữ liệu
      │
      ↓
  PID Controller
      │
      ↓
 Motor Mixing
      │
 ┌────┼────┬────┐
 ↓    ↓    ↓    ↓
M1   M2   M3   M4

Vì vậy, kỹ năng nạp firmware trong bài này là nền tảng để học viên bước sang:

Bài 10 → Hiệu chỉnh Drone

và sau đó:

Bài 11 → Bay tự động A → B

Bài 12 → Camera + cảm biến khoảng cách + xử lý hình ảnh.


28. CHECKLIST THỰC HÀNH CHO HỌC VIÊN

Giáo viên có thể sử dụng bảng sau để đánh giá:

Nội dung Đạt
Cài Arduino IDE ☐
Cài ESP32 Board Package ☐
Kết nối ESP32 với máy tính ☐
Xác định COM ☐
Chọn đúng Board ☐
Viết chương trình ☐
Verify thành công ☐
Upload thành công ☐
Biết sử dụng BOOT ☐
Mở Serial Monitor ☐
Kiểm tra dữ liệu Serial ☐
Điều khiển được GPIO ☐
Biết xử lý lỗi Upload ☐

29. CÂU HỎI KIỂM TRA CUỐI BÀI

Câu 1

Arduino IDE dùng để làm gì?

Câu 2

Tại sao phải cài ESP32 Board Package?

Câu 3

COM Port có vai trò gì?

Câu 4

Tại sao ESP32 sáng LED nhưng máy tính không thấy COM?

Câu 5

Nút BOOT có tác dụng gì trong quá trình nạp?

Câu 6

Khi gặp:


Failed to connect to ESP32

cần kiểm tra những gì?

Câu 7

Serial Monitor dùng để làm gì?

Câu 8

Tại sao nên kiểm tra firmware trước khi lắp cánh Drone?

Câu 9

Tại sao phải chọn đúng loại Board?

Câu 10

Sau khi nạp thành công chương trình, làm thế nào để xác nhận ESP32 đang thực sự chạy chương trình?


30. BÀI TẬP CUỐI BÀI

Học viên thực hiện đầy đủ quy trình:

Nhiệm vụ:

  1. Kết nối ESP32 với máy tính.
  2. Xác định COM.
  3. Chọn đúng Board.
  4. Tạo Sketch mới.
  5. Viết chương trình Serial.
  6. Verify.
  7. Upload.
  8. Mở Serial Monitor.
  9. Kiểm tra dữ liệu.
  10. Thực hiện Reset ESP32.
  11. Xác nhận chương trình tự chạy lại.
  12. Ghi lại các lỗi phát sinh trong quá trình thực hành.

Yêu cầu báo cáo

Học viên cần ghi:


Tên học viên:
Loại ESP32:
Arduino IDE:
Board đã chọn:
COM Port:
Kết quả Verify:
Kết quả Upload:
Lỗi gặp phải:
Cách xử lý:
Kết quả cuối cùng:


31. KẾT LUẬN

Qua bài học này, học viên đã hoàn thành quy trình cơ bản:

Arduino IDE → ESP32 Board Package → USB → COM → Compile → Upload → BOOT → Flash → Reset → Serial Monitor.

Đây là bước chuyển từ lập trình trên máy tính sang đưa chương trình thực tế vào một hệ thống nhúng.

Đối với dự án Drone ESP32, kỹ năng này đặc biệt quan trọng vì trong những bài tiếp theo, học viên sẽ liên tục phải thay đổi firmware để:

  • đọc MPU6050;
  • xử lý dữ liệu cảm biến;
  • nhận dữ liệu joystick;
  • truyền ESP-NOW;
  • điều khiển motor;
  • hiệu chỉnh PID;
  • thực hiện Motor Mixing;
  • xây dựng thuật toán bay tự động.

Bài 9 không nhằm mục tiêu làm Drone bay ngay. Mục tiêu của bài là giúp học viên làm chủ hoàn toàn quy trình đưa firmware vào ESP32 và kiểm tra ESP32 hoạt động đúng trước khi bước sang hệ thống điều khiển Drone.

Nguyên tắc của khóa học:
Nạp được chương trình → kiểm tra được chương trình → hiểu được dữ liệu → sau đó mới điều khiển Drone.

Tài liệu tham khảo kỹ thuật

Gợi ý cho giáo án của anh: Bài 9 này nên đặt trọng tâm vào “học viên tự nạp được ESP32 và tự xử lý lỗi”, thay vì dành quá nhiều thời lượng cho lý thuyết Arduino. Như vậy khi sang Bài 10 – Hiệu chỉnh Drone → PID + Motor Mixing, học viên đã có nền tảng thực hành cần thiết.

popup

Số lượng:

Tổng tiền: