硬體組裝指南 - XiaoZhi AI硬體組裝完整教學
🔧 硬體組裝指南
歡迎來到XiaoZhi AI的世界!這份指南將協助您從零開始組裝屬於自己的XiaoZhi AI語音機器人。
📦 必需組件清單
核心組件
組件 | 規格 | 數量 | 參考價格 |
---|---|---|---|
ESP32-S3開發板 | ESP32-S3-DevKitC-1 | 1 | $15-20 |
麥克風 | INMP441 I2S數位麥克風 | 1 | $3-5 |
揚聲器 | 3W 4Ω迷你揚聲器 | 1 | $2-4 |
音訊放大器 | MAX98357A I2S DAC | 1 | $3-5 |
顯示器(選用) | SSD1306 OLED 128x64 | 1 | $4-6 |
麵包板 | 半尺寸 | 1 | $2-3 |
杜邦線 | 公對母 | 1套 | $2-3 |
附加組件
- 🔘 按鈕:輕觸按鈕用於手動喚醒
- 🔋 電源:USB-C線或3.7V電池
- 📦 外殼:3D列印或壓克力外殼
- 🔧 工具:烙鐵、焊錫、螺絲起子
🔌 接線圖
主要ESP32-S3接線圖
ESP32-S3-DevKitC-1
┌─────────────────────────────────┐
│ 3V3 ┌─────────────────┐ GND │
│ EN │ │ IO46 │
│ IO4 │ ESP32-S3 │ IO45 │
│ IO5 │ WiFi │ IO48 │
│ IO6 │ Bluetooth │ IO47 │
│ IO7 │ USB │ IO21 │
│ IO15 │ │ IO20 │
│ IO16 │ │ IO19 │
│ IO17 │ │ IO18 │
│ IO18 └─────────────────┘ IO8 │
│ IO8 IO3 │
│ IO3 IO2 │
│ IO46 IO1 │
│ IO9 IO44 │
│ IO10 IO43 │
│ IO11 IO42 │
│ IO12 IO41 │
│ IO13 IO40 │
│ IO14 IO39 │
│ GND IO38 │
│ IO37 IO37 │
│ IO36 IO36 │
│ IO35 IO35 │
│ IO0 IO26 │
│ IO45 5V │
└─────────────────────────────────┘
INMP441麥克風連接
INMP441 ──────────── ESP32-S3
VDD ──────────── 3.3V
GND ──────────── GND
SD ──────────── IO4 (I2S_DATA)
WS ──────────── IO5 (I2S_WS)
SCK ──────────── IO6 (I2S_SCK)
L/R ──────────── GND (左聲道)
MAX98357A放大器連接
MAX98357A ─────────── ESP32-S3
VIN ─────────── 5V
GND ─────────── GND
DIN ─────────── IO7 (I2S_DATA_OUT)
BCLK ─────────── IO15 (I2S_BCLK)
LRC ─────────── IO16 (I2S_LRC)
OLED顯示器連接(選用)
SSD1306 ──────────── ESP32-S3
VCC ──────────── 3.3V
GND ──────────── GND
SDA ──────────── IO8 (I2C_SDA)
SCL ──────────── IO9 (I2C_SCL)
🔨 逐步組裝
步驟1:準備工作區
- 整理工具:準備烙鐵、焊錫、剝線鉗、螺絲起子
- 防靜電保護:使用防靜電墊或腕帶
- 充足照明:確保工作區域有足夠的照明
- 通風環境:焊接時確保良好的通風
步驟2:組件檢查
// 組件測試程式碼
#include "esp_log.h"
#include "driver/gpio.h"
#include "driver/i2c.h"
void test_gpio_pins() {
// 測試GPIO引腳
gpio_reset_pin(GPIO_NUM_2);
gpio_set_direction(GPIO_NUM_2, GPIO_MODE_OUTPUT);
for(int i = 0; i < 5; i++) {
gpio_set_level(GPIO_NUM_2, 1);
vTaskDelay(500 / portTICK_PERIOD_MS);
gpio_set_level(GPIO_NUM_2, 0);
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
void test_i2c_connection() {
// 測試I2C連接
i2c_config_t conf = {
.mode = I2C_MODE_MASTER,
.sda_io_num = GPIO_NUM_8,
.scl_io_num = GPIO_NUM_9,
.sda_pullup_en = GPIO_PULLUP_ENABLE,
.scl_pullup_en = GPIO_PULLUP_ENABLE,
.master.clk_speed = 100000,
};
i2c_param_config(I2C_NUM_0, &conf);
i2c_driver_install(I2C_NUM_0, conf.mode, 0, 0, 0);
ESP_LOGI("TEST", "I2C初始化成功");
}
步驟3:焊接連接
焊接INMP441麥克風
- 準備導線:剝除導線兩端2-3mm的絕緣層
- 鍍錫焊盤:在接觸墊上塗一層薄薄的焊錫
- 焊接連接:
紅線 (VDD) → ESP32-S3 3.3V 黑線 (GND) → ESP32-S3 GND 藍線 (SD) → ESP32-S3 GPIO4 綠線 (WS) → ESP32-S3 GPIO5 黃線 (SCK) → ESP32-S3 GPIO6
- 檢查連接:使用萬用電表檢查導通性
焊接音訊放大器
// I2S音訊輸出配置
#define I2S_NUM I2S_NUM_0
#define I2S_BCK_PIN 15
#define I2S_WS_PIN 16
#define I2S_DATA_PIN 7
i2s_config_t i2s_config = {
.mode = I2S_MODE_MASTER | I2S_MODE_TX,
.sample_rate = 44100,
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
.communication_format = I2S_COMM_FORMAT_STAND_I2S,
.tx_desc_auto_clear = true,
.dma_desc_num = 8,
.dma_frame_num = 64,
.use_apll = false,
.tx_chan_mod = 0,
.rx_chan_mod = 1,
};
步驟4:麵包板組裝
- 佈局組件:將ESP32-S3放在麵包板中央
- 放置週邊:安排麥克風、放大器和顯示器
- 電源匯流排:建立3.3V和GND電源軌
- 訊號連接:使用不同顏色的導線連接各種訊號
步驟5:連接測試
// 綜合系統測試
void system_test() {
ESP_LOGI("TEST", "開始系統測試...");
// 1. 測試麥克風
if(test_microphone()) {
ESP_LOGI("TEST", "✅ 麥克風正常");
} else {
ESP_LOGE("TEST", "❌ 麥克風錯誤");
}
// 2. 測試揚聲器
if(test_speaker()) {
ESP_LOGI("TEST", "✅ 揚聲器正常");
} else {
ESP_LOGE("TEST", "❌ 揚聲器錯誤");
}
// 3. 測試顯示器
if(test_display()) {
ESP_LOGI("TEST", "✅ 顯示器正常");
} else {
ESP_LOGE("TEST", "❌ 顯示器錯誤");
}
// 4. 測試WiFi
if(test_wifi()) {
ESP_LOGI("TEST", "✅ WiFi正常");
} else {
ESP_LOGE("TEST", "❌ WiFi錯誤");
}
}
🐛 故障排除
常見問題與解決方案
1. 電源問題
症狀:裝置無法開機
檢查:
- 確認USB-C線正確連接
- 檢查3.3V和5V引腳電壓
- 確認無短路
解決方案:
- 使用優質USB線
- 檢查電源供應(最少2A)
- 重新檢查所有電源連接
2. 音訊問題
// 音訊系統除錯
void debug_audio_system() {
// 檢查I2S配置
ESP_LOGI("AUDIO", "檢查I2S驅動程式...");
esp_err_t ret = i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
if (ret != ESP_OK) {
ESP_LOGE("AUDIO", "I2S驅動程式安裝失敗:%s", esp_err_to_name(ret));
return;
}
// 產生測試音
generate_test_tone(440); // 440Hz音調
}
3. WiFi問題
void debug_wifi_connection() {
wifi_config_t wifi_config = {};
strcpy((char*)wifi_config.sta.ssid, "your_wifi_ssid");
strcpy((char*)wifi_config.sta.password, "your_wifi_password");
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
ESP_ERROR_CHECK(esp_wifi_start());
// 等待連接
xEventGroupWaitBits(wifi_event_group, WIFI_CONNECTED_BIT,
false, true, portMAX_DELAY);
ESP_LOGI("WIFI", "✅ WiFi已連接");
}
除錯工具
序列監視器
# 監控除錯輸出
idf.py monitor
# 按級別過濾記錄
idf.py monitor | grep "ERROR\|WARN"
WiFi掃描器
void wifi_scan() {
uint16_t number = DEFAULT_SCAN_LIST_SIZE;
wifi_ap_record_t ap_info[DEFAULT_SCAN_LIST_SIZE];
esp_wifi_scan_start(NULL, true);
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info));
for (int i = 0; (i < DEFAULT_SCAN_LIST_SIZE) && (i < number); i++) {
ESP_LOGI("SCAN", "SSID \t\t%s", ap_info[i].ssid);
ESP_LOGI("SCAN", "RSSI \t\t%d", ap_info[i].rssi);
ESP_LOGI("SCAN", "頻道 \t\t%d\n", ap_info[i].primary);
}
}
🎨 外殼製作
外殼選項
1. 3D列印
材料:PLA/PETG塑料
列印時間:6-8小時
成本:$3-5
STL檔案可在以下取得:
- GitHub:github.com/xiaozhidev/xiaozhi-hardware
- Thingiverse:thingiverse.com/xiaozhi-case
2. 壓克力外殼
材料:透明壓克力3mm
尺寸:120mm x 80mm x 50mm
固定:M3螺絲和立柱
優勢:
- 透明度可觀察組件
- 易於加工
- 專業外觀
3. 紙板原型
材料:厚紙板
工具:美工刀、尺規、膠水
製作時間:1-2小時
適合:
- 第一個原型
- 測試尺寸
- 預算方案
📐 尺寸與規格
組件尺寸
主板ESP32-S3:25.4mm x 53.5mm
INMP441麥克風:9.5mm x 7.6mm x 3.5mm
MAX98357A放大器:19.6mm x 19.6mm
OLED顯示器:27mm x 27mm x 4.5mm
建議外殼:120mm x 80mm x 50mm
技術規格
參數 | 數值 |
---|---|
供電電壓 | 5V USB / 3.3V-4.2V電池 |
耗電量 | 150mA(活動模式)/ 5mA(睡眠) |
Wi-Fi範圍 | 802.11 b/g/n, 2.4GHz |
藍牙範圍 | BLE 5.0,最遠10公尺 |
工作溫度 | -20°C至+85°C |
濕度 | 10% - 90%(無結露) |
🔧 最佳化技巧
電磁相容性(EMC)
// 降低電磁干擾的配置
void optimize_emc() {
// 降低WiFi功率
esp_wifi_set_max_tx_power(44); // 從78降至44(0.25dB步進)
// 最佳化CPU頻率
esp_pm_config_esp32s3_t pm_config = {
.max_freq_mhz = 160, // 從240MHz降低
.min_freq_mhz = 40, // 最低頻率
.light_sleep_enable = true
};
esp_pm_configure(&pm_config);
}
散熱管理
void thermal_management() {
// 監控晶片溫度
float temperature = esp_temperature_sensor_get_celsius();
if(temperature > 70.0) {
ESP_LOGW("THERMAL", "高溫:%.1f°C", temperature);
// 降低效能
esp_pm_config_esp32s3_t pm_config = {
.max_freq_mhz = 80, // 降低頻率
.min_freq_mhz = 20,
.light_sleep_enable = true
};
esp_pm_configure(&pm_config);
}
}
🎯 總結
恭喜!您已經成功組裝了XiaoZhi AI語音機器人。現在您可以:
- 載入韌體 從XiaoZhi儲存庫
- 設定Wi-Fi 連接
- 測試語音指令
- 配置AI整合
下一步
取得支援
- 📧 技術支援:[email protected]
- 💬 開發者社群:[Telegram群組]
- 📖 文件:https://xiaozhi.dev/docs
- 🔧 GitHub Issues:https://github.com/xiaozhidev/xiaozhi-firmware
準備就緒! 您的XiaoZhi AI已準備好進行設定和使用。享受與人工智慧一起創造的樂趣!