Hướng dẫn DIY Xiaozhi AI trên breadboard ESP32 classic (không S3/C3)
Làm loa Xiaozhi trên ESP32 4MB: bảng GPIO INMP441/MAX98357A, OLED, ASR-Pro, 4G, LCD ST7789, nạp firmware bread-compact-esp32.
Bài viết dịch và biên soạn từ ESP32 breadboard — Xiaozhi AI (Feishu), thuộc bộ tài liệu DIY Xiaozhi AI.
Tổng quan
Hướng dẫn này dành cho ESP32 classic (không phải ESP32-S3 hay ESP32-C3) — bo phổ biến, rẻ, thường có 4 MB Flash, không PSRAM. Dự án Xiaozhi đã hỗ trợ nhánh breadboard riêng để bạn làm loa AI giá thấp thay vì mua ESP32-S3 đắt hơn.
Firmware tương ứng trong mã nguồn: bread-compact-esp32 (OLED 0.96"), bread-compact-esp32-lcd (LCD ST7789 1.3"), có thêm biến thể 4G và module wake word ASR-Pro.
1. Board và phiên bản firmware
1.1 Board được hỗ trợ
- ESP-32S, ESP32-DevKitC, NodeMCU-32S
- Flash 4 MB SPI (2 MB chưa hỗ trợ)
- Firmware trong nhóm chia sẻ tương thích ngược — bản mới vẫn chạy được kit cơ bản không có phụ kiện nâng cao
1.2 Tính năng mở rộng (phiên bản “cao”)
- Màn OLED 0.96" SSD1306 I2C — đã hỗ trợ
- Module wake ASR-Pro — wake word tùy chỉnh, không khóa model cụ thể; nối PA2 → GPIO19, module cần xung thấp ngắn (~1 giây) tương đương một lần nhấn nút
- 4G ML307 — firmware dual 4G + Wi-Fi; mặc định 4G, nhấn BOOT 2 lần khi màn hình khởi động để chuyển Wi-Fi
- LCD ST7789 1.3" — cả phiên bản 7 chân và 8 chân; tham số xoay màn hình chỉnh trong
config.hkhi build (7 chân thường không cần xoay, 8 chân cần cấu hìnhDISPLAY_SWAP_XY,DISPLAY_MIRROR_*,DISPLAY_OFFSET_*) - TF card, Bluetooth ngoài — đang phát triển
2. Bắt đầu — phần cứng cơ bản
2.1 Linh kiện tối thiểu
- Breadboard, bo ESP32 (4 MB Flash)
- Micro INMP441, module loa MAX98357A
- Loa 3020 (8Ω), dây dupont
- Tùy chọn: OLED 0.96", module ASR-Pro, ML307R, LCD ST7789
2.2 Bảng chân GPIO (bread-compact-esp32)
Trên bo Espressif, chữ G trên sơ đồ tương đương D/GPIO in trên board.
| Module | Chân module | ESP32 GPIO |
|---|---|---|
| INMP441 | WS | GPIO25 |
| SCK | GPIO26 | |
| SD (DIN) | GPIO32 | |
| L/R | GND | |
| VDD | 3.3 V | |
| GND | GND | |
| MAX98357A | DIN (DOUT) | GPIO33 |
| BCLK | GPIO14 | |
| LRCK | GPIO27 | |
| GAIN / SD | không nối | |
| VIN / GND | 3.3 V / GND | |
| OLED I2C | VCC | 3.3 V |
| SCL | GPIO15 | |
| SDA | GPIO4 | |
| Nút | Toggle (boot) | GPIO0 — có sẵn trên board |
| Giữ để nói | GPIO5 | |
| IoT test LED | GPIO12 | |
| ASR-Pro | VCC | 5 V |
| PA2 | GPIO19 |
LCD ST7789 dùng bus SPI — chân cụ thể xem bảng trong tài liệu gốc (P/GPIO trên DevKit). Tham khảo thêm bread-compact-esp32-lcd/config.h trong repo Xiaozhi.
2.3 Nạp firmware
Không có ESP-IDF vẫn nạp được bằng Flash Download Tool của Espressif:
- Tải flash_download_tool
- Mở tool → chọn chip Develop → OK
- Chọn file firmware
.bintại địa chỉ 0x0 - Bấm ERASE xóa firmware cũ (nếu cần)
- Bấm START để nạp
Hoặc dùng Flash Tool web / ESP-Launchpad — chọn board bread-compact-esp32 hoặc bread-compact-esp32-lcd tùy phần cứng.
Sau khi nạp dual 4G+Wi-Fi: nhấn BOOT hai lần lúc khởi động để chuyển sang Wi-Fi, rồi cấu hình Wi-Fi.
3. Biên dịch firmware (ESP-IDF)
Nếu tự sửa mã hoặc đổi wake word / màn hình: cài ESP-IDF, clone xiaozhi-esp32, chọn board bread-compact-esp32 hoặc bread-compact-esp32-lcd, chạy idf.py set-target esp32, idf.py menuconfig (chọn OLED/LCD), rồi idf.py build flash.
4. FAQ
Nạp lỗi / không erase được? Rút board khỏi breadboard đã đấu dây — nạp khi board không cắm trên breadboard đầy linh kiện thường ổn định hơn.
Khác ESP32-S3? Xem loạt bài ESP32-S3 DIY — chân GPIO và firmware khác hoàn toàn.
5. Bo mạch plug-and-play (tùy chọn)
Tác giả tài liệu gốc còn thiết kế bo plug-and-play — cắm trực tiếp ESP32 classic (NodeMCU-32S / GOOUUU / DevKitC), tích hợp sạc pin 14500, jack 3.5 mm, mở rộng ASR-Pro, OLED, 4G, LCD ST7789, RF 433. Kit breadboard ở trên vẫn là cách DIY chuẩn trong repo chính thức Xiaozhi.
- Hỗ trợ wake word ASR-Pro tối ưu môi trường ồn
- Dual 4G + Wi-Fi, pin, LCD 1.3" 7/8 pin, OLED 0.96"
Liên kết
- Đấu dây ESP32-S3 (tham khảo quy trình, khác chân)
- Đổi wake word / P3
- Điều khiển GPIO