下記サイトを参考にしてESP32-S3開発ボードI2SによるPCM5102からサイン波・ノコギリ波を出力しました。(PCM1808モジュールは未使用)
サイン・ノコギリ波
参考サイト
ボードマネージャ
追加ボードマネージャー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】インストール
プログラム Arduino IDE【ボード:ESP32S3 Dev Module】
#include <driver/i2s.h>
#define SAMPLING_RATE 16000
#define BUFFER_SIZE 512
uint8_t sound_buffer[BUFFER_SIZE];
// I2S 構成パラメータ指定
i2s_port_t i2s_port = I2S_NUM_0;
i2s_config_t i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX), //I2S作業モード
.sample_rate = SAMPLING_RATE, //I2Sサンプルレート
.bits_per_sample = I2S_BITS_PER_SAMPLE_32BIT, //サンプルあたりのI2Sビット
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT, //I2Sチャネルフォーマット
.communication_format = I2S_COMM_FORMAT_I2S_MSB, //I2S通信フォーマット
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, //割り込みを割り当てるために使用されるフラグ
.dma_buf_count =6, //I2S DMAバッファ数
.dma_buf_len = BUFFER_SIZE, //I2S DMAバッファ長
.use_apll = false, //2SはAPLLをメインI2Sクロックとして使用し、正確なクロックを取得
.tx_desc_auto_clear = true,
.fixed_mclk = 0,
};
// I2S ピン番号指定
i2s_pin_config_t pin_config = {
.bck_io_num = 42, //BCK
.ws_io_num = 2, //LRC,LCK
.data_out_num = 41, //DIN
.data_in_num = 1 //OUT
};
void setup() {
Serial.begin(115200);
i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL); //I2S 構成パラメータ指定
i2s_set_pin(I2S_NUM_0, &pin_config); //I2S ピン番号指定
i2s_zero_dma_buffer(I2S_NUM_0);
//sin波・ノコギリ波 → sound_buffer[i]
int step = 0; //step 0~255
for (int i = 0; i < BUFFER_SIZE; i += 8) {
sound_buffer[i + 3] = 127 * sin(2 * PI / 63 * step); //sin波
sound_buffer[i + 7] = step; //ノコギリ波
//Serial.println(sound_buffer[i + 3]); //シリアルプロッタ
//Serial.println(sound_buffer[i + 7]);
step += 1;
if (256 <= step) {
step = 0;
}
}
}
void loop(){
size_t transBytes;
i2s_write(I2S_NUM_0,(char*)sound_buffer, BUFFER_SIZE, &transBytes, portMAX_DELAY);
}
.png)

.png)
.png)
0 件のコメント:
コメントを投稿