STM32 기반 클라우드 음성 인식 스마트 스피커 개발 가이드

프로젝트 아키텍처 및 하드웨어 구성

이 프로젝트는 클라우드 기반의 자동 음성 인식(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.ccloud_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. 펌웨어 빌드 및 플래싱

  1. IDE에서 프로젝트 파일을 임포트하고 타겟 보드(ST-Link 등) 디버그 설정을 확인합니다.
  2. 빌드 프로세스를 실행하여 .bin 또는 .hex 실행 파일을 생성합니다.
  3. STM32F407 보드를 PC에 연결한 후, 생성된 바이너리를 플래싱합니다.

주요 활용 시나리오

해당 시스템은 다양한 도메인에서 음성 인터페이스로 활용될 수 있습니다.

  • 스마트홈 허브: 조명, 공조 장치(HVAC), 스마트 블라인드 등 집안 내 IoT 기기들을 음성 명령으로 제어합니다. 예를 들어 "거실 조명 켜줘"라는 발화를 MQTT 프로토콜을 통해 스마트 전구로 전달할 수 있습니다.
  • 개인 비서 기능: 실시간 날씨 정보 조회, 뉴스 브리핑, 타이머 및 알람 설정 등 일상적인 비서 기능을 수행합니다.
  • 로컬 미디어 플레이어: SD 카드에 저장된 오디오 파일을 Helix 디코더를 통해 재생하며, 음성 명령으로 재생, 일시정지, 곡 넘기기 등의 기능을 제어합니다.

핵심 소프트웨어 스택 및 에코시스템

이 프로젝트의 안정성과 기능은 다음과 같은 오픈소스 소프트웨어 컴포넌트에 기반합니다.

  • FreeRTOS: 임베디드 환경에 최적화된 실시간 운영체제입니다. 다중 태스크 스케줄링, 동적 메모리 할당, 그리고 하드웨어 인터럽트 관리를 담당하여 오디오 스트리밍과 네트워크 통신을 동시에 처리합니다.
  • FatFS: 경량 파일 시스템 모듈로, FAT12/16/32 포맷을 지원합니다. 마이크로 SD 카드 내의 디렉토리 탐색, 오디오 파일 읽기/쓰기 작업을 추상화합니다.
  • Helix MP3 Decoder: 고정 소수점(Fixed-point) 연산을 기반으로 하는 고효율 MP3 디코딩 라이브러리입니다. FPU가 없거나 자원이 제한된 환경에서도 SD 카드의 MP3 데이터를 실시간으로 PCM 오디오 신호로 변환합니다.

태그: STM32 freertos esp8266 fatfs Embedded-C

6월 30일 17:19에 게시됨