2026年4月1日水曜日

ESP32 - PCM5102 サイン波出力

下記サイトを参考にしてPCM5102A I2S DACによるサイン波を出力しました。 

接続
ESP32   PCM5102
GP25 ー DIN
GP26 ー LCK
GP27 ー BCK
3.3V      ー    VIN
GND      ー      GND



32ビットPCM5102 DAC波形
CH1-L     CH2-R














参考サイト
●YouTube-よみやチャネル
高性能DAC PCM5102をESP32で使ってみる
●ESP32でサウンドを作る – I2Sプロトコル
●ESP32のI2Sを使ったDAC出力研究



Esp32-devkitc-32e 開発ボード
●Esp32-devkitc-32e 開発ボード
※アマゾンの写真には技適マークがありますが、送られた製品は技適マーク無し(証明書無)




PCM5102A - 32ビットDAC

【SCK】ブリッジ(内部クロック)












【H1L】(FLT)      L側 ブリッジ
【H2L】(DEMP) L側 ブリッジ
【H3L】(XSMT) H側 ブリッジ
【H4L】(FMT)    L側 ブリッジ









シリアルプロッタ
E9 (10の9乗)  青=L 赤=R

10進符号付き整数
-2,147,483,648 ~ 2,147,483,647



ボードマネージャ














追加ボードマネージャーURLを変更
【https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json】
【esp 32】
【バージョン3.2.0】インストール


ライブラリマネージャー








●ESP32-audioI2S-master 
 所定のlibrariesに貼付

【i2s】
【バージョン3.2.1】インストール


ESP-IDFプログラミングガイド
ESPRESSIF バージョン3.3





















プログラム Arduino IDE【ボード:ESP32 Dev Module
#include <driver/i2s.h>

#define I2S_SAMPLE_RATE    44100
#define I2S_BUFFER_COUNT   4
#define I2S_BUFFER_SIZE    512

#define SOUND_BUFFER_SIZE  512
uint8_t sound_buffer[SOUND_BUFFER_SIZE];

// I2S 構成パラメータ指定
const i2s_port_t i2s_port = I2S_NUM_0;
const i2s_config_t i2s_config = {
     .mode                 = (i2s_mode_t) (I2S_MODE_MASTER | I2S_MODE_TX),
     .sample_rate          = I2S_SAMPLE_RATE, //サンプルレート
     .bits_per_sample      = I2S_BITS_PER_SAMPLE_32BIT, //32bit  
     .channel_format       = I2S_CHANNEL_FMT_RIGHT_LEFT,//ステレオ モノONLY_RIGHT
     .communication_format = I2S_COMM_FORMAT_I2S,  //通信方式I2S
     .intr_alloc_flags     = ESP_INTR_FLAG_LEVEL1, //割込みレベル1
     .dma_buf_count        = I2S_BUFFER_COUNT,     //I2S DMAバッファ数
     .dma_buf_len          = I2S_BUFFER_SIZE,      //I2S DMAバッファ長
     .use_apll             = false
};

// I2S ピン番号指定
const i2s_pin_config_t pin_config = {
    .bck_io_num   = 27, //BCK PCM5102
    .ws_io_num    = 26, //LCK
    .data_out_num = 25, //DIN
    .data_in_num  = I2S_PIN_NO_CHANGE,
};
 
void setup() {
  i2s_driver_install(i2s_port, &i2s_config, 0, NULL); //I2S 構成パラメータ指定
  i2s_set_pin(i2s_port, &pin_config);                 //I2S ピン番号指定
  Serial.begin(115200);  
}

void loop(){
  size_t transBytes = SOUND_BUFFER_SIZE;
  for(uint32_t i=0; i<transBytes; i=i+8){
    int32_t L_data = sin(2.0*PI*i/SOUND_BUFFER_SIZE)*32767*65536; //7fff*10000
    int32_t R_data = sin(4.0*PI*i/SOUND_BUFFER_SIZE)*32767*65536;
    *((int32_t *)(sound_buffer + i  )) = L_data;
    *((int32_t *)(sound_buffer + i+4)) = R_data;
    Serial.println(L_data); //シリアルプロッタ
    //Serial.println(R_data);
  }
  i2s_write(i2s_port,(char*)sound_buffer, I2S_BUFFER_SIZE, &transBytes, portMAX_DELAY);
}

0 件のコメント:

コメントを投稿

ESP32 - Bluepad32 ロボカー PS4コントローラー操作

  Bluetooth (Classic / BLE)対応の Bluepad32ライブラリー使用して、 無印E SP32制御ロボットカーを純正PS4コントローラーで操作しました。 (Xboxコントローラーに入替て操作出来ます) 同ブログ【 ESP32 - Bluepad32 PS...