ESP32 và Arduino khác nhau thế nào?
8 phút đọc05/05/2024Trần Anh Thư

So sánh chi tiết về phần cứng, hiệu năng và ứng dụng của hai nền tảng phổ biến. Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết và ứng dụng thực tế trong robot.
ESP32 và Arduino khác nhau thế nào?
Bảng so sánh chi tiết
| Thông số | Arduino Uno | ESP32 DevKit |
|---|---|---|
| CPU | ATmega328P 8-bit 16MHz | Xtensa LX6 32-bit 240MHz dual-core |
| RAM | 2 KB SRAM | 520 KB SRAM |
| Flash | 32 KB | 4 MB |
| GPIO | 14 digital + 6 analog | 36 GPIO đa năng |
| ADC | 10-bit | 12-bit |
| WiFi | Không | 802.11 b/g/n |
| Bluetooth | Không | BT 4.2 + BLE |
| Giá | ~80.000 VNĐ | ~85.000 VNĐ |
| Điện áp GPIO | 5V | 3.3V |
Khi nào nên dùng Arduino Uno?
- Học lập trình cơ bản — đơn giản, dễ hiểu, tài liệu nhiều
- Dự án không cần kết nối — không WiFi, không Bluetooth
- 5V sensor — nhiều cảm biến cũ dùng 5V logic
- Thư viện AVR — một số thư viện chỉ hỗ trợ AVR
- Budget thấp — Arduino clone (CH340) giá ~30.000 VNĐ
Khi nào nên dùng ESP32?
- IoT — kết nối WiFi cần thiết
- Bluetooth control từ điện thoại
- Xử lý phức tạp — FFT, machine learning, image processing
- Web server trên board mà không cần Raspberry Pi
- Nhiều GPIO và ADC 12-bit chính xác hơn
Cùng task, code khác nhau thế nào?
Blink LED:
cpp
// Arduino Uno
void loop() {
digitalWrite(LED_BUILTIN, HIGH); delay(500);
digitalWrite(LED_BUILTIN, LOW); delay(500);
}
// ESP32 — y hệt, chỉ khác LED_BUILTIN = GPIO2
void loop() {
digitalWrite(2, HIGH); delay(500);
digitalWrite(2, LOW); delay(500);
}Analog read:
cpp
// Arduino Uno — 10-bit (0–1023)
int raw = analogRead(A0);
float v = raw * 5.0f / 1023.0f;
// ESP32 — 12-bit (0–4095), 3.3V reference
int raw = analogRead(34);
float v = raw * 3.3f / 4095.0f;WiFi (chỉ ESP32):
cpp
#include <WiFi.h>
WiFi.begin("SSID", "password");
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.println(WiFi.localIP());Tips migration Arduino → ESP32
- Đổi
analogWrite()→ledcWrite()(ESP32 dùng LEDC) - Tránh GPIO 6–11 (kết nối SPI Flash nội)
- GPIO 34, 35, 36, 39: input only — không dùng OUTPUT
- Giảm điện áp sensor xuống 3.3V hoặc dùng voltage divider
Gợi ý dùng bài viết trong lớp học
Câu hỏi khởi động
- Linh kiện/kỹ thuật trong bài giải quyết vấn đề gì trong robot thật?
- Nếu nối sai nguồn hoặc đọc sai tín hiệu, robot sẽ biểu hiện như thế nào?
- Có cách nào đo hoặc quan sát hiện tượng thay vì đoán lỗi không?
Hoạt động thực hành nhanh
- Giáo viên cho học viên xem linh kiện hoặc sơ đồ liên quan đến chủ đề ESP32 và Arduino khác nhau thế nào?.
- Học viên dự đoán chân nguồn, chân tín hiệu và dữ liệu đầu ra.
- Chạy code mẫu ở cấu hình an toàn, sau đó thay đổi một tham số.
- Mỗi nhóm ghi nhận lỗi gặp phải và cách kiểm tra theo thứ tự nguồn, GND, tín hiệu, code.
Checklist kỹ thuật
- Luôn kiểm tra điện áp hoạt động trước khi nối với board điều khiển.
- In dữ liệu ra Serial Monitor khi làm việc với cảm biến hoặc thuật toán.
- Với motor/servo, cấp nguồn tải riêng và nối chung GND với board.
- Ghi lại thông số đã calibration để lần sau không phải chỉnh lại từ đầu.
Câu hỏi ôn tập
- Thông số nào quan trọng nhất khi chọn linh kiện này cho robot?
- Lỗi nào dễ xảy ra nhất trong lớp học và cách phát hiện nhanh nhất là gì?
- Có thể mở rộng kiến thức này thành dự án robot nào?
Tài nguyên tải về
Tải bản PDF của bài viết để in giáo án hoặc gửi trước cho học viên.
Chia sẻ bài viết