Arduino IDE 2: tự gợi ý code, quản lý board và thư viện, gỡ lỗi từng bước, log khi không có JTAG

Dùng Arduino IDE 2 hiệu quả: tự gợi ý code, nhảy tới định nghĩa, quản lý board và thư viện, thư mục của IDE, gỡ lỗi từng bước, macro log có mức cho ESP32.

Arduino IDE 2 không chỉ có giao diện mới. Bản này tự gợi ý code khi gõ, nhảy tới nơi định nghĩa hàm, đổi tên biến khắp chương trình, quản lý board và thư viện ở thanh bên, và gỡ lỗi từng bước với bo mạch hỗ trợ. Bài này chỉ những tính năng đáng dùng, file của IDE nằm ở đâu, các cài đặt nên đổi, gỡ lỗi được với bo nào, và khi không có mạch gỡ lỗi thì dùng log thế nào cho hiệu quả. Phần cài gói ESP32 đã có ở bài cài ESP32 vào Arduino IDE 2.

1. Giao diện

Bố cục giao diện Arduino IDE 2: nút nạp, chọn board, thanh bên, gợi ý code, cửa sổ kết quả
Hình minh họa bố cục, bản 2.3.

Khác nhiều nhất so với bản 1.8 là thanh bên trái: Sketchbook, Boards Manager, Library Manager, Debug, Search. Serial Monitor không còn là cửa sổ rời mà nằm ở khung dưới, nhờ đó vẫn sửa code được khi đang xem Serial.

2. Tự gợi ý và điều hướng code

Phần phân tích code dùng clangd, nên cần chọn đúng board trước. Lần đầu mở sketch có thể chờ vài giây tới khi chỉ mục xong. Các việc hay dùng:

  • Gõ Serial. là hiện danh sách hàm kèm tham số.
  • Giữ Ctrl rồi bấm vào tên hàm, hoặc F12, để mở nơi định nghĩa, kể cả trong thư viện. Đây là cách nhanh nhất để biết một hàm thật sự làm gì.
  • F2 đổi tên biến ở mọi nơi, an toàn hơn tìm và thay.
  • Rê chuột vào tên hàm để xem chữ ký. Lỗi cú pháp được gạch đỏ ngay khi gõ.
Bảng phím tắt hay dùng trong Arduino IDE 2
Xem đầy đủ trong menu của IDE.

3. Quản lý board và thư viện

Trong Boards Manager và Library Manager, mỗi mục có ô chọn phiên bản. Khi một dự án cũ đột nhiên lỗi sau cập nhật, quay về phiên bản trước ở đây, không cần cài lại IDE. Muốn dự án dùng lại được sau này, ghi phiên bản gói board và thư viện vào đầu file. Lỗi trùng thư viện xem bài lỗi thư viện Arduino cùng cụm.

Bảng thư mục chứa sketch, gói board, file tạm, cài đặt của Arduino IDE trên Windows
Đường dẫn trên Windows.
Bảng các mục Preferences nên đổi trong Arduino IDE 2
Các mục đáng đổi ngay khi cài xong.

4. Gỡ lỗi từng bước

Gỡ lỗi nghĩa là dừng chương trình ở một dòng, xem biến, chạy từng lệnh. Việc này cần phần cứng hỗ trợ, không phải board nào cũng có.

Bảng khả năng gỡ lỗi trong Arduino IDE 2 theo bo mạch
Theo tài liệu Arduino tra tháng 10/2026.

Với bo hỗ trợ: chọn Sketch → Optimize for Debugging, nạp lại, bấm nút Start Debugging, đặt điểm dừng bằng cách bấm vào lề trái số dòng. Khung Debug hiện biến, ngăn xếp lời gọi, thanh ghi. Bật tối ưu cho gỡ lỗi làm chương trình lớn và chậm hơn, nên tắt khi xong.

ESP32 DevKit thường cần mạch JTAG ngoài nối D12 (TDI), D13 (TCK), D14 (TMS), D15 (TDO), và phần cấu hình trong gói board. Nhiều bạn mới không cần tới mức này. ESP32 DevKit có Serial sẵn, log có kiểm soát giải quyết được phần lớn trường hợp.

5. Log có mức khi không có mạch gỡ lỗi

Thay vì rải Serial.println rồi xóa, dùng macro có mức. Đổi một số là tắt toàn bộ, không phải sửa từng dòng.

// PYWORLD.VN - Macro log theo mức cho Arduino, ESP32: khi không có mạch gỡ lỗi thì in có kiểm soát, tắt là biến mất khỏi chương trình
// PYWORLD.VN - Đổi MUC_LOG: 0 tắt hết, 1 lỗi, 2 thêm thông tin, 3 thêm chi tiết; dòng log có thời gian và số dòng lệnh
// PYWORLD.VN - Đo thời gian in một dòng để thấy log làm chậm chương trình bao nhiêu

#ifndef MUC_LOG
#define MUC_LOG 2
#endif

#define _IN_LOG(muc, ...) \
  do { \
    Serial.printf("[%8lu] %s %d: ", (unsigned long)millis(), muc, __LINE__); \
    Serial.printf(__VA_ARGS__); \
    Serial.println(); \
  } while (0)

#if MUC_LOG >= 1
#define LOGE(...) _IN_LOG("LOI", __VA_ARGS__)
#else
#define LOGE(...) do {} while (0)
#endif

#if MUC_LOG >= 2
#define LOGI(...) _IN_LOG("TIN", __VA_ARGS__)
#else
#define LOGI(...) do {} while (0)
#endif

#if MUC_LOG >= 3
#define LOGD(...) _IN_LOG("CHI", __VA_ARGS__)
#else
#define LOGD(...) do {} while (0)
#endif

const int CHAN_DO = 34;
const int NGUONG_LOI = 3900;
uint32_t soVong = 0;

void setup() {
  Serial.begin(115200);
  delay(300);
  LOGI("Bat dau, MUC_LOG = %d", MUC_LOG);
}

void loop() {
  int gt = analogRead(CHAN_DO);
  soVong++;
  LOGD("Vong %u, gia tri %d", (unsigned)soVong, gt);
  if (gt >= NGUONG_LOI) {
    LOGE("Gia tri qua nguong: %d", gt);
  }
  if (soVong % 1000 == 0) {
    uint32_t dau = micros();
    LOGI("Da chay %u vong", (unsigned)soVong);
    uint32_t mat = micros() - dau;
    Serial.printf("Mot dong log mat %u us\n", (unsigned)mat);
  }
  delay(1);
}
Bảng kích thước chương trình theo mức log
Kết quả biên dịch với gói esp32 3.3.10.

Khi tắt, macro thành khối rỗng nên không tốn gì. Ưu điểm nữa là dòng log tự có thời gian và số dòng, rất tiện để đối chiếu.

Bảng thời gian gửi một dòng log theo tốc độ Serial
Thời gian tính theo số bit truyền.

Log làm thay đổi thời gian của chính chương trình cần gỡ lỗi. Lỗi liên quan đến thời gian có thể biến mất khi thêm log, rồi quay lại khi tắt. Vì vậy trong vòng lặp nhanh, chỉ in mỗi N vòng, hoặc đưa tốc độ Serial lên cao, hoặc đảo một chân GPIO rồi đo bằng máy hiện sóng.

6. Lỗi hay gặp

Bảng lỗi khi dùng Arduino IDE 2 và cách xử lý
Bài dùng Arduino IDE 2.3.6.

Vẽ đồ thị ngay từ Serial xem bài Serial Plotter cùng cụm. Lỗi biên dịch thường gặp xem bài lỗi biên dịch Arduino cùng cụm.


Tin tức liên quan

Hiệu chuẩn cờ lê lực theo ISO 6789: phân loại, dung sai ±4 %, trình tự đo và lỗi khi sử dụng
Hiệu chuẩn cờ lê lực theo ISO 6789: phân loại, dung sai ±4 %, trình tự đo và lỗi khi sử dụng

Cờ lê lực theo ISO 6789-1 và ISO 6789-2: kiểu chỉ thị và kiểu cài đặt, dung sai ±4 %, trình tự hiệu chuẩn ba điểm mười lần đo, ảnh hưởng điểm đặt tay, đầu nối dài và cách bảo quản.

Máy hiện sóng cầm tay cho người mới: volt/div, time/div, kích hoạt, đầu đo x10, đo tín hiệu ESP32
Máy hiện sóng cầm tay cho người mới: volt/div, time/div, kích hoạt, đầu đo x10, đo tín hiệu ESP32

Đọc màn hình máy hiện sóng, chỉnh volt/div, time/div, kích hoạt; dùng và bù đầu đo x10; đo PWM, sóng cosin từ DAC và dội phím nút nhấn của ESP32; an toàn khi đo.

MOSFET: logic-level, điện trở gate, đóng cắt tải dòng lớn bằng PWM của ESP32
MOSFET: logic-level, điện trở gate, đóng cắt tải dòng lớn bằng PWM của ESP32

MOSFET kênh N, kênh P là gì, vì sao chọn MOSFET logic-level cho ESP32 3,3 V, VGS(th) và RDS(on), mạch đóng cắt phía thấp có điện trở gate, PWM và thí nghiệm chỉnh độ sáng dải LED 12 V.

Vali Nhựa Chuyên Dụng – Gia Công Mút Theo Biên Dạng Thiết Bị
Vali Nhựa Chuyên Dụng – Gia Công Mút Theo Biên Dạng Thiết Bị

Dịch vụ chọn vali và gia công mút theo biên dạng thiết bị; vật liệu, kích thước và mức bảo vệ được xác nhận theo từng mẫu cụ thể.

Tìm lỗi mạch điện tử từng bước: quan sát, đo nguồn, chia đôi mạch
Tìm lỗi mạch điện tử từng bước: quan sát, đo nguồn, chia đôi mạch

Trình tự 6 bước tìm lỗi mạch: mô tả triệu chứng, quan sát mối hàn và breadboard, đo nguồn đúng chỗ, chia đôi mạch, đo linh kiện khi tắt điện, lỗi hay gặp với ESP32 và bảng tra theo triệu chứng.

Queue, semaphore, mutex trong FreeRTOS: chia sẻ dữ liệu an toàn giữa các task trên ESP32
Queue, semaphore, mutex trong FreeRTOS: chia sẻ dữ liệu an toàn giữa các task trên ESP32

Vì sao biến dùng chung bị sai trên ESP32 hai nhân, queue chuyển dữ liệu, semaphore để ngắt báo cho task, mutex bảo vệ Serial, thí nghiệm hai nhân cùng tăng một biến.

Đố toán nhanh trên OLED 4 nút với ESP32: trò chơi luyện tính nhẩm cho học sinh
Đố toán nhanh trên OLED 4 nút với ESP32: trò chơi luyện tính nhẩm cho học sinh

Làm máy đố toán nhanh bằng ESP32 và màn hình OLED kèm 4 nút: cộng trừ đến 20, bảng nhân 2–9, 4 đáp án cho 4 nút, đếm câu đúng và thời gian, cách tạo đáp án sai gần đúng.

Thực hành hiệu chuẩn thước điện trở bằng căn mẫu với ADS1115, ESP32: đo tỉ lệ, độ tuyến tính, độ trễ
Thực hành hiệu chuẩn thước điện trở bằng căn mẫu với ADS1115, ESP32: đo tỉ lệ, độ tuyến tính, độ trễ

Hiệu chuẩn thước điện trở 50 mm bằng chồng căn mẫu: ADS1115 đo tỉ lệ, ESP32 ghi điểm đi lên và đi xuống, khớp đa thức, tính sai số tuyến tính, độ trễ và độ không đảm bảo.


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