Cài ESP32 vào Arduino IDE 2: thêm bo mạch, chọn ESP32 Dev Module và nạp chương trình đầu tiên

Cài gói esp32 của Espressif vào Arduino IDE 2, chọn bo DOIT ESP32 DEVKIT V1 hoặc ESP32 Dev Module, chọn cổng COM, nạp chương trình nháy LED, in thông tin chip và sửa lỗi lần nạp đầu.

Mạch ESP32 mới mua về muốn lập trình bằng Arduino IDE thì phải cài thêm gói bo mạch ESP32, chọn đúng bo và đúng cổng COM. Bài viết hướng dẫn từng bước trên Arduino IDE 2: thêm gói esp32 của Espressif, chọn DOIT ESP32 DEVKIT V1 hay ESP32 Dev Module, nạp chương trình đầu tiên để nháy LED và in thông tin chip ra Serial Monitor, kèm cách xử lý các lỗi hay gặp ở lần nạp đầu tiên.

Bốn bước cài ESP32 vào Arduino IDE: cài Arduino IDE 2, thêm gói esp32 by Espressif Systems, chọn bo DOIT ESP32 DEVKIT V1 và cổng COM, bấm Upload rồi mở Serial Monitor 115200
Bốn bước cài ESP32 vào Arduino IDE (hình tự vẽ).

1. Chuẩn bị

  • Mạch ESP32, ví dụ ESP32 DevKit V1 30 chân cổng Type-C. Bài dùng được cho cả bản CH340, bản 38 chân, bản có OLED hay có pin 18650.
  • Dây USB nạp code loại có truyền dữ liệu, đúng đầu cắm của mạch (Type-C hoặc Micro USB).
  • Máy tính Windows 10, 11 (macOS và Linux làm tương tự), có mạng Internet.

Bài dùng Arduino IDE 2 và gói esp32 phiên bản 3.3.10.

2. Cài Arduino IDE 2

  1. Vào trang arduino.cc, mục Software, tải bản Arduino IDE 2 cho Windows (file cài đặt .exe).
  2. Chạy file cài đặt, bấm I Agree, Next, Install như phần mềm thường. Khi Windows hỏi cài driver cổng USB, chọn Install.
  3. Mở Arduino IDE. Lần đầu mở, phần mềm tự tải thêm vài thành phần, chờ thanh trạng thái ở góc dưới chạy xong.

Muốn đổi giao diện sang tiếng Việt: File › Preferences › Language. Bài này ghi tên menu tiếng Anh vì đa số tài liệu dùng tên đó.

3. Thêm gói bo mạch ESP32

Hình minh họa thêm gói ESP32: dán đường dẫn package_esp32_index.json vào ô Additional boards manager URLs, rồi trong Boards Manager tìm esp32 và cài gói esp32 by Espressif Systems, không chọn Arduino ESP32 Boards
Dán đường dẫn gói, rồi cài gói esp32 của Espressif Systems (hình minh họa giản lược).
  1. Vào File › Preferences. Ở ô Additional boards manager URLs, dán đường dẫn sau rồi bấm OK:
    https://espressif.github.io/arduino-esp32/package_esp32_index.json
  2. Mở Tools › Board › Boards Manager (hoặc biểu tượng bo mạch ở thanh bên trái).
  3. Gõ esp32 vào ô tìm kiếm. Chọn gói esp32 by Espressif Systems, bấm INSTALL. Không chọn gói Arduino ESP32 Boards: gói đó chỉ dành cho mạch Arduino Nano ESP32.
  4. Chờ tải xong (vài trăm MB, có thể mất vài phút tùy mạng). Khi nút đổi thành REMOVE và hiện số phiên bản là đã cài xong.

4. Cắm mạch và tìm cổng COM

Cắm mạch ESP32 vào máy tính bằng dây USB. Đèn nguồn trên mạch phải sáng. Mở Device Manager (bấm chuột phải vào nút Start), xem mục Ports (COM & LPT):

  • Mạch chip CP2102 hiện dạng Silicon Labs CP210x USB to UART Bridge (COM5).
  • Mạch chip CH340 hiện dạng USB-SERIAL CH340 (COM6).

Số COM khác nhau trên từng máy, ghi nhớ số này. Nếu không thấy mục Ports, hoặc thiết bị hiện dấu chấm than vàng, xem phần xử lý lỗi ở cuối bài và bài ESP32 không nhận cổng COM cùng loạt.

5. Chọn bo và cổng

Menu Tools với bo DOIT ESP32 DEVKIT V1 và bo ESP32 Dev Module: Port COM5, Upload Speed 921600, Flash Size 4MB, Partition Scheme Default 4MB with spiffs, CPU Frequency 240MHz
Giá trị mặc định trong menu Tools của hai bo thường dùng cho ESP32 DevKit (hình minh họa).
  1. Tools › Board › esp32, chọn DOIT ESP32 DEVKIT V1. Cũng có thể chọn ESP32 Dev Module; cả hai đều nạp được cho mạch DevKit 30 chân và 38 chân.
  2. Tools › Port, chọn cổng COM vừa thấy ở bước 4.
  3. Để các tùy chọn khác ở giá trị mặc định.

Khác biệt nhỏ giữa hai bo: DOIT ESP32 DEVKIT V1 có sẵn hằng LED_BUILTIN bằng 2 (LED xanh trên mạch). ESP32 Dev Module không có hằng này nhưng có thêm tùy chọn CPU Frequency, Flash Size, Partition Scheme, PSRAM. Chương trình trong bài khai báo thẳng chân 2 nên chạy với cả hai bo.

6. Nạp chương trình đầu tiên

Tạo sketch mới (File › New Sketch), xóa hết nội dung có sẵn, dán chương trình dưới đây và lưu lại:

// PYWORLD.VN - Chương trình đầu tiên sau khi cài ESP32 vào Arduino IDE
// PYWORLD.VN - In thông tin chip ra Serial Monitor, nháy LED trên mạch ở GPIO2 mỗi giây
// PYWORLD.VN - Bo mạch: DOIT ESP32 DEVKIT V1 hoặc ESP32 Dev Module, Serial Monitor 115200 baud

const int LED_PIN = 2;      // LED xanh trên ESP32 DevKit V1 nối GPIO2; bo "ESP32 Dev Module" không có sẵn LED_BUILTIN

unsigned long lanTruoc = 0;  // thời điểm đổi trạng thái LED lần trước (ms)
unsigned long dem = 0;       // số giây đã chạy

void setup() {
  Serial.begin(115200);
  delay(500);                // chờ một chút để Serial Monitor kịp mở cổng
  pinMode(LED_PIN, OUTPUT);

  uint16_t rev = ESP.getChipRevision();  // dạng MXX: 301 nghĩa là v3.1
  uint64_t mac = ESP.getEfuseMac();      // địa chỉ MAC ghi sẵn trong chip, byte đầu nằm ở 8 bit thấp nhất

  Serial.println();
  Serial.println("PYWORLD.VN - ESP32 da chay chuong trinh dau tien");
  Serial.printf("Chip: %s, ban v%u.%u, %u nhan, %u MHz\n", ESP.getChipModel(), (unsigned)(rev / 100),
                (unsigned)(rev % 100), (unsigned)ESP.getChipCores(), (unsigned)ESP.getCpuFreqMHz());
  Serial.printf("Flash: %u MB, RAM trong: %u byte\n", (unsigned)(ESP.getFlashChipSize() / (1024 * 1024)),
                (unsigned)ESP.getFreeHeap());
  Serial.printf("MAC: %02X:%02X:%02X:%02X:%02X:%02X\n", (unsigned)(mac & 0xFF), (unsigned)((mac >> 8) & 0xFF),
                (unsigned)((mac >> 16) & 0xFF), (unsigned)((mac >> 24) & 0xFF), (unsigned)((mac >> 32) & 0xFF),
                (unsigned)((mac >> 40) & 0xFF));
  Serial.printf("Goi esp32 (Arduino core): %s\n", ESP.getCoreVersion());
}

void loop() {
  // Không dùng delay() để vòng lặp vẫn rảnh làm việc khác
  if (millis() - lanTruoc >= 1000) {
    lanTruoc = millis();
    dem++;
    bool sang = (dem % 2) == 1;
    digitalWrite(LED_PIN, sang ? HIGH : LOW);
    Serial.printf("Giay thu %lu, LED %s\n", dem, sang ? "SANG" : "TAT");
  }
}

Bấm nút Upload (mũi tên sang phải). Arduino IDE biên dịch chương trình, sau đó cửa sổ Output hiện dòng Connecting..., rồi các dòng ghi dữ liệu với phần trăm tăng dần. Khi góc dưới báo Done uploading là nạp xong, mạch tự khởi động lại và LED xanh bắt đầu nhấp nháy.

Vị trí nút BOOT và nút EN trên ESP32 DevKit V1 30 chân, các bước nhấn giữ BOOT khi Arduino IDE hiện Connecting rồi thả ra khi bắt đầu ghi
Nhấn giữ BOOT khi Output đứng ở Connecting…, thả ra khi bắt đầu ghi (hình tự vẽ).

Đa số mạch tự chuyển sang chế độ nạp. Nếu Output đứng mãi ở Connecting..... rồi báo lỗi, bấm Upload lại và nhấn giữ nút BOOT khi thấy chữ Connecting, thả ra khi bắt đầu ghi.

7. Xem kết quả trên Serial Monitor

  1. Mở Tools › Serial Monitor (hoặc biểu tượng kính lúp góc phải).
  2. Chọn tốc độ 115200 baud ở ô bên phải.
  3. Nhấn nút EN trên mạch một lần để chạy lại từ đầu và xem đủ các dòng thông tin.
Serial Monitor 115200 baud hiện thông tin ESP32: tên chip ESP32-D0WD-V3, 2 nhân 240 MHz, flash 4 MB, RAM trống, địa chỉ MAC, phiên bản gói esp32, rồi mỗi giây một dòng LED SANG, LED TAT
Kết quả mong đợi trên Serial Monitor; số liệu chip, RAM, MAC là ví dụ (hình minh họa theo chương trình).

Mỗi mạch có địa chỉ MAC riêng, tên chip và RAM trống có thể khác hình. Dòng Giay thu … tăng mỗi giây cùng lúc LED đổi trạng thái là chương trình đang chạy đúng.

8. Chương trình làm gì

  • Serial.begin(115200) mở cổng nối tiếp tốc độ 115200; Serial Monitor phải chọn đúng tốc độ này.
  • ESP.getChipModel(), ESP.getChipCores(), ESP.getFlashChipSize(), ESP.getFreeHeap() đọc thông tin chip; ESP.getEfuseMac() đọc địa chỉ MAC ghi sẵn trong chip.
  • Trong loop(), chương trình so millis() với lần đổi trước thay vì dùng delay(1000), để sau này thêm việc khác vào vòng lặp mà không bị chặn.

9. Lỗi thường gặp khi nạp lần đầu

Hiện tượng hoặc thông báoNguyên nhân hay gặpCách xử lý
Menu Port không có cổng nàoDây chỉ sạc, chưa có driver CH340 hoặc CP2102Đổi dây có truyền dữ liệu; xem Device Manager; cài driver
Failed to connect to ESP32: No serial data receivedMạch không tự vào chế độ nạp; GPIO0 hoặc GPIO2 bị mạch ngoài kéo sai mứcGiữ BOOT khi Connecting; rút dây khỏi GPIO0, GPIO2 khi nạp
'LED_BUILTIN' was not declared in this scopeĐang chọn bo ESP32 Dev ModuleChọn DOIT ESP32 DEVKIT V1 hoặc khai báo const int LED_PIN = 2;
could not open port 'COM5' hoặc báo cổng đang bậnMột chương trình khác đang mở cổng (cửa sổ Serial Monitor khác, phần mềm đọc cổng COM)Đóng chương trình đó, rút ra cắm lại mạch
Serial Monitor ra ký tự lạSai tốc độ baudChọn 115200 baud
Serial Monitor báo Brownout detector was triggered, mạch khởi động lại liên tụcNguồn USB yếu, dây dài hoặc kém, cắm qua bộ chia USBCắm thẳng vào máy tính, đổi dây ngắn tốt hơn
Sketch too bigChương trình lớn hơn vùng nhớ ứng dụng 1,2 MBChọn bo ESP32 Dev Module, Partition Scheme: Huge APP (3MB No OTA/1MB SPIFFS)
Gói esp32 cài báo lỗi tải về giữa chừngMạng chập chờn, tường lửa chặnThử lại, đổi mạng khác; kiểm tra lại đường dẫn gói

10. Xem thêm


Tin tức liên quan

Hướng dẫn đọc ADC trên ESP32 và đo điện áp pin 18650 bằng cầu phân áp
Hướng dẫn đọc ADC trên ESP32 và đo điện áp pin 18650 bằng cầu phân áp

Hướng dẫn đọc điện áp analog bằng ADC của ESP32 trên Arduino IDE, dùng analogReadMilliVolts, làm cầu phân áp đo pin Li-ion 18650 và ước lượng phần trăm pin còn lại.

Hướng dẫn dùng màn hình OLED 0.96 inch SSD1306 với Arduino Nano
Hướng dẫn dùng màn hình OLED 0.96 inch SSD1306 với Arduino Nano

Hướng dẫn nối màn hình OLED 0.96 inch SSD1306 (I2C) với Arduino Nano, cài thư viện Adafruit, hiện chữ nhiều cỡ, vẽ thanh mức theo điện áp và lưu ý về bộ nhớ RAM.

Mạch hạ áp LM2596 và MP1584: cách chọn, chỉnh điện áp và cấp nguồn ESP32
Mạch hạ áp LM2596 và MP1584: cách chọn, chỉnh điện áp và cấp nguồn ESP32

So sánh mạch hạ áp LM2596 và MP1584, cách chỉnh điện áp ra bằng đồng hồ vạn năng trước khi nối tải, cấp nguồn 5 V cho ESP32 DevKit V1 từ nguồn 12 V và xử lý lỗi thường gặp.

Hướng dẫn bắt đầu MicroPython trên ESP32 Lite với Thonny
Hướng dẫn bắt đầu MicroPython trên ESP32 Lite với Thonny

Hướng dẫn cài driver, cài Thonny và nạp firmware MicroPython cho mạch ESP32 Lite, dùng REPL, nháy LED, lưu main.py, đọc nút nhấn, quét I2C và xử lý lỗi thường gặp.

ESP32 điều khiển servo SG90 bằng PWM, không cần thư viện: quét góc, biến trở, hiệu chỉnh
ESP32 điều khiển servo SG90 bằng PWM, không cần thư viện: quét góc, biến trở, hiệu chỉnh

Hướng dẫn điều khiển servo SG90 bằng ESP32 với bộ PWM LEDC 50 Hz có sẵn: xung 0,5–2,4 ms, sơ đồ nối, quét góc, vặn biến trở, hiệu chỉnh hai đầu hành trình và thí nghiệm STEM.

Hướng dẫn ESP-NOW trên ESP32: truyền dữ liệu giữa hai mạch không cần router Wi-Fi
Hướng dẫn ESP-NOW trên ESP32: truyền dữ liệu giữa hai mạch không cần router Wi-Fi

Hướng dẫn dùng ESP-NOW để hai mạch ESP32 truyền dữ liệu trực tiếp không cần router: xem địa chỉ MAC, chương trình gửi, chương trình nhận, đọc RSSI và xử lý lỗi thường gặp.

Hướng dẫn nạp chương trình cho ESP32 qua Wi-Fi (OTA) bằng Arduino IDE
Hướng dẫn nạp chương trình cho ESP32 qua Wi-Fi (OTA) bằng Arduino IDE

Hướng dẫn bật OTA trên ESP32 bằng thư viện ArduinoOTA có sẵn, nạp chương trình qua Wi-Fi từ Arduino IDE 2.x, đặt mật khẩu và các quy tắc để không mất khả năng cập nhật từ xa.

Hướng dẫn dùng màn hình OLED 1.3 inch SH1106 với ESP32
Hướng dẫn dùng màn hình OLED 1.3 inch SH1106 với ESP32

Hướng dẫn nối màn hình OLED 1.3 inch SH1106 với ESP32 DevKit V1 qua I2C, cài thư viện Adafruit SH110X, chạy code hiển thị chữ và xử lý lỗi thường gặp.


Bình luận
Đã thêm vào giỏ hàng