최근에 갑자기 이런 생각이 들었다.

GPT를 그냥 웹에서 쓰는 게 아니라, 물리적인 형태로 만들면 어떨까?

인형 안에 라즈베리파이를 넣고, 말을 걸면 대답하고, 전등도 제어하고, Spotify도 틀어주고, 고개도 살짝 움직이는 그런 느낌.

약간 장난감 같으면서도 살아있는 물건 같은 존재를 만들고 싶었다.

프로젝트 이름은 일단 짭토.


목표

처음 목표는 굉장히 단순했다.

```txt id=”v4n7ka” Raspberry Pi ↓ GPT API ↓ TTS ↓ 스피커 출력


여기까지만 되면 사실 절반은 성공이라고 생각했다.

사용한 장비는 다음과 같다.

* Raspberry Pi 3 Model B+
* KT 기가지니 AI Makers Kit
* MacBook
* microSD 카드

---

# Raspberry Pi 세팅

라즈베리파이는 예전에 회사에서 잠깐 만져본 적이 있었다.
그래서 완전 처음은 아니었고, 그때 기억 더듬으면서 다시 세팅했다.

Mac에서 Raspberry Pi Imager로:

* Raspberry Pi OS Lite 설치
* SSH 활성화
* WiFi 정보 입력

까지 같이 진행했다.

SD카드에 SSH와 WiFi 정보를 미리 넣어두면, 라즈베리파이는 전원만 연결해도 자동으로 네트워크에 붙는다.

그리고 맥북에서 바로 SSH로 접속 가능하다.

---

# GPT API 연결

OpenAI SDK 설치 후 간단한 테스트 코드를 작성했다.

처음 API 응답을 받았을 때 꽤 신기했다.

다만 속도가 예상보다 느렸다.

첫 요청 기준 거의 9초 정도 걸렸다.

진짜 체감상:

```txt id="m5bh8l"
"짭토야"
...
...
...
...
"Hello!"

이 느낌이었다.

근데 이후 요청은 1~2초대로 줄어드는 걸 보니 cold start 영향이 꽤 큰 것 같았다.


TTS 붙이기

다음 목표는 GPT 응답을 실제 음성으로 출력하는 것.

로컬 TTS로 Piper를 선택했다.

처음엔 한국어 모델부터 시도했다.

그리고 바로 벽에 박았다.

```txt id=”4kof4r” ValueError: ‘pygoruut’ is not a valid PhonemeType


이런 에러가 떴다.

한참 찾아보니 커뮤니티 기반 한국어 모델과 현재 Piper 버전이 서로 호환되지 않는 문제였다.

이 시점에서 약간:

> 오늘 쉽지 않겠군

느낌이 왔다.

하지만 AI를 쥐잡듯 털어서 잘 해냄.

---

# 일단 영어 모델로 방향 전환

우선 파이프라인을 완성하는 게 중요하다고 판단했다.

그래서 영어 모델인:

```txt id="ctmj1o"
en_US-amy-low

를 사용했다.

선택 이유는 단순했다.

  • 가볍다
  • 빠르다
  • Pi3에서도 돌아간다

애초에 목표가 “최고 음질 AI 비서”가 아니라, 약간 장난감처럼 살아있는 느낌의 존재였기 때문이다.


GPT → TTS → WAV 생성 성공

이 시점에서 처음으로 꽤 감동했다.

GPT 응답을 받아서:

```txt id=”r7dfn7” GPT 응답 ↓ Piper TTS ↓ wav 생성


까지 성공했다.

진짜 순간적으로:

> 다됐다 ㅋ ㅋㅋ

싶었다.

---

# 그리고 시작된 리눅스 오디오 드라이버 지옥

문제는 그 다음이었다.

파일은 생성되는데 소리가 나지 않았다.

처음엔 단순 볼륨 문제인 줄 알았다.

하지만 `aplay -l` 결과를 보고 상황이 좀 이상하다는 걸 알게 됐다.

```txt id="v3zb3r"
Headphones
HDMI

밖에 없었다.

즉, KT AI Makers Kit의 오디오 보드를 리눅스가 아예 인식하지 못하고 있는 상태였다.


이때부터 갑자기 분위기 임베디드

이 시점부터 하루 종일 다음 키워드들과 싸우게 된다.

  • ALSA
  • I2S
  • GPIO
  • device tree overlay
  • kernel module
  • DAC
  • amplifier enable

솔직히 여기서부터는 거의 고고학에 가까웠다.


overlay를 정말 많이 바꿔봤다

시도한 것들:

```txt id=”wlc51l” rpi-dac hifiberry-dac iqaudio-dac allo-boss… max98357a


처음엔 overlay가 정확히 뭔지도 몰랐다.

근데 점점:

> “리눅스에게 이 하드웨어가 어떤 장치인지 설명해주는 설정”

같은 느낌이라는 걸 이해하게 됐다.

---

# 가장 큰 진전

`max98357a` overlay를 적용했을 때였다.

이때 처음으로:

* ALSA 카드 생성
* PCM playback
* speaker-test 동작

까지 성공했다.

즉 리눅스 입장에서는:

```txt id="d7g8l8"
"오디오 장치 존재함"

상태까지 간 것이다.

진짜 거의 다 된 줄 알았다.

근데 여전히 소리는 안 났다.


GPIO 브루트포스까지 가게 됐다

중간에:

앰프 enable GPIO가 따로 있는 거 아닐까?

라는 가설이 생겼다.

그래서 GPIO를 하나씩 HIGH로 올려봤다.

거의 brute force 수준이었다.

6~25까지 다 시도했다.

결과는 아무 일도 일어나지 않았다.


현재 결론

현재까지 성공한 것:

  • Raspberry Pi headless 환경 구축
  • GPT API 연결
  • Piper TTS
  • wav 생성
  • ALSA 카드 생성

아직 안 되는 것:

```txt id=”ivb9s0” KT/KAON 커스텀 오디오 보드 실제 출력


이다.

---

# 다음 계획

일단은 AUX 스피커를 연결해서 Raspberry Pi 기본 오디오 출력으로 먼저 MVP를 완성할 생각이다.

사실 중요한 건:

> “짭토가 실제로 말하는 경험”

이지,

KT 커스텀 보드 오디오 드라이버를 완벽하게 복구하는 건 아니기 때문이다.

---

# 느낀 점

처음엔 그냥 “GPT 인형 만들기” 정도로 생각했는데, 갑자기 리눅스 오디오 드라이버 디버깅과 overlay 고고학까지 하게 될 줄은 몰랐다.

근데 꽤 재밌었다.

특히:

```txt id="ls1k3u"
소프트웨어
하드웨어
드라이버
GPIO
오디오 시스템

이 전부 연결되어 있다는 걸 실제로 체감한 게 인상적이었다.

지금 상태의 짭토는 약간 이런 느낌이다.

```txt id=”i0c6tq” GPT 가능 TTS 가능 wav 생성 가능 거의 말할 수 있음

근데 아직 입이 없음 ```

다음엔 진짜 소리까지 나오게 만들고 싶다.

댓글남기기