硬體組裝指南 - XiaoZhi AI硬體組裝完整教學

硬體組裝指南 - XiaoZhi AI硬體組裝完整教學

🔧 硬體組裝指南

歡迎來到XiaoZhi AI的世界!這份指南將協助您從零開始組裝屬於自己的XiaoZhi AI語音機器人。

📦 必需組件清單

核心組件

組件規格數量參考價格
ESP32-S3開發板ESP32-S3-DevKitC-11$15-20
麥克風INMP441 I2S數位麥克風1$3-5
揚聲器3W 4Ω迷你揚聲器1$2-4
音訊放大器MAX98357A I2S DAC1$3-5
顯示器(選用)SSD1306 OLED 128x641$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:準備工作區

  1. 整理工具:準備烙鐵、焊錫、剝線鉗、螺絲起子
  2. 防靜電保護:使用防靜電墊或腕帶
  3. 充足照明:確保工作區域有足夠的照明
  4. 通風環境:焊接時確保良好的通風

步驟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麥克風

  1. 準備導線:剝除導線兩端2-3mm的絕緣層
  2. 鍍錫焊盤:在接觸墊上塗一層薄薄的焊錫
  3. 焊接連接
    紅線 (VDD) → ESP32-S3 3.3V
    黑線 (GND) → ESP32-S3 GND
    藍線 (SD)   → ESP32-S3 GPIO4
    綠線 (WS)   → ESP32-S3 GPIO5
    黃線 (SCK)  → ESP32-S3 GPIO6
  4. 檢查連接:使用萬用電表檢查導通性

焊接音訊放大器

// 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:麵包板組裝

  1. 佈局組件:將ESP32-S3放在麵包板中央
  2. 放置週邊:安排麥克風、放大器和顯示器
  3. 電源匯流排:建立3.3V和GND電源軌
  4. 訊號連接:使用不同顏色的導線連接各種訊號

步驟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語音機器人。現在您可以:

  1. 載入韌體 從XiaoZhi儲存庫
  2. 設定Wi-Fi 連接
  3. 測試語音指令
  4. 配置AI整合

下一步

取得支援

  • 📧 技術支援:[email protected]
  • 💬 開發者社群:[Telegram群組]
  • 📖 文件:https://xiaozhi.dev/docs
  • 🔧 GitHub Issues:https://github.com/xiaozhidev/xiaozhi-firmware
準備就緒! 您的XiaoZhi AI已準備好進行設定和使用。享受與人工智慧一起創造的樂趣!