#1 02-02-2022 20:37:49

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,588

Блютуз приёмник аудио сигнала. ESP32(DevkitV1)+PCM5102.

Блютуз приёмник на базе библиотеки  BluetoothA2DPSink.h
https://github.com/pschatzmann/ESP32-A2DP
https://www.pschatzmann.ch/home/2020/03/27/1255/

Не в сети

#2 02-02-2022 20:50:51

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,588

Re: Блютуз приёмник аудио сигнала. ESP32(DevkitV1)+PCM5102.

Самый простой вариант блютузприёмника ESP32+PCM5102.
Код.

#include "BluetoothA2DPSink.h"
BluetoothA2DPSink a2dp_sink;
void setup() {
    i2s_pin_config_t my_pin_config = {
        .bck_io_num = 27,//BCK
        .ws_io_num = 26,//LCK
        .data_out_num = 25,//DIN
        .data_in_num = I2S_PIN_NO_CHANGE };
    a2dp_sink.set_pin_config(my_pin_config);
    a2dp_sink.start("MyMusic");
}
void loop() {
}

Не в сети

#3 02-02-2022 20:55:47

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,588

Re: Блютуз приёмник аудио сигнала. ESP32(DevkitV1)+PCM5102.

Esp32 такой(тот что имеет 30 ног). Памяти для обработки мультимедиа у него мало, но пока будет такой.
https://aliexpress.ru/item/32802431728. … 4aa6zqRg8u
ЦАП PCM5102 такой.
https://aliexpress.ru/item/32828177686. … 4aa6zqRg8u

Не в сети

#4 02-02-2022 21:23:50

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,588

Re: Блютуз приёмник аудио сигнала. ESP32(DevkitV1)+PCM5102.

Схема распайки модуля PCM5102.

PCM5102.gif

16438277754541282961504223709921.jpg

16438278523061045796281523321193.jpg

Не в сети

#5 03-02-2022 01:46:33

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,588

Re: Блютуз приёмник аудио сигнала. ESP32(DevkitV1)+PCM5102.

Схема соединения ESP32  и PCM5102.

ESP32-PCM5102.gif
16438279131314270215365097865460.jpg
1643828018005833494959365526220.jpg

Не в сети

#6 03-02-2022 02:04:00

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,588

Re: Блютуз приёмник аудио сигнала. ESP32(DevkitV1)+PCM5102.

К Esp32, уже прикручено куча девайсов.
Дисплей St7735 и ИК приёмник VS1838.

16438286134241646914811386821296.jpg

Не в сети

#7 03-02-2022 02:18:34

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,588

Re: Блютуз приёмник аудио сигнала. ESP32(DevkitV1)+PCM5102.

Ниже следующий код, занимает уже 80% памяти.
16438294281192001704626528080746.jpg

Не в сети

#8 03-02-2022 02:47:04

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,588

Re: Блютуз приёмник аудио сигнала. ESP32(DevkitV1)+PCM5102.

Код для esp32+pcm5102+st7735+vs1838

#include "Arduino.h"
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>
const uint16_t kRecvPin = 33;
IRrecv irrecv(kRecvPin);
decode_results results;
///////////////////////////////////////
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
 #define TFT_CS         14
 #define TFT_RST        15
 #define TFT_DC         32
 #define TFT_SCLK        4
 #define TFT_MOSI        2
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
//////////////////////////////////////////////////////////////////////////////////
#include "Audio.h"
#include "BluetoothA2DPSink.h"
BluetoothA2DPSink a2dp_sink;
bool is_active = true;
char str1[50]="";
String str2[50]="";
void avrc_metadata_callback(uint8_t data1, const uint8_t *data2) {
  Serial.printf("AVRC metadata rsp: attribute id 0x%x, %s\n", data1, data2);
}
void DisplayInfo(){
 tft.setTextSize(2);
tft.fillScreen(ST77XX_BLACK);
     tft.setCursor(0, 0);
  tft.setTextColor(ST77XX_GREEN);  
  tft.print(str1); 
}
// Начало функции обработки кириллических символов
 String ru(String source) 
{  int i,j,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length();  i = j = 0;
  while (i < k) {
    n = source[i]; i++;

    if (n >= 127) {
      switch (n) {
        case 208: {
          n = source[i]; i++;
          if (n == 129) { n = 192; break; } // перекодируем букву Ё
          break;
        }
        case 209: {
          n = source[i]; i++;
          if (n == 145) { n = 193; break; } // перекодируем букву ё
          break;
        }
      }
    }

    m[0] = n;target = target + String(m); 
    j++; 
  }
  return target;
}
// Конец функции обработки кириллических символов
void setup() {
 irrecv.enableIRIn();  // Start the receiver
 ////////////////////////////////
  tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab
  tft.setRotation(1);
  tft.setTextSize(3);
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 0);
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextWrap(true);
  tft.print(ru("Дисплей."));
   /////////////// 
  Serial.begin(115200);
 
  i2s_pin_config_t my_pin_config =  {
        .bck_io_num = 27,
        .ws_io_num = 26,
        .data_out_num = 25,
        .data_in_num = I2S_PIN_NO_CHANGE
    };
    a2dp_sink.set_pin_config(my_pin_config);
a2dp_sink.set_avrc_metadata_callback(avrc_metadata_callback);
  a2dp_sink.start("BT32bit");  
}
void loop() {
if (irrecv.decode(&results)) {
    serialPrintUint64(results.value, HEX);
// play();pause();stop();next();previous();
if (results.value==0x5FA807F){//жёлтый
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 0);
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextWrap(true);
  tft.print(ru("Предыдущий"));
  a2dp_sink.previous();}
 if (results.value==0x5FA00FF){//синий
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 0);
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextWrap(true);
  tft.print(ru("Следующий"));
  a2dp_sink.next();}
 if (results.value==0x5FA827D){//ЗЕЛЁНЫЙ
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 0);
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextWrap(true);
  tft.print(ru("Воспроизведение"));
  a2dp_sink.play();}
  if (results.value==0x5FA42BD){//КРАСНЫЙ
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 0);
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextWrap(true);
  tft.print(ru("Пауза"));
  a2dp_sink.pause();}
 Serial.println("");
    irrecv.resume();  // Receive the next value
  }
}

Не в сети

#9 13-02-2022 14:37:46

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,588

Re: Блютуз приёмник аудио сигнала. ESP32(DevkitV1)+PCM5102.

Код для esp32+pcm5102+st7735+vs1838. Обновление. Теперь метаданные воспроизводимого трека отображаются на дисплее.

#include "Arduino.h"
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>
const uint16_t kRecvPin = 33;//Порт ИК приёмника
IRrecv irrecv(kRecvPin);
decode_results results;
///////////////////////////////////////
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
 #define TFT_CS         14
 #define TFT_RST        15
 #define TFT_DC         32
 #define TFT_SCLK        4
 #define TFT_MOSI        2
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
//////////////////////////////////////////////////////////////////////////////////
#include "Audio.h"
#include "WiFiMulti.h"
#include "SPI.h"
#include "SD.h"
#include "FS.h"
// ==> Example to use external 32 bit DAC - the 16 bit A2DP ouptut will be expanded to the indicated bits
#include "BluetoothA2DPSink.h"
BluetoothA2DPSink a2dp_sink;
bool is_active = true;
char str1[50]="";
char str2[100]="";
void avrc_metadata_callback(uint8_t data1, const uint8_t *data2) {
  Serial.printf("AVRC metadata rsp: attribute id 0x%x, %s\n", data1, data2);
if (data1==1){
  sprintf(str2, "%s", data2);
}
if (data1==4) DisplayInfo();
}
void DisplayInfo(){//Отображаем метаданные воспроизводимого трека
 tft.setTextSize(2);
 tft.fillScreen(ST77XX_BLACK);
 tft.setCursor(0, 0);
 tft.setTextColor(ST77XX_GREEN);  
 tft.print(ru(str2)); 
}
// Начало функции обработки кириллических символов
 String ru(String source) 
{  int i,j,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length();  i = j = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 127) {
      switch (n) {
        case 208: {
          n = source[i]; i++;
          if (n == 129) { n = 192; break; } // перекодируем букву Ё
          break;
        }
        case 209: {
          n = source[i]; i++;
          if (n == 145) { n = 193; break; } // перекодируем букву ё
          break;
        }
      }
    }
    m[0] = n;target = target + String(m); 
    j++; 
  }
  return target;
}// Конец функции обработки кириллических символов
void setup() {
 irrecv.enableIRIn();  // Start the receiver
 ////////////////////////////////
  tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab
  tft.setRotation(1);
  tft.setTextSize(3);
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 0);
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextWrap(true);
  tft.print(ru("Дисплей."));
   /////////////// 
  Serial.begin(115200); 
  i2s_pin_config_t my_pin_config =  {
        .bck_io_num = 27,
        .ws_io_num = 26,
        .data_out_num = 25,
        .data_in_num = I2S_PIN_NO_CHANGE
    };
a2dp_sink.set_pin_config(my_pin_config);
a2dp_sink.set_avrc_metadata_callback(avrc_metadata_callback);
a2dp_sink.start("ESP32_BTreceiver");  
}
void loop() {
if (irrecv.decode(&results)) {
    // print() & println() can't handle printing long longs. (uint64_t)
    serialPrintUint64(results.value, HEX);
if (results.value==0x1FE58A7)//Mode
{
 DisplayInfo(); 
}
if (results.value==0x5FA807F or results.value==0x1FE40BF){//жёлтый
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 0);
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextWrap(true);
  tft.print(ru("Предыдущий"));
  a2dp_sink.previous();
 }
 if (results.value==0x5FA00FF or results.value==0x1FEC03F){//синий
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 0);
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextWrap(true);
  tft.print(ru("Следующий"));
  a2dp_sink.next();
 }
 if (results.value==0x5FA827D){//ЗЕЛЁНЫЙ
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 0);
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextWrap(true);
  tft.print(ru("Воспроизведение"));
  a2dp_sink.play();
  }
  if (results.value==0x5FA42BD){//КРАСНЫЙ
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 0);
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextWrap(true);
  tft.print(ru("Пауза"));
  a2dp_sink.pause();
  }
 Serial.println("");
    irrecv.resume();  // Receive the next value
  }
}

Не в сети

#10 13-02-2022 14:55:23

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,588

Re: Блютуз приёмник аудио сигнала. ESP32(DevkitV1)+PCM5102.

16447387895777780832110327781473.jpg

Screenshot-2022-02-13-14-51-43-427-com-google-android-youtube.jpg

Не в сети

#11 26-05-2024 22:04:49

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,588

Re: Блютуз приёмник аудио сигнала. ESP32(DevkitV1)+PCM5102.

17167357691033575419691109756865.jpg

17167358308906058816952626255167.jpg

Не в сети

Подвал раздела

Работает на FluxBB (перевод Laravel.ru)