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 Flash và 8MB 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:
- Mở Arduino IDE.
- Tạo sketch mới.
- Copy code ở trên vào file sketch.
- Chọn đúng board ESP32 đang sử dụng.
- Chọn đúng cổng COM/USB.
- Bấm Upload.
- Mở Serial Monitor.
- Chọn baudrate 115200.
- 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 chip | Số core thường gặp |
|---|---|
| ESP32 | 2 core |
| ESP32-S3 | 2 core |
| ESP32-C3 | 1 core |
| ESP32-C6 | 1 core |
| ESP32-S2 | 1 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 |
| 8MB | Tốt hơn cho project có web UI hoặc OTA |
| 16MB | Phù 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 |
|---|---|
| QIO | Quad I/O, tốc độ cao |
| QOUT | Quad Output |
| DIO | Dual I/O, tương thích tốt |
| DOUT | Dual 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 tra | Kế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 |
| PSRAM | Có nếu board được quảng cáo có PSRAM |
| WiFi | Có hiển thị trong Features |
| BLE | Có hiển thị nếu board hỗ trợ BLE |
| MAC Address | Có địa chỉ hợp lệ |
| Serial log | Không reset liên tục |
| Upload code | Upload ổn định |
| Nhiệt độ board | Khô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.


