From fa5e1082febb989eb5288b4159c5a00575ee8d50 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Sat, 24 May 2025 13:01:43 +0300 Subject: [PATCH] init --- .../headphone_master/headphone_master.ino | 37 ++++++++++++++++++ .../headphone_slave/headphone_slave.ino | 39 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 headphones/headphone_master/headphone_master.ino create mode 100644 headphones/headphone_slave/headphone_slave.ino diff --git a/headphones/headphone_master/headphone_master.ino b/headphones/headphone_master/headphone_master.ino new file mode 100644 index 0000000..1ff94e9 --- /dev/null +++ b/headphones/headphone_master/headphone_master.ino @@ -0,0 +1,37 @@ +#include +#include "BluetoothA2DPSink.h" +#include +#include + +BluetoothA2DPSink a2dp_sink; + +uint8_t slave_mac[] = {0x24, 0x6F, 0x28, 0xXX, 0xXX, 0xXX}; // MAC-адрес второго наушника (Slave) + +void audio_data_callback(const uint8_t *data, uint32_t length) { + // Разделяем стереоданные на левый и правый канал + // Отправляем правый канал на Slave + esp_now_send(slave_mac, data, length); +} + +void setup() { + Serial.begin(115200); + + // Настройка I2S + i2s_pin_config_t pin_config = {26, 25, 22, I2S_PIN_NO_CHANGE}; + a2dp_sink.set_pin_config(pin_config); + + // Настройка ESP-NOW + WiFi.mode(WIFI_STA); + esp_now_init(); + esp_now_peer_info_t peerInfo = {}; + memcpy(peerInfo.peer_addr, slave_mac, 6); + peerInfo.channel = 0; + peerInfo.encrypt = false; + esp_now_add_peer(&peerInfo); + + // A2DP с коллбэком + a2dp_sink.set_stream_reader(audio_data_callback, false); + a2dp_sink.start("ESP32_TWS_Master"); +} + +void loop() {} diff --git a/headphones/headphone_slave/headphone_slave.ino b/headphones/headphone_slave/headphone_slave.ino new file mode 100644 index 0000000..3f423f1 --- /dev/null +++ b/headphones/headphone_slave/headphone_slave.ino @@ -0,0 +1,39 @@ +#include +#include +#include +#include "driver/i2s.h" + +void on_audio_receive(const uint8_t *data, int len) { + // Воспроизводим аудио через I2S + size_t bytes_written; + i2s_write(I2S_NUM_0, data, len, &bytes_written, portMAX_DELAY); +} + +void setup() { + Serial.begin(115200); + + // Настройка I2S + i2s_config_t i2s_config = { + .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX), + .sample_rate = 44100, + .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT, + .channel_format = I2S_CHANNEL_FMT_ONLY_RIGHT, // Только правый канал + .communication_format = I2S_COMM_FORMAT_I2S_MSB, + .intr_alloc_flags = 0, + .dma_buf_count = 8, + .dma_buf_len = 64, + .use_apll = false + }; + i2s_pin_config_t pin_config = {26, 25, 22, I2S_PIN_NO_CHANGE}; + i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL); + i2s_set_pin(I2S_NUM_0, &pin_config); + + // Настройка ESP-NOW + WiFi.mode(WIFI_STA); + esp_now_init(); + esp_now_register_recv_cb([](const uint8_t *mac, const uint8_t *data, int len) { + on_audio_receive(data, len); + }); +} + +void loop() {}