9장: 음성 대화
이번 장의 목표: 샤오즈 AI 클라우드 서비스에 연결하여 NanoCam과 자연스러운 음성 대화를 진행합니다.
이번 장 안내
이번 장은 XiaoZhi AI 모드(ai_mode:6)를 다룹니다. 중요: 모드 6(음성 대화)과 모드 7(ESP-Claw)은 동일한 펌웨어(nanocam_espclaw/)를 공유하며, 기기 부팅 시 NVS에 저장된 ai_mode 값에 따라 서로 다른 MCP 도구 세트를 로드할 뿐입니다.
| 비교 항목 | XiaoZhi AI (mode 6) | ESP-Claw (mode 7) |
|---|---|---|
| 음성 대화 | ✅ ASR→LLM→TTS | ✅ 동일한 음성 파이프라인 |
| MCP 도구 | 범용 도구(볼륨/사진 촬영 등) | 범용 도구 + 하드웨어 전용 도구 5개 |
| 시각 이해 | self.camera.take_photo | self.camera.inspect_image (멀티모달 비전) |
| LED 제어 | ❌ | ✅ 음성으로 색상 조절 |
| 적용 시나리오 | 범용 AI 대화, 아동 교육 | 하드웨어 제어, 비전 점검, 스마트 홈 |
이번 장은 **XiaoZhi AI(모드 6)**의 음성 대화 핵심 기능에 집중합니다. ESP-Claw의 하드웨어 제어 기능을 알아보려면 11장: ESP-Claw 음성 제어를 읽어 보세요.
원리
NanoCam은 샤오즈 AI 오픈소스 프레임워크를 통합하여 WebSocket / MQTT 프로토콜로 LLM 서버에 연결해 완전한 음성 상호작용 파이프라인을 구현합니다:
사용자 발화 → ES8311 마이크 수집 → Opus 인코딩
→ WebSocket → 클라우드 ASR 음성 인식
→ LLM 대규모 모델이 응답 생성
→ TTS 음성 합성 → Opus 디코딩
→ NS4150B 앰프 → 스피커 재생전이중 설계: 사용자는 AI가 말하는 동안 바로 끼어들 수 있어(barge-in) 실제 사람과의 대화에 가까운 경험을 제공합니다.
하드웨어 요구 사항
이번 장은 오디오 기능을 다루므로 다음 하드웨어가 필요합니다:
NanoCam 코어 보드(ES8311 Codec + AP2718AT 마이크 포함)
NanoCam 베이스 보드(NS4150B 앰프 + CH340K 포함)
스피커(베이스 보드의 스피커 커넥터 VON/VOP에 연결)
코어 보드만으로도 테스트할 수 있습니다(ES8311 헤드폰 출력으로 청취). 마이크는 AP2718AT 아날로그 MEMS 실리콘 마이크이며, C26 직류 차단 커패시터를 통해 ES8311 MIC1P에 연결됩니다.
단계
9.1 XiaoZhi AI 펌웨어 플래싱
XiaoZhi AI는 nanocam_espclaw/ 독립 펌웨어 프로젝트를 사용합니다:
cd nanocam_espclaw
idf.py set-target esp32s3
idf.py build
idf.py -p COMx flash monitor부팅 후 기본값이 XiaoZhi AI 모드입니다.
9.2 xiaozhi.me 클라우드 서비스 연결
NanoCam은 출고 시 기본으로 xiaozhi.me 공식 클라우드 서비스(무료)에 연결되며, 자체 서버 구축이 필요하지 않습니다.
xiaozhi.me에서 계정 등록
기기 전원을 켜면 6자리 활성화 코드가 자동으로 음성 안내됩니다
xiaozhi.me 콘솔에 활성화 코드 입력 → 기기 바인딩
콘솔에서 LLM 모델 선택(Qwen / DeepSeek 등)
활성화는 한 번만 하면 되며, 이후 전원을 켤 때마다 자동으로 연결됩니다.
9.3 첫 대화
안내음이 들리면 대화할 수 있습니다:
나: "你好小智, 오늘 날씨 어때?"
NanoCam: "오늘 날씨를 확인해 드릴게요..."웨이크 워드는 "你好小智"(기본값)입니다.
9.4 자주 쓰는 대화 시나리오
💬 "농담 하나 해줘" → AI 음성 답변
💬 "5분 알람 맞춰줘" → 알람 기능
💬 "지금 몇 시야" → 시간 안내
💬 "경음악 한 곡 틀어줘" → 네트워크로 음악 재생
💬 "블랙홀이 뭐야" → 지식 질의응답자체 구축 서버(선택 사항)
프라이버시 요구가 있거나 자체 LLM을 사용하려는 경우, 샤오즈 AI 오픈소스 서버를 배포할 수 있습니다:
git clone https://github.com/xinnan-tech/xiaozhi-esp32-server
cd xiaozhi-esp32-server
pip install -r requirements.txt
python app.py펌웨어의 서버 주소는 OTA 시스템(sdkconfig의 CONFIG_OTA_URL)을 통해 전달되며, 기기는 전원을 켠 후 자동으로 서버 주소를 요청합니다.
XiaoZhi AI는 샤오즈 AI 오픈소스 서버(WebSocket 사설 프로토콜 + ASR/LLM/TTS 파이프라인)를 사용합니다. ESP-Claw 모드는 이를 기반으로 하며, 시각 분석 기능의 Vision API URL과 token은 MCP 핸드셰이크 단계에서 서버가 전달하므로 펌웨어에서 별도로 구성할 필요가 없습니다.
문제 해결
| 증상 | 가능한 원인 | 해결 |
|---|---|---|
| 소리가 들리지 않음 | 스피커 미연결 | 베이스 보드 스피커 커넥터 확인 |
| 음성 인식 부정확 | 주변 소음이 너무 큼 | 마이크에 가까이 대고 말하기(거리 < 1m) |
| 연결 불가 | WiFi 미설정 | 먼저 시리얼로 연결 설정 sta_ssid:xxx |
| 활성화 코드 없음 | 최초 부팅 미완료 | 30초 기다리면 기기가 자동으로 음성 안내 |
| 답변이 느림 | LLM 서버 지연 | xiaozhi.me에서 더 빠른 모델 선택 또는 자체 서버 구축 |
시리얼 연결 설정 등 전체 명령은 시리얼 프로토콜 매뉴얼을 참조하세요.
다음 장: 10장: AI 비전 이해

