Arama butonu
Bu konudaki kullanıcılar: 1 misafir
2
Cevap
170
Tıklama
0
Öne Çıkarma
I2S ve esp32 uyumsuzluğu
S
geçen ay (2 mesaj)
Er
Konu Sahibi

Merhaba,uzun süredir (2-3 hafta) bir I2S modülünü (INMP441 ve MAX98357A) test etmek istiyorum.Fakat bu modüllerden 2şer tane kullansamda çalışamdılar.8 farklı kod denedim şaka gibi yine olmadılar.Peki neden olabilir?

MAX98357A kodu:

#include <driver/i2s.h>
#include <math.h>

// Kesinleşmiş GPIO Pinleri
#define I2S_DOUT 4 // DIN
#define I2S_BCLK 5 // BCLK
#define I2S_LRC 6 // LRC

#define I2S_PORT I2S_NUM_0
#define SAMPLE_RATE 22050 // İşlemciyi yormamak ve net ses için ideal oran

void setup() {
Serial.begin(115200);
delay(1500);
Serial.println("\n=== MAX98357A KESİN BAĞLANTI TESTİ BAŞLIYOR ===");

i2s_config_t i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX),
.sample_rate = SAMPLE_RATE,
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
.communication_format = i2s_comm_format_t(I2S_COMM_FORMAT_STAND_I2S),
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
.dma_buf_count = 8,
.dma_buf_len = 64,
.use_apll = false,
.tx_desc_auto_clear = true,
.fixed_mclk = 0
};

i2s_pin_config_t pin_config = {
.bck_io_num = I2S_BCLK,
.ws_io_num = I2S_LRC,
.data_out_num = I2S_DOUT,
.data_in_num = I2S_PIN_NO_CHANGE
};

esp_err_t err = i2s_driver_install(I2S_PORT, &i2s_config, 0, NULL);
if (err != ESP_OK) {
Serial.printf("HATA: I2S sürücüsü kurulamadı! Kod: %d\n", err);
} else {
Serial.println("BAŞARILI: I2S sürücüsü kuruldu.");
}

err = i2s_set_pin(I2S_PORT, &pin_config);
if (err != ESP_OK) {
Serial.printf("HATA: Pinler atanamadı! Kod: %d\n", err);
} else {
Serial.println("BAŞARILI: Pinler GPIO 4, 5, 6 ya atandı.");
}

Serial.println("Ses sinyali gönderilmeye başlanıyor... Hoparlöre kulak ver!");
}

void loop() {
static float phase = 0.0;
int16_t buffer[64];
size_t bytes_written = 0;

// Sesin açılıp kapanması için aralık koyduk ki bağlıysa 'bip bip' şeklinde net duyulsun
static unsigned long lastToggle = 0;
static bool playSound = true;
if (millis() - lastToggle > 500) {
playSound = !playSound;
lastToggle = millis();
}

float frequency = 600.0; // Kulak tırmalamayan net bir frekans
float amplitude = 12000.0;

for (int i = 0; i < 64; i++) {
if (playSound) {
buffer = (int16_t)(amplitude * sin(phase));
phase += (2.0 * M_PI * frequency) / SAMPLE_RATE;
if (phase >= 2.0 * M_PI) {
phase -= 2.0 * M_PI;
}
} else {
buffer = 0; // Sessizlik (Bip aralığı)
}
}

// Veriyi I2S üzerinden amfiye yolla
i2s_write(I2S_PORT, buffer, sizeof(buffer), &bytes_written, portMAX_DELAY);

// Yazılımın veri basıp basmadığını kanıtlamak için ekrana akış verelim
if (bytes_written > 0) {
Serial.println("-> Amfiye I2S Veri Paketi Gönderiliyor (Buffer Aktif)");
}

delay(20);
}

YARDIMCI OLURSANIZ SEVİNİRİM

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil




İ
geçen hafta (3 mesaj)
Er

Modüller lehimli ise parçalar da sorunlu olabilir. Test etmek için bir çok yol var, chatgpt veya gemini yardımcı olacaktır. Eğer çalışıyorlar ise tekrar yazın yardımcı olalım. Olası bir sorunda ise yeni parça tedariği için RobotikDepo'yu önereceğim.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.