ESP-ADF를 사용하여 계산된 음성 신호를 외부 I2S-DAC에 출력하는 방법 (1)

소개



 전날, ESP-IDF (ESP32) v4에서 외부 I2S DAC를 사용하여 사인파 울림 라는 투고를 했습니다. 이 기사에서는 ESP-IDF(IoT Development Framework) 을 사용하여 ESP32에 외부로 연결된 I2S-DAC에서 사인파를 출력했습니다. 그러나, 보다 실용적으로 사용(예를 들어 PCM 음원을 재생하거나, 합성 등의 신호 처리를 하는)하기 위해서는, 요소 기능마다 태스크를 분할하고, 멀티 태스크로 동시 실행하거나, 각 태스크간 에서 신호를 전달해야 합니다.

일반적으로 이러한 기능은 자체적으로 구현할 수 있지만 ESP32의 개발자인 Espressif가 제공하는 ESP-ADF (Audio Development Framework)이라는 라이브러리에 바로 이러한 기능이 구현되어 있음 그래서 이것을 활용하기로 결정했습니다. 이 ESP-ADF는 전용 보드( ESP32-LyraT 등)에서의 사용을 상정하고 있는 것 같습니다만, 단체의 ESP32에서도 사용 가능하므로, 본 투고에서는 전회와 같이 ESP32와 외부 I2S-DAC와 스피커를 사용 그런 다음 간단한 사인파를 출력해보십시오.

공식 샘플 과의 차이는, 출력하는 신호 파형을 스스로 (sin 함수를 사용해) 계산하고 있는 점입니다. 공식 샘플에는 mp3나 wav 파일을 읽고 재생하는 것이 있지만, 신호 파형을 직접 접촉하는 것은 거의 하지 않고, 문서에도 그다지 그 방법에 대한 설명이 없습니다. 그래서 이번에는 신호 파형의 원시 데이터를 스스로 생성하여 I2S 출력에 전달하는 처리를 알기 쉽게 설명할 수 있는 프로그램을 작성했습니다.

이번 투고에서는, 우선 동작시킬 때까지를 설명합니다. 프로그램이나 라이브러리 사양에 대한 설명은 나중에 게시합니다.

준비하는 것


  • PC(필자는 Mac)
  • ESP32 개발 보드 (NodeMCU, ESP-WROOM-32 등)
  • MAX98357A I2S DAC 모듈 (Adafruit 및 유사품)
  • 스피커 유닛(사용하는 DAC에 적합한 것. 0.5~3W 정도의 작은 것)

  • 환경 구축



    ESP-ADF 도입



    공식 사이트( Get Started )의 설명대로 ESP-IDF와 ESP-ADF를 도입합니다. 요 전날 게시과는 ESP-IDF의 버전이 다르기 때문에 주의가 필요합니다(전회는 v4였지만, 이번은 v3.3.1을 사용합니다). 나는 esp_v3과 esp_v4의 두 개의 유사한 폴더를 나누어 양립시키고 있습니다 (환경 변수도 전환하고 있습니다), 잘 모르면 기존의 esp 폴더를 삭제하거나 퇴피하고 다시 다시 도입하면 괜찮습니다.

    신규 도입하는 경우의 순서는 다음과 같습니다. (mac의 경우)
    # 事前に https://dl.espressif.com/dl/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz を~/Downloadsへダウンロードしておく。
    mkdir -p ~/esp
    cd ~/esp
    tar -xzf ~/Downloads/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
    git clone -b v3.3.1 --recursive https://github.com/espressif/esp-idf.git
    git clone --recursive https://github.com/espressif/esp-adf.git
    
    # pipでパッケージをインストールする。(pipが無ければ別途インストール必要)
    # また、環境変数$IDF_PATHを設定する必要あり。
    python -m pip install --user -r $IDF_PATH/requirements.txt
    

    Github에서 프로그램 얻기 (git clonoe)



    이번에도 github에 세트를 준비했으므로, git clone에서 다운로드하는 것만으로 OK입니다.
    cd ~/esp
    git clone https://github.com/moppii-hub/ESPADF_geneSig.git
    

    회로 제작



    요 전날 게시 의 회로와 같습니다. 다시 게시합니다.



    우선 동작시키다



      우선, make menuconfig 를 실행해, 시리얼 포트의 설정을 합니다.
    cd ~/esp/ESPADF_geneSig/
    make menuconfig
    

    설정 방법은 공식 설명 과 같습니다만, menuconfig의 화면이 나오면 Serial flasher config > Default serial port 를 선택해, 포트명을 입력해, save, exit 합니다. 포트 이름은 다음과 같은 방법으로 확인할 수 있습니다. 내 환경(mac)에서는 /dev/tty.SLAB_USBtoUART 입니다.
    ls /dev/tty.*
    

    포트 설정이 완료되면 ESP32를 PC에 연결하고 프로그램을 씁니다.
    make flash
    

    프로그램 쓰기가 끝나고 스피커에서 정현파가 울리면 성공입니다.

    사이고에게



    간단합니다만, 이번은 여기까지로 합니다. 다음은 이번에 동작시킨 프로그램의 설명과 ESP-ADF 라이브러리의 사용방법을 설명합니다.

    좋은 웹페이지 즐겨찾기