임베디드 러스트(Embedded Rust)로 기타 튜터를 만들었다!

by DD
2개월 전
조회수 20

기타 학습을 위해 DIY 튜터를 제작, 임베디드 시스템(Embedded System), 오디오 처리, UI 디자인 등 다양한 기술을 융합

ESP32 기반의 튜너(Tuner)를 구현, Ratatui를 활용한 터미널 UI와 Rustfft를 이용한 FFT(Fast Fourier Transform) 분석

하드웨어 연결샘플 속도(Sample Rate) 문제 해결, PCB 설계DIY 키트 제작 과정을 거쳐 완성

펌웨어 충돌(Firmware Crash) 문제 해결을 위한 스택 사이즈(Stack Size) 설정 오류 분석 및 해결

임베디드 시스템(Embedded System) 환경 구축

개발자는 ESP32를 활용하여 기타 튜터를 제작하는 과정에서 ESP-IDF-HALESP-HAL 두 가지 Rust 프레임워크를 비교했다. ESP-IDF-HAL은 Espressif의 SDK를 감싸고 있어 주변 장치 지원이 뛰어나지만, 표준 라이브러리(Standard Library)를 포함하여 무겁다는 단점이 있다. 반면 ESP-HAL은 순수 Rust 구현으로 가볍지만, Ratatui/mousefood 지원이 0.30 릴리스 이후에야 가능했다.

오디오 신호 처리 및 FFT(Fast Fourier Transform) 분석

기타 튜터는 마이크 입력(Microphone Input)을 통해 오디오 신호를 수집하고, rustfft 라이브러리를 사용하여 FFT 분석을 수행한다. 샘플 속도(Sample Rate) 문제 해결을 위해 동적 샘플 속도를 사용하고, AdcDriverAdcChannelDriver를 활용하여 ADC(Analog-to-Digital Converter) 핀에서 데이터를 읽어온다. 이 과정을 통해 기본 주파수를 찾아내어 음계를 매핑하고, Ratatui를 통해 시각화한다.

PCB 설계 및 하드웨어 통합

개발자는 Tuitar라는 이름의 기타 튜터를 위해 PCB(Printed Circuit Board)를 설계하고 제작했다. TFT SPI 120×160 디스플레이와 ESP32-WROOM-32D를 사용하여, TUI(Text-based User Interface)를 구현했다. 또한, 전기 기타(Electric Guitar) 연결을 위해 6.35mm 잭을 ADC 핀에 연결하고, LM358 op-amp를 사용하여 신호를 증폭했다. 최종적으로 9V 배터리를 사용하여 전원을 공급했다.

펌웨어 충돌(Firmware Crash) 문제 해결

개발 과정에서 발생한 펌웨어 충돌(Firmware Crash)은 특정 Cargo target 디렉토리(Target Directory)에서만 재현되는 문제였다. 원인은 스택 사이즈(Stack Size) 설정 오류로, sdkconfig.defaults 파일이 프로젝트 루트에 위치하지 않아 기본값인 3584로 설정되었기 때문이다. 해결을 위해 sdkconfig.defaults 파일을 워크스페이스 루트로 이동하여 스택 오버플로우(Stack Overflow) 문제를 해결했다.

Building a guitar trainer with embedded Rust

댓글 0

첫 번째 댓글을 남겨보세요!