IoTLabs

Nghiên cứu, Sáng tạo và Thử nghiệm

ESP32 Board Checker: Code kiểm tra thông số kỹ thuật board ESP32 các loại

Khi mới mua một board ESP32, đặc biệt là các dòng như ESP32 DevKit, ESP32-C3, ESP32-S3, ESP32-S3 N16R8, bạn không nên chỉ nhìn vào tên in trên hộp hoặc thông tin người bán cung cấp. Trong thực tế, có nhiều trường hợp board được quảng cáo là có 16MB Flash, 8MB PSRAM, hỗ trợ WiFi/BLE, nhưng khi kiểm tra thực tế lại không đúng như mô tả.

Vì vậy, trước khi bắt đầu phát triển dự án IoT, camera, gateway, BLE sensor node hay MQTT device, bạn nên upload một đoạn code kiểm tra nhanh để xác nhận thông số kỹ thuật cơ bản của board.

Bài viết này sẽ hướng dẫn bạn tạo một chương trình đơn giản để kiểm tra:

  • Loại chip ESP32 đang sử dụng
  • Số core CPU
  • Chip revision
  • Dung lượng Flash
  • Tốc độ Flash
  • Chế độ Flash
  • Dung lượng RAM/Heap
  • Board có PSRAM hay không
  • Dung lượng PSRAM
  • Địa chỉ MAC WiFi
  • Tính năng WiFi, Bluetooth, BLE
  • Phiên bản ESP-IDF / Arduino Core

Video kiểm tra thông số kỹ thuật board ESP32

Vì sao cần kiểm tra board ESP32 sau khi mua?

Nhiều board ESP32 có ngoại hình khá giống nhau, nhưng thông số bên trong lại khác biệt rất lớn. Ví dụ:

  • ESP32 thường có 2 core, WiFi và Bluetooth Classic/BLE.
  • ESP32-C3 thường chỉ có 1 core, hỗ trợ WiFi và BLE, nhưng không có Bluetooth Classic.
  • ESP32-S3 thường có 2 core, hỗ trợ WiFi/BLE, thường được dùng cho AIoT, camera, display và các ứng dụng cần PSRAM.
  • Một số board ESP32-S3 có mã như N16R8, nghĩa là thường có 16MB Flash8MB PSRAM.

Nếu bạn chọn sai board trong Arduino IDE hoặc board không đúng như mô tả, chương trình có thể gặp lỗi như:

  • Không nhận camera
  • Không đủ bộ nhớ để chạy web server
  • Không đủ PSRAM cho xử lý hình ảnh
  • Upload được nhưng chạy không ổn định
  • Flash size hiển thị sai
  • Chương trình bị reset liên tục

Do đó, kiểm tra thông số board là bước rất quan trọng trước khi bắt đầu dự án.

Chuẩn bị

Bạn cần chuẩn bị:

  • Một board ESP32 / ESP32-C3 / ESP32-S3
  • Cáp USB có hỗ trợ truyền dữ liệu
  • Arduino IDE hoặc PlatformIO
  • ESP32 Arduino Core đã được cài đặt
  • Serial Monitor ở baudrate 115200

Nếu dùng Arduino IDE, bạn cần chọn đúng board tương ứng, ví dụ:

ESP32 Dev Module
ESP32C3 Dev Module
ESP32S3 Dev Module

Nếu dùng ESP32-S3 có PSRAM, bạn nên kiểm tra thêm phần cấu hình PSRAM trong Arduino IDE, ví dụ:

PSRAM: OPI PSRAM / Enabled
Flash Size: 16MB
Partition Scheme: phù hợp với dung lượng flash

Code kiểm tra thông số kỹ thuật ESP32

Bạn có thể copy toàn bộ code dưới đây vào Arduino IDE hoặc PlatformIO.

#include <Arduino.h>
#include "esp_system.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "esp_mac.h"

void printLine() {
  Serial.println("--------------------------------------------------");
}

String getChipModelName(esp_chip_model_t model) {
  switch (model) {
    case CHIP_ESP32:
      return "ESP32";
    case CHIP_ESP32S2:
      return "ESP32-S2";
    case CHIP_ESP32S3:
      return "ESP32-S3";
    case CHIP_ESP32C3:
      return "ESP32-C3";
    case CHIP_ESP32C2:
      return "ESP32-C2";
    case CHIP_ESP32C6:
      return "ESP32-C6";
    case CHIP_ESP32H2:
      return "ESP32-H2";
    default:
      return "Unknown ESP32";
  }
}

void printMacAddress() {
  uint8_t mac[6];

  esp_read_mac(mac, ESP_MAC_WIFI_STA);

  Serial.print("WiFi STA MAC       : ");
  for (int i = 0; i < 6; i++) {
    if (i > 0) Serial.print(":");
    if (mac[i] < 16) Serial.print("0");
    Serial.print(mac[i], HEX);
  }
  Serial.println();
}

void printChipInfo() {
  esp_chip_info_t chip_info;
  esp_chip_info(&chip_info);

  printLine();
  Serial.println("[CHIP INFO]");

  Serial.print("Chip Model         : ");
  Serial.println(getChipModelName(chip_info.model));

  Serial.print("Chip Revision      : ");
  Serial.println(chip_info.revision);

  Serial.print("CPU Cores          : ");
  Serial.println(chip_info.cores);

  Serial.print("Features           : ");

  if (chip_info.features & CHIP_FEATURE_WIFI_BGN) {
    Serial.print("WiFi ");
  }

  if (chip_info.features & CHIP_FEATURE_BT) {
    Serial.print("BT ");
  }

  if (chip_info.features & CHIP_FEATURE_BLE) {
    Serial.print("BLE ");
  }

  if (chip_info.features & CHIP_FEATURE_EMB_FLASH) {
    Serial.print("Embedded-Flash ");
  }

  if (chip_info.features & CHIP_FEATURE_EMB_PSRAM) {
    Serial.print("Embedded-PSRAM ");
  }

  Serial.println();

  Serial.print("CPU Frequency      : ");
  Serial.print(getCpuFrequencyMhz());
  Serial.println(" MHz");
}

void printMemoryInfo() {
  printLine();
  Serial.println("[MEMORY INFO]");

  Serial.print("Free Heap          : ");
  Serial.print(ESP.getFreeHeap());
  Serial.println(" bytes");

  Serial.print("Total Heap         : ");
  Serial.print(ESP.getHeapSize());
  Serial.println(" bytes");

  Serial.print("Min Free Heap      : ");
  Serial.print(ESP.getMinFreeHeap());
  Serial.println(" bytes");

  Serial.print("Max Alloc Heap     : ");
  Serial.print(ESP.getMaxAllocHeap());
  Serial.println(" bytes");

  Serial.print("PSRAM Detected     : ");
  Serial.println(psramFound() ? "YES" : "NO");

  if (psramFound()) {
    Serial.print("PSRAM Size         : ");
    Serial.print(ESP.getPsramSize());
    Serial.println(" bytes");

    Serial.print("Free PSRAM         : ");
    Serial.print(ESP.getFreePsram());
    Serial.println(" bytes");
  }
}

void printFlashInfo() {
  printLine();
  Serial.println("[FLASH INFO]");

  uint32_t flash_size = 0;
  esp_flash_get_size(NULL, &flash_size);

  Serial.print("Flash Size         : ");
  Serial.print(flash_size / (1024 * 1024));
  Serial.println(" MB");

  Serial.print("Sketch Size        : ");
  Serial.print(ESP.getSketchSize());
  Serial.println(" bytes");

  Serial.print("Free Sketch Space  : ");
  Serial.print(ESP.getFreeSketchSpace());
  Serial.println(" bytes");

  Serial.print("Flash Chip Speed   : ");
  Serial.print(ESP.getFlashChipSpeed() / 1000000);
  Serial.println(" MHz");

  Serial.print("Flash Chip Mode    : ");
  FlashMode_t mode = ESP.getFlashChipMode();

  switch (mode) {
    case FM_QIO:
      Serial.println("QIO");
      break;
    case FM_QOUT:
      Serial.println("QOUT");
      break;
    case FM_DIO:
      Serial.println("DIO");
      break;
    case FM_DOUT:
      Serial.println("DOUT");
      break;
    default:
      Serial.println("UNKNOWN");
      break;
  }
}

void printSdkInfo() {
  printLine();
  Serial.println("[SDK / BUILD INFO]");

  Serial.print("ESP-IDF Version    : ");
  Serial.println(esp_get_idf_version());

  Serial.print("Arduino Core       : ");
#ifdef ESP_ARDUINO_VERSION
  Serial.println(ESP_ARDUINO_VERSION);
#else
  Serial.println("Unknown");
#endif
}

void printBoardCheckGuide() {
  printLine();
  Serial.println("[CHECK GUIDE]");
  Serial.println("1. Compare Chip Model with seller description.");
  Serial.println("2. Compare Flash Size: common values are 4MB, 8MB, 16MB.");
  Serial.println("3. Check PSRAM: ESP32-S3 N16R8 usually has 8MB PSRAM.");
  Serial.println("4. Check CPU Frequency: common ESP32 value is 240 MHz.");
  Serial.println("5. Check WiFi / BLE support depending on board type.");
  Serial.println("6. Save this serial log as proof when comparing boards.");
}

void setup() {
  Serial.begin(115200);
  delay(1500);

  Serial.println();
  Serial.println("ESP32 BOARD TECHNICAL CHECK TOOL");
  Serial.println("Use this tool to verify a new ESP32 board.");
  Serial.println();

  printChipInfo();
  printFlashInfo();
  printMemoryInfo();
  printMacAddress();
  printSdkInfo();
  printBoardCheckGuide();

  printLine();
  Serial.println("Check completed.");
}

void loop() {
  delay(5000);
}

Cách upload code bằng Arduino IDE

Bạn làm theo các bước sau:

  1. Mở Arduino IDE.
  2. Tạo sketch mới.
  3. Copy code ở trên vào file sketch.
  4. Chọn đúng board ESP32 đang sử dụng.
  5. Chọn đúng cổng COM/USB.
  6. Bấm Upload.
  7. Mở Serial Monitor.
  8. Chọn baudrate 115200.
  9. Xem kết quả hiển thị.

Nếu board cần giữ nút BOOT khi upload, hãy nhấn giữ BOOT trong lúc Arduino IDE bắt đầu upload, sau đó thả ra khi quá trình upload bắt đầu chạy.

Ví dụ kết quả Serial Monitor

Sau khi upload thành công, bạn sẽ thấy kết quả tương tự như sau:

ESP32 BOARD TECHNICAL CHECK TOOL
Use this tool to verify a new ESP32 board.

--------------------------------------------------
[CHIP INFO]
Chip Model         : ESP32-S3
Chip Revision      : 0
CPU Cores          : 2
Features           : WiFi BLE Embedded-PSRAM
CPU Frequency      : 240 MHz

--------------------------------------------------
[FLASH INFO]
Flash Size         : 16 MB
Sketch Size        : 312000 bytes
Free Sketch Space  : 1300000 bytes
Flash Chip Speed   : 80 MHz
Flash Chip Mode    : QIO

--------------------------------------------------
[MEMORY INFO]
Free Heap          : 300000 bytes
Total Heap         : 390000 bytes
Min Free Heap      : 280000 bytes
Max Alloc Heap     : 250000 bytes
PSRAM Detected     : YES
PSRAM Size         : 8388608 bytes
Free PSRAM         : 8300000 bytes

WiFi STA MAC       : AA:BB:CC:DD:EE:FF

--------------------------------------------------
[SDK / BUILD INFO]
ESP-IDF Version    : v5.x.x
Arduino Core       : 3.x.x

--------------------------------------------------
[CHECK GUIDE]
1. Compare Chip Model with seller description.
2. Compare Flash Size: common values are 4MB, 8MB, 16MB.
3. Check PSRAM: ESP32-S3 N16R8 usually has 8MB PSRAM.
4. Check CPU Frequency: common ESP32 value is 240 MHz.
5. Check WiFi / BLE support depending on board type.
6. Save this serial log as proof when comparing boards.
--------------------------------------------------
Check completed.

Cách đọc các thông số quan trọng

1. Chip Model

Thông số này cho biết board của bạn đang dùng dòng chip nào.

Ví dụ:

Chip Model : ESP32-S3

Nếu người bán ghi là ESP32-S3 nhưng kết quả lại hiện ESP32-C3 hoặc ESP32 thường, bạn cần kiểm tra lại board hoặc thông tin sản phẩm.

2. CPU Cores

Một số dòng ESP32 phổ biến có số core khác nhau:

Dòng chipSố core thường gặp
ESP322 core
ESP32-S32 core
ESP32-C31 core
ESP32-C61 core
ESP32-S21 core

Nếu bạn cần chạy nhiều tác vụ như camera, web server, MQTT, BLE, display, việc biết số core CPU rất quan trọng.

3. Flash Size

Flash là bộ nhớ dùng để lưu firmware, file hệ thống, web UI, certificate hoặc dữ liệu cấu hình.

Các dung lượng phổ biến:

Flash SizeÝ nghĩa
4MBĐủ cho nhiều project cơ bản
8MBTốt hơn cho project có web UI hoặc OTA
16MBPhù hợp project lớn, camera, OTA, filesystem

Ví dụ:

Flash Size : 16 MB

Nếu bạn mua board được quảng cáo là N16 nhưng kết quả chỉ hiện 4MB, có thể do một trong các nguyên nhân sau:

  • Chọn sai board trong Arduino IDE
  • Chọn sai Flash Size
  • Board không đúng như mô tả
  • Firmware/partition cấu hình chưa đúng

4. PSRAM Detected

PSRAM là RAM mở rộng bên ngoài, rất quan trọng với các ứng dụng như:

  • Camera streaming
  • Xử lý ảnh
  • Web server nặng
  • Buffer dữ liệu lớn
  • Display UI
  • AIoT
  • Audio processing

Ví dụ board ESP32-S3 N16R8 thường được hiểu là:

N16 = 16MB Flash
R8  = 8MB PSRAM

Kết quả mong muốn:

PSRAM Detected : YES
PSRAM Size     : 8388608 bytes

8388608 bytes tương đương khoảng 8MB PSRAM.

Nếu kết quả là:

PSRAM Detected : NO

Bạn nên kiểm tra lại:

  • Board có thật sự hỗ trợ PSRAM không
  • Đã bật PSRAM trong Arduino IDE chưa
  • Đã chọn đúng dòng board ESP32-S3 chưa
  • Board có lỗi phần cứng không

5. Flash Chip Speed và Flash Mode

Ví dụ:

Flash Chip Speed : 80 MHz
Flash Chip Mode  : QIO

Thông số này cho biết cách ESP32 giao tiếp với chip flash. Một số mode thường gặp:

ModeÝ nghĩa
QIOQuad I/O, tốc độ cao
QOUTQuad Output
DIODual I/O, tương thích tốt
DOUTDual Output

Nếu board chạy không ổn định, bạn có thể thử đổi Flash Mode từ QIO sang DIO trong Arduino IDE để tăng độ tương thích.

6. WiFi / BLE / BT

Ở mục Features, bạn có thể thấy các tính năng như:

Features : WiFi BT BLE

Hoặc với một số dòng chip:

Features : WiFi BLE

Lưu ý: không phải dòng ESP32 nào cũng có Bluetooth Classic. Ví dụ ESP32-C3 và ESP32-S3 thường hỗ trợ BLE nhưng không giống hoàn toàn ESP32 classic về Bluetooth.

7. WiFi STA MAC

Địa chỉ MAC là định danh duy nhất của WiFi interface.

Ví dụ:

WiFi STA MAC : AA:BB:CC:DD:EE:FF

Bạn có thể dùng MAC address để:

  • Định danh thiết bị trong hệ thống IoT
  • Gán device ID
  • Đăng ký thiết bị lên cloud
  • Kiểm tra board có WiFi hoạt động không

Checklist kiểm tra board ESP32 mới mua

Bạn có thể dùng checklist sau để kiểm tra nhanh:

Mục kiểm traKết quả mong muốn
Chip ModelĐúng với mô tả người bán
CPU CoresĐúng với dòng chip
Flash SizeĐúng 4MB / 8MB / 16MB như quảng cáo
PSRAMCó nếu board được quảng cáo có PSRAM
WiFiCó hiển thị trong Features
BLECó hiển thị nếu board hỗ trợ BLE
MAC AddressCó địa chỉ hợp lệ
Serial logKhông reset liên tục
Upload codeUpload ổn định
Nhiệt độ boardKhông quá nóng bất thường khi chỉ chạy test cơ bản

Gợi ý kiểm tra ESP32-S3 N16R8

Nếu bạn mua board có thông tin như:

ESP32-S3 N16R8

Bạn nên kỳ vọng kết quả gần giống như sau:

Chip Model     : ESP32-S3
CPU Cores      : 2
Flash Size     : 16 MB
PSRAM Detected : YES
PSRAM Size     : 8388608 bytes
CPU Frequency  : 240 MHz
Features       : WiFi BLE

Nếu thiếu PSRAM hoặc Flash không đúng 16MB, hãy kiểm tra lại cấu hình trong Arduino IDE trước khi kết luận board sai.

Một số lỗi thường gặp khi kiểm tra board ESP32

Lỗi 1: Không upload được code

Nguyên nhân có thể là:

  • Cáp USB chỉ hỗ trợ sạc, không hỗ trợ data
  • Chưa chọn đúng cổng COM
  • Chưa cài driver USB to UART
  • Cần nhấn giữ nút BOOT khi upload
  • Board đang bị chiếm cổng Serial bởi phần mềm khác

Cách xử lý:

  • Đổi cáp USB khác
  • Đổi cổng USB
  • Cài driver CH340 / CP210x nếu cần
  • Giữ BOOT khi upload
  • Đóng Serial Monitor trước khi upload

Lỗi 2: Serial Monitor không hiển thị gì

Bạn cần kiểm tra:

  • Baudrate đã chọn đúng 115200 chưa
  • Code đã upload thành công chưa
  • Board có bị treo không
  • Đã bấm nút RESET sau khi mở Serial Monitor chưa

Lỗi 3: PSRAM không được nhận

Nếu board có PSRAM nhưng code báo NO, hãy kiểm tra:

  • Đã chọn đúng board ESP32-S3 chưa
  • Đã bật PSRAM chưa
  • Flash/PSRAM mode có đúng không
  • Board có đúng phiên bản N8R8/N16R8 không

Với ESP32-S3, nếu cấu hình PSRAM sai, một số project camera có thể báo lỗi hoặc không khởi tạo được camera.

Lỗi 4: Flash Size hiển thị không đúng

Nguyên nhân thường gặp:

  • Arduino IDE đang chọn sai Flash Size
  • Board package chưa phù hợp
  • Partition scheme chưa đúng
  • Board thực tế không đúng như thông tin quảng cáo

Bạn nên thử chọn lại board, flash size và upload lại chương trình kiểm tra.

Khi nào cần kiểm tra kỹ hơn?

Bạn nên kiểm tra kỹ board nếu chuẩn bị làm các dự án sau:

  • ESP32 Camera Web Server
  • ESP32-S3 OV5640 / OV2640 Camera
  • ESP32 MQTT Gateway
  • BLE Sensor Node
  • ESP32 Gateway kết nối nhiều sensor
  • ESP32 chạy màn hình TFT/LVGL
  • ESP32 lưu dữ liệu offline
  • ESP32 OTA firmware update
  • ESP32 gửi dữ liệu lên IoT Cloud

Các dự án này thường yêu cầu đúng flash, đúng PSRAM và cấu hình board ổn định.

Kết luận

Việc kiểm tra thông số kỹ thuật board ESP32 sau khi mua là một bước nhỏ nhưng rất quan trọng. Chỉ với một đoạn code đơn giản, bạn có thể xác nhận board có đúng loại chip, đúng dung lượng flash, có PSRAM hay không, hỗ trợ WiFi/BLE ra sao và có hoạt động ổn định không.

Đặc biệt với các board như ESP32-S3 N16R8, việc kiểm tra Flash và PSRAM là rất cần thiết trước khi dùng cho camera, web server, gateway hoặc các ứng dụng IoT phức tạp.

Bạn nên lưu lại Serial log sau khi kiểm tra để so sánh với thông tin người bán hoặc dùng làm tài liệu kỹ thuật cho dự án sau này.

Tóm tắt nhanh

  • Dùng code trên để kiểm tra board ESP32 mới mua.
  • Mở Serial Monitor ở baudrate 115200.
  • Kiểm tra Chip Model, Flash Size, PSRAM, CPU Cores, WiFi/BLE và MAC Address.
  • Với ESP32-S3 N16R8, nên thấy 16MB Flash và 8MB PSRAM.
  • Nếu thông số sai, hãy kiểm tra lại cấu hình Arduino IDE trước khi kết luận board lỗi.