- Поддержка Bluetooth-аудио, передача данных BLE, воспроизведение U-диска, воспроизведение TF-карты, SPIFLASH. Поддержка декодирования форматов MP3, WAV, WMA, FLAC, AAC, APE.
- 16-битный стерео ЦАП с усилителем для наушников, отношение сигнал/шум >= 95 дБ
- Последовательный порт управления командой AT. Поддержка изменения скорости передачи данных для изменения имени Bluetooth, указания воспроизведения устройства и передачи данных мобильного телефона.
- Поддержка двухрежимной передачи данных BLE и SPP, в то же время может воспроизводить звук Bluetooth, без конфликтов.
- Поддержка вызова Bluetooth, многокнопочного управления, последней музыки, следующей музыки, воспроизведения паузы, регулировки громкости и других простых функций.
- Поддержка получения полного имени файла последовательного порта воспроизведения, указанного пути воспроизведения, цикла или одиночного воспроизведения.
- Поддержка функции записи 128KBS. Запись на TF-карту или U-диск, запись, удаление, воспроизведение и т. д.
USB to COM | STM32 | BT201 |
3.3 V | 3.3 | — |
5 V | — | VCC |
TX | PA10 (RX1) | — |
RX | PA9 (TX1) | — |
GND | G | GND |
— | PB10 (TX3) | RX |
— | PB9 (RX3) | TX |
void setup(){ Serial.begin(115200); Serial3.begin(115200); Serial.println(); delay(500); } void loop(){ if (Serial.available() > 0) { String str = Serial.readString(); Serial.println(str); Serial3.print(str+"\r\n"); } if (Serial3.available() > 0) { String str = Serial3.readString(); Serial.println(str); } }
Команды управления отсылаете через монитор порта, и они пересылаются на модуль BT201.
Все, что приходит с модуля (ответы, сообщения и т.д.), пишется в монитор порта.
Список АТ команд —BT201 Module _KT1025A_B_User Manual _V2.3.pdf
Список основных АТ команд:
- AT+CB — стоп\паузы
- AT+CC — следующий трек
- AT+CD — предыдущий трек
- AT+CE — громкость +++
- AT+CF — громкость —
- AT+CA15 — громкость уровень 15 (0-30)
- AT+CM01 — Bluetooth
- AT+CM02 — USB
Ниже показан пример управления модулем BT201 при помощи STM32 и нескольких кнопок, режимы работы и другая информация отображается на дисплее 0.96′ I2C 128X64 OLED.
Дисплей 0.96′ I2C 128X64 OLED на контроллере SSD1306 имеет разрешение 128х64 пиксел и подключается к микроконтроллеру по интерфейсу I2C.
Параметры дисплея SSD1306:
- Технология дисплея: OLED
- Разрешение дисплея: 128 на 64 точки
- Диагональ дисплея: 0,96 дюйма
- Угол обзора: 160°
- Напряжение питания: 2.8 В ~ 5.5 В
- Мощность: 0,08 Вт
- Габариты: 27.3 мм х 27.8 мм х 3.7 мм
Кнопки управления:
- PLAY / STOP — воспроизведение \ пауза в режиме Bluetooth и USB
- >>> — следующий трек (файл, ролик) в режиме Bluetooth и USB
- <<< — предыдущий трек (файл, ролик) в режиме Bluetooth и USB
- Bluetooth \ USB — кнопка выбора Bluetooth или USB
- VOLUME UP — громкость прибавить на 1 ед.
- VOLUME WD — громкость удавить на 1 ед.
Меню Bluetooth
- Bluetooth
- Режим работы:
- not connected — нет соединения
- connected — соединение установлено
- play — воспроизвидение
- Уровень громкости
Меню USB
- USB
- Номер воспроизводимого файла (кол-во файлов на носителе*)
- Время звучания воспроизводимого файла
- текущее время проигрывания файла
- Уровень громкости
*Звуковые файлы на USB устройстве должны быть записаны й в корень файловой системы.
Подключения STM32, кнопок и дисплея
STM32 | Кнопка** | 0.96′ I2C 128X64 OLED |
PB12 | Bluetooth \ USB | — |
PB14 | >>> | — |
PB15 | <<< | — |
PA12 | PLAY / STOP | — |
PA15 | VOLUME UP | — |
PA11 | VOLUME DW | — |
PB7 | — | SDA |
PB6 | — | SCL |
** Подключение кнопок
STM32 | BT201 |
5V | VCC |
G | GND |
PB10 (TX3) | RX |
PB9 (RX3) | TX |
#include <Arduino.h> #include <U8x8lib.h> U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE); //U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); String str; int a,usb,trek,trek_time,trek_all,trek_off,blu_sos,vol; unsigned long times,times0; bool pp,w=1,w0; void setup(){ u8x8.begin(); u8x8.setPowerSave(0); Serial.begin(115200); Serial.println(); Serial3.begin(115200); pinMode(PB12,INPUT_PULLUP);//pb12 usb/blu pinMode(PB14,INPUT_PULLUP);//pb14 >> pinMode(PB15,INPUT_PULLUP);//pb15 << pinMode(PA12,INPUT_PULLUP);//pa12 >/= pinMode(PA15,INPUT_PULLUP);//pa15 vol+ pinMode(PA11,INPUT_PULLUP);//pa11 vol- delay(300); Serial3.print("AT+QM\r\n"); delay(300); Serial3.print("AT+QA\r\n"); delay(300); Serial3.print("AT+M1\r\n"); } void loop(){ u8x8.setFont(u8x8_font_chroma48medium8_r); if(w==1){w=0; u8x8.setCursor(0,1);u8x8.print("----------------"); u8x8.setCursor(0,4);u8x8.print("----------------"); u8x8.setCursor(0,6);u8x8.print("----------------"); u8x8.setCursor(0,7);u8x8.print("USB+Bluetooth"); } //// BUTTON if(digitalRead(PB12)==LOW && usb==0){pp=0;w0=1;times0=millis();Serial3.print("AT+CM02\r\n");Serial.println("USB");delay(20);} // start usb if(digitalRead(PB12)==LOW && usb==1){pp=0;w0=1;times0=millis();Serial3.print("AT+CM01\r\n");Serial.println("BLUT");delay(20);}// start bl if(digitalRead(PB14)==LOW){pp=0;w0=1;times0=millis();Serial3.print("AT+CC\r\n");Serial.println(">>>");delay(500);Serial3.print("AT+M1\r\n");}// >>> if(digitalRead(PB15)==LOW){pp=0;w0=1;times0=millis();Serial3.print("AT+CD\r\n");Serial.println("<<<");delay(500);Serial3.print("AT+M1\r\n");}// <<< if(digitalRead(PA12)==LOW && usb==0){Serial3.print("AT+CB\r\n");Serial.println("PLAY/PAUSE");delay(200);}// >/= if(digitalRead(PA12)==LOW && usb==1 && pp==0){pp=1;Serial3.print("AT+AA02\r\n");Serial.println("PAUSE");delay(200);}// >/= if(digitalRead(PA12)==LOW && usb==1 && pp==1){pp=0;Serial3.print("AT+AA01\r\n");Serial.println("PLAY");delay(200);}// >/= if(digitalRead(PA15)==LOW){Serial3.print("AT+CE\r\n");Serial.println(">vol+");delay(200);Serial3.print("AT+QA\r\n");}// vol+ if(digitalRead(PA11)==LOW){Serial3.print("AT+CF\r\n");Serial.println(">vol-");delay(200);Serial3.print("AT+QA\r\n");}// vol- if (Serial.available() > 0) {str = Serial.readString();Serial.println(str);Serial3.print(str+"\r\n");} if (Serial3.available() > 0) { str = Serial3.readString();Serial.println(str); a = str.indexOf("QM+01");if(a>=0){w0=1;times0=millis();usb = 0;Serial.print(str.substring(a+0,a+5));}//blu a = str.indexOf("QM+02");if(a>=0){w0=1;times0=millis();usb = 1;Serial.print(str.substring(a+0,a+5));}//usb a = str.indexOf("M1+");if(a>=0){str.setCharAt(a+4, 'x');trek = strtol(str.substring(a+3,a+11).c_str(),NULL,0);} a = str.indexOf("M2+");if(a>=0){str.setCharAt(a+4, 'x');trek_all = strtol(str.substring(a+3,a+11).c_str(),NULL,0);} a = str.indexOf("MT+");if(a>=0){str.setCharAt(a+4, 'x');trek_time = strtol(str.substring(a+3,a+11).c_str(),NULL,0);} a = str.indexOf("MK+");if(a>=0){str.setCharAt(a+4, 'x');trek_off = strtol(str.substring(a+3,a+11).c_str(),NULL,0);} a = str.indexOf("TS+00");if(a>=0){blu_sos=0;} a = str.indexOf("TS+01");if(a>=0){blu_sos=1;} a = str.indexOf("TS+02");if(a>=0){blu_sos=2;} a = str.indexOf("QA+");if(a>=0){vol = str.substring(a+3,a+5).toInt();}//vol } if(usb==0){ u8x8.setCursor(0,0);u8x8.print("Bluetooth "); u8x8.setCursor(0,2); switch(blu_sos){ case 0: u8x8.print("not connected");break; case 1: u8x8.print("connected ");break; case 2: u8x8.print("play ");break; } u8x8.setCursor(0,3);u8x8.print(" "); } if(usb==1){ if(pp==0){u8x8.setCursor(0,0);u8x8.print("USB play ");} if(pp==1){u8x8.setCursor(0,0);u8x8.print("USB pause ");} u8x8.setCursor(0,2);u8x8.print("File ");u8x8.print(trek);u8x8.print("(");u8x8.print(trek_all);u8x8.print(") "); u8x8.setCursor(0,3);u8x8.print("Time "); int minut = trek_time / 60;int secon = trek_time - (minut * 60);u8x8.print(minut);u8x8.print(":");u8x8.print(secon/10);u8x8.print(secon%10); u8x8.print(" "); int minut_off = trek_off / 60;int secon_off = trek_off - (minut_off * 60); u8x8.print(minut_off);u8x8.print(":");u8x8.print(secon_off/10);u8x8.print(secon_off%10);u8x8.print(" "); if(millis()-times>999 && pp==0){times=millis();trek_off=trek_off+1;} if(millis()-times0>1999 && w0==1){w0=0;Serial3.print("AT+M1\r\n");} } u8x8.setCursor(0,5);u8x8.print("VOLUME ");u8x8.print(vol/10);u8x8.print(vol%10); }
Здравствуйте,вы не могли бы добавить вывод текста на экран?
точнее название треков
В мониторе порта отображаются только 8 символов названия трека, точнее путь к файлу, символы кириллицы вообще не отображаются, если ли смысл выводить эту информацию на дисплей?
я просто общялся на радиокоте он должен выводить 42 символа,остальное затирает
https://www.youtube.com/watch?v=Rxjv6OwZwz0 видео работы с таким модулем
я тут тоже разбирался с этим модулем,выяснялось что их 2 вида.В общем у меня не выводит название файлов как положено.заказал другой тип