프로젝트 아키텍처 및 하드웨어 구성
이 프로젝트는 클라우드 기반의 자동 음성 인식(ASR) 기술을 활용하여 IoT 기기를 제어하는 스마트 스피커 시스템입니다. 상용 제품인 AI 스피커와 유사한 기능을 제공하며, 다음과 같은 하드웨어 모듈로 구성됩니다.
- 메인 컨트롤러: STM32F407 (ARM Cortex-M4 기반의 고성능 마이크로컨트롤러)
- 오디오 코덱: WM8978 (아날로그-디지털 및 디지털-아날로그 변환 담당)
- 무선 통신: ESP8266 (Wi-Fi 네트워크 연결 및 클라우드 데이터 전송)
- 스토리지: 마이크로 SD 카드 (음성 녹음 데이터 및 로컬 오디오 파일 저장)
개발 환경 설정 및 소스 코드 준비
펌웨어를 개발하고 빌드하기 위해 STM32를 지원하는 IDE(예: Keil MDK, STM32CubeIDE)와 RTOS 및 파일 시스템 라이브러리가 필요합니다.
1. 소스 코드 다운로드
터미널을 열고 Git을 사용하여 프로젝트 리포지토리를 로컬 환경으로 클론합니다.
git clone https://github.com/lovelyterry/SmartSpeaker.git
cd SmartSpeaker
2. 네트워크 및 클라우드 API 설정
기존의 단순 매크로 정의 방식 대신, 구조체를 활용하여 Wi-Fi 자격 증명과 클라우드 음성 인식 서비스의 인증 토큰을 관리하도록 코드를 리팩토링했습니다. network_config.c 및 cloud_asr.c 파일을 열어 실제 환경에 맞게 값을 수정합니다.
Wi-Fi 네트워크 설정 (network_config.c)
#include "network_config.h"
typedef struct {
const char *ssid;
const char *passphrase;
uint8_t security_type;
} wlan_config_t;
const wlan_config_t g_wlan_cfg = {
.ssid = "my_home_network",
.passphrase = "secure_password_123",
.security_type = WLAN_SEC_WPA2
};
클라우드 ASR 서비스 설정 (cloud_asr.c)
#include "cloud_asr.h"
typedef struct {
const char *api_endpoint;
const char *access_token;
uint32_t timeout_ms;
} cloud_asr_config_t;
const cloud_asr_config_t g_asr_cfg = {
.api_endpoint = "https://asr.cloudapi.com/v1/recognize",
.access_token = "eyJhbGciOiJIUzI1...", // 발급받은 실제 인증 토큰 입력
.timeout_ms = 5000
};
3. 펌웨어 빌드 및 플래싱
- IDE에서 프로젝트 파일을 임포트하고 타겟 보드(ST-Link 등) 디버그 설정을 확인합니다.
- 빌드 프로세스를 실행하여
.bin또는.hex실행 파일을 생성합니다. - STM32F407 보드를 PC에 연결한 후, 생성된 바이너리를 플래싱합니다.
주요 활용 시나리오
해당 시스템은 다양한 도메인에서 음성 인터페이스로 활용될 수 있습니다.
- 스마트홈 허브: 조명, 공조 장치(HVAC), 스마트 블라인드 등 집안 내 IoT 기기들을 음성 명령으로 제어합니다. 예를 들어 "거실 조명 켜줘"라는 발화를 MQTT 프로토콜을 통해 스마트 전구로 전달할 수 있습니다.
- 개인 비서 기능: 실시간 날씨 정보 조회, 뉴스 브리핑, 타이머 및 알람 설정 등 일상적인 비서 기능을 수행합니다.
- 로컬 미디어 플레이어: SD 카드에 저장된 오디오 파일을 Helix 디코더를 통해 재생하며, 음성 명령으로 재생, 일시정지, 곡 넘기기 등의 기능을 제어합니다.
핵심 소프트웨어 스택 및 에코시스템
이 프로젝트의 안정성과 기능은 다음과 같은 오픈소스 소프트웨어 컴포넌트에 기반합니다.
- FreeRTOS: 임베디드 환경에 최적화된 실시간 운영체제입니다. 다중 태스크 스케줄링, 동적 메모리 할당, 그리고 하드웨어 인터럽트 관리를 담당하여 오디오 스트리밍과 네트워크 통신을 동시에 처리합니다.
- FatFS: 경량 파일 시스템 모듈로, FAT12/16/32 포맷을 지원합니다. 마이크로 SD 카드 내의 디렉토리 탐색, 오디오 파일 읽기/쓰기 작업을 추상화합니다.
- Helix MP3 Decoder: 고정 소수점(Fixed-point) 연산을 기반으로 하는 고효율 MP3 디코딩 라이브러리입니다. FPU가 없거나 자원이 제한된 환경에서도 SD 카드의 MP3 데이터를 실시간으로 PCM 오디오 신호로 변환합니다.