Giới thiệu
Bài 15 tập trung vào starter checklist để bạn bắt đầu tích hợp Xiaozhi AI / voice assistant trên ESP32-S3-DevKitC N16R8 CAM. Mục tiêu là giúp bạn chạy được phiên bản tối thiểu nhưng ổn định, tránh các bẫy phổ biến về nguồn, bộ nhớ, âm thanh và WiFi trước khi mở rộng sang AI nâng cao.
Mục tiêu bài học
Sau bài này, bạn sẽ:
- Hiểu kiến trúc tối thiểu của một voice assistant trên ESP32-S3
- Biết các yêu cầu bắt buộc về PSRAM, mic/I2S, WiFi, nguồn
- Có checklist kiểm tra nhanh trước khi nạp firmware Xiaozhi
- Tránh các lỗi phổ biến: sụt áp, reset ngẫu nhiên, nóng, treo khi stream audio
- Có code test cơ bản để xác nhận phần cứng sẵn sàng
Xiaozhi AI là gì?
Trong series này, Xiaozhi AI được hiểu là một voice assistant tối giản gồm:
- Nhận giọng nói (mic → I2S)
- Gửi audio lên backend (ASR / AI)
- Nhận phản hồi (text / audio)
- Phát lại qua loa (DAC / I2S)
Bài này không đi sâu vào model AI, mà tập trung vào hạ tầng phần cứng + firmware nền để chạy ổn định.
Checklist phần cứng (bắt buộc)
1) Board & bộ nhớ
- Board: ESP32-S3-DevKitC N16R8 CAM
- Flash: 16MB
- PSRAM: 8MB (bắt buộc)
Kiểm tra nhanh:
Serial.printf("PSRAM found: %s | Free PSRAM: %u\n", psramFound() ? "YES" : "NO", ESP.getFreePsram());
Nếu PSRAM không được nhận → không nên tiếp tục.
2) Microphone (I2S)
Yêu cầu tối thiểu:
- Mic I2S (INMP441, ICS-43434, SPH0645…)
- Kết nối I2S RX (WS, BCK, SD)
Lưu ý quan trọng:
- Không dùng mic analog cho Xiaozhi
- Tránh dùng chung GPIO với camera / SD
3) Loa / âm thanh ra
- DAC nội (nếu dùng được)
- Hoặc I2S amplifier (MAX98357A)
Lưu ý:
- Test phát âm thanh trước khi tích hợp AI
- Tránh volume cao gây sụt áp
4) Nguồn cấp (cực kỳ quan trọng)
Khuyến nghị:
- Nguồn 5V ≥ 2A
- Dây USB ngắn, chất lượng tốt
Dấu hiệu nguồn không đạt:
- Reset khi WiFi + audio
- Camera treo khi ghi thẻ
- Âm thanh bị méo
Checklist phần mềm (Arduino / ESP-IDF)
1) Cấu hình cơ bản (Arduino IDE)
- Board: ESP32-S3 Dev Module / DevKitC
- USB CDC on Boot: Enabled
- PSRAM: Enabled
- Partition: Huge APP / Custom
2) Kiểm tra WiFi ổn định
Test nhanh:
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) delay(200);
Serial.println(WiFi.localIP());
Nếu WiFi rớt khi stream audio → cần kiểm tra nguồn.
3) Test mic I2S (input)
Checklist:
- I2S init OK
- Có dữ liệu audio (không toàn 0)
- Không treo sau vài phút
4) Test audio out
- Phát WAV đơn giản
- Không bị rè / drop
- Heap/PSRAM không tụt nhanh
Lỗi thường gặp khi làm voice assistant
Lỗi 1: Thiếu PSRAM
Triệu chứng:
- Crash khi buffer audio
- Reset khi ASR chạy
Giải pháp:
- Kiểm tra PSRAM
- Giảm buffer nếu cần
Lỗi 2: Sụt áp khi WiFi + Audio
Triệu chứng:
- Reset ngẫu nhiên
- Log brownout
Giải pháp:
- Nguồn mạnh hơn
- Giảm volume
Lỗi 3: GPIO xung đột
Triệu chứng:
- Mic không thu
- Camera lỗi ngẫu nhiên
Giải pháp:
- Dùng mapping an toàn (xem Bài 07)
Checklist chạy thử tối thiểu (10 phút)
- Boot board → thấy Serial log
- PSRAM OK
- WiFi connect
- Mic I2S thu được dữ liệu
- Audio out phát OK
Nếu fail ở bước nào → không tích hợp AI tiếp.
Hướng mở rộng tiếp theo
- Wake word (VAD)
- Streaming audio theo chunk
- Tích hợp Xiaozhi backend
- Cá nhân hoá giọng nói
Liên kết trong series
- Bài 07 — Mapping UART/I2C/SPI an toàn
- Bài 12 — WS2812 & nguồn
- Bài 16 — Tối ưu chạy lâu & ổn định


