-
-
-
Tổng tiền thanh toán:
-
Thương hiệu: (Đang cập nhật ...) Loại: (Đang cập nhật ...)
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.
Sau khi hoàn thành bài học, học viên có thể:
Đặ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ả.
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.
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.
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.
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.
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
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.
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.
Trong Arduino IDE chọn:
Tools → Port
Ví dụ:
COM5
COM7
COM10
Chọn đúng cổng tương ứng với ESP32.
Nếu có nhiều COM:
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.
Đâ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.
Để 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:
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
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
↓
...
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:
;.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.
Sau khi Verify thành công:
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.
Đâ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.
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.
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.
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ả │
└─────────────────────┘
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.
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.
Giữ BOOT
↓
Nhấn Upload
↓
Chờ IDE bắt đầu Connecting
↓
Thả BOOT
Nếu vẫn không được:
Đây là các bước troubleshooting được Espressif liệt kê cho lỗi flash/upload.
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:
Vì vậy, nguyên tắc:
Xác định đúng phần cứng trước khi chọn Board trong Arduino IDE.
Đâ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.
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ụ:
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.
Đố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.
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);
}
Serial Monitor hiển thị:
Drone ESP32 READY
Drone ESP32 READY
Drone ESP32 READY
...
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.
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.
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.
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 | ☐ |
Arduino IDE dùng để làm gì?
Tại sao phải cài ESP32 Board Package?
COM Port có vai trò gì?
Tại sao ESP32 sáng LED nhưng máy tính không thấy COM?
Nút BOOT có tác dụng gì trong quá trình nạp?
Khi gặp:
Failed to connect to ESP32
cần kiểm tra những gì?
Serial Monitor dùng để làm gì?
Tại sao nên kiểm tra firmware trước khi lắp cánh Drone?
Tại sao phải chọn đúng loại Board?
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?
Học viên thực hiện đầy đủ quy trình:
Nhiệm vụ:
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:
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 để:
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.
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.