Уважаемые гости и пользователи форума!
Чтобы видеть ссылки на форуме - надо зарегистрироваться и иметь 1 пост на форуме. Для этого есть КУРИЛКА и там тема Здрасти.
Необходимость регистрации - это защита от спамеров и ботов. Если это условие кого-то оскорбляет, проходите мимо. Не нравится - не заставляю.

Радиола-2 - Музыкальный центр на ESP32 своими руками

ESP32 — серия недорогих микроконтроллеров с низким энергопотреблением. Представляют собой систему на кристалле с интегрированным Wi-Fi и Bluetooth контроллерами и антеннами.

Модераторы: rewuxiin, kulia

Правила форума
Условием использования нашего форума, является соблюдение настоящих Правил форума.

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам, а вы рискуете получить предупреждение.
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 3037
Зарегистрирован: 23 янв 2012, 22:11

Радиола-2 - Музыкальный центр на ESP32 своими руками

19 окт 2019, 07:10

Радиола-2 - Музыкальный центр на ESP32 своими руками.
ЭТА ТЕМА ЗАКРЫТА!
Писать в теме Радиола-2S3!
Чтобы видеть ссылки в теме - надо зарегистрироваться и иметь 1 пост на форуме. Для этого есть КУРИЛКА и там тема Здрасти.
boot.png
Radiola-2.png
Радиола-2 версия 3.1
Пока для ESP32-S3 8M, 16M flash 8M PSRAM
поддержка VS10xx и PCM5102A. Дисплеи ILI9488 и LI9341
► Показать

ПРОШИВКИ

СХЕМА РАДИОЛЫ-2S3
Подключение SD-карты к ESP32-S3
Используемый усилитель и схема доработки для VS10XX
Настройка FTP-клиента FileZilla для подключения к Радиоле-2
TG-канал
Группа Радиола-2
Предварительная схема ESP32-WROVER

Команда в консоли для первого подключения к WI-FI (БЕЗ КАВЫЧЕК!):

Код:

У вас недостаточно прав для просмотра этой ссылки.

wifi.con(ssid,password)
sys.boot
Radiola-2 - Часто задаваемые Вопросы (ЧАВО)
Файл с логом присылайте сюда. Удачи! :-)
Пишите, спрашивайте, не стесняйтесь..
► Показать
У вас нет необходимых прав для просмотра вложений в этом сообщении.
У вас недостаточно прав для просмотра этой ссылки.
Аватара пользователя
kulia
Откуда: Москва
Сообщения: 147
Зарегистрирован: 28 май 2014, 14:59

Re: Музыкальный центр с управлением на ESP32 своими руками

21 окт 2019, 08:16

Круто! Где купить/цена проекта в студию! 👍
Создал на Линукс-форуме тему "Установка Internet Explorer под Убунту".
Тему удалили через 4 минуты, выдали бан на 10 дней...
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 3037
Зарегистрирован: 23 янв 2012, 22:11

Re: Музыкальный центр с управлением на ESP32 своими руками

21 окт 2019, 09:01

kulia писал(а):
21 окт 2019, 08:16
Круто! Где купить/цена проекта в студию! 👍
Алиэкспресс, Ebay - самые дешёвые варианты. Только надо внимательно покупать. :-) Ну, а цена вопроса... Блин. Я все компоненты приобретал постепенно.
300р. - ESP32 (с внешней доп. ОЗУ)
400р. - VS1053B MP3 модуль для интернет-радио и проигрывания файлов с sd-карты. (музыка, будильник, говорящие часы)
700. - дисплей (самый дорогой компонент)
400р. - 2 платы усилителя мощности.
100р. - аудиопроцессор (я выдрал со старой автомагнитолы)
60р. - ИК-пульт с ик-приёмником в комплекте. (У меня пульт и приёмник от старого телевизора Goldstar)
Основную печатную плату заказал на PCBWay. Первый заказ на 5$ бесплатно, оплата только за доставку.

А если есть старая автомагнитола, муз. центр, телевизор, то много чего можно использовать в проекте.
Пишите название модели аппарата, подскажу что можно раскурочить. :-D
У вас недостаточно прав для просмотра этой ссылки.
Na
Nadim

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

25 янв 2020, 01:22

Немного перевел с китайского (гуглом) описание модуля BT201
У вас недостаточно прав для просмотра этой ссылки.


На ESP32 есть проекты с MP3 аудио плеером - может можно перенести MP3 плеер в этот проект:

ogo-shell - это файловый браузер, аудио плеер и программа просмотра изображений для ODROID-GO ESP32
У вас недостаточно прав для просмотра этой ссылки.


Еще один проект на ESP32 где используется только аудио плеер от проекта ogo-shell
У вас недостаточно прав для просмотра этой ссылки.

У вас недостаточно прав для просмотра этой ссылки.
folks
Сообщения: 1
Зарегистрирован: 11 дек 2020, 14:49

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

14 дек 2020, 12:57

Я так понял , что поддержки PCM 5102 в этом проекте нет ?
Dust112
Сообщения: 29
Зарегистрирован: 04 ноя 2020, 12:33

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

14 дек 2020, 13:51

Немного по железу. Расширить количество пинов для увеличения функционала можно за счет MCP23017 - до 16 или PCF8574 - до 8, обе i2c.
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 3037
Зарегистрирован: 23 янв 2012, 22:11

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

14 дек 2020, 15:58

folks писал(а):
14 дек 2020, 12:57
Я так понял , что поддержки PCM 5102 в этом проекте нет ?
Поддержки PCM 5102 в этом проекте нет. И в ближайшей перспективе не планируется.
Dust112 писал(а):
14 дек 2020, 13:51
Расширить количество пинов для увеличения функционала можно
Спасибо, я в курсе :-) . Но в планах расширения функционала нет. Ибо даже под текущее железо пока ещё не весь софт написан :-[ .
У вас недостаточно прав для просмотра этой ссылки.
Dust112
Сообщения: 29
Зарегистрирован: 04 ноя 2020, 12:33

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

15 дек 2020, 22:04

Залил отладочную. В консоли настроил wi-fi соединение. Вход в вебморду оперой, в настройках не выбираются пункты (настройка пины, пульт и т.д.).
В IE ообще ничего не выбирается. Перешивал на чистую раза четыре. Железо: врум с доп памятью, переферия не подключена. В консоли webserver: WebServer Socket fails try again errno: 11
При воспроизведении станции в консоли адрес имеет вид ##CLI.ICY3#: http:\/\/95.213.143.165:8010\/radiosept320.mp3
Nadim
Сообщения: 9
Зарегистрирован: 12 авг 2020, 18:45

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

16 дек 2020, 00:38

Прошивку удалось запустить - я с проводами напутал. Есть баг, нет возможности поменять GPIO. новые gpio не сохраняются в NVS.
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 3037
Зарегистрирован: 23 янв 2012, 22:11

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

16 дек 2020, 03:07

Dust112 писал(а):
15 дек 2020, 22:04
В IE ообще ничего не выбирается.
Дык и КаРадио в нём не работает :-) У IE нет поддержки локального хранилища. Говорю сразу - не просите. Коду добавлять немеряно.
Dust112 писал(а):
15 дек 2020, 22:04
Вход в вебморду оперой, в настройках не выбираются пункты (настройка пины, пульт и т.д.).
Nadim писал(а):
16 дек 2020, 00:38
Есть баг, нет возможности поменять GPIO. новые gpio не сохраняются в NVS.
Спасибо, буду исправлять. Я это не проверял. :-[
У вас недостаточно прав для просмотра этой ссылки.
pilnikov
Сообщения: 14
Зарегистрирован: 21 ноя 2020, 22:25

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

16 дек 2020, 16:07

В webclient.c строчка 1217
vTaskDelay(300);
Зачем столько?
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 3037
Зарегистрирован: 23 янв 2012, 22:11

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

16 дек 2020, 16:57

pilnikov писал(а):
16 дек 2020, 16:07
vTaskDelay(300);
Бесполезная, на мой взгляд, задержка.
И такого кода в КаРадио немеряно. Туча лишних циклов. Нелепые проверки. Логгирование каждого пука. Есть участки кода просто в фигурных скобках. Особо "вставляет" код проверки считывания данных из FLASH, если битые... обрезаем, обнуляем, но продолжаем работать :-D . НАХРЕНА, спрашивается? =-O Флеш умерла. *SCRATCH* *DONT_KNOW*
У вас недостаточно прав для просмотра этой ссылки.
Dust112
Сообщения: 29
Зарегистрирован: 04 ноя 2020, 12:33

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

16 дек 2020, 18:11

По прошивке, переназначил пины для vs, на все остальные - 255. Модуль в ступоре E (2637) gpio: GPIO_PIN mask error ESP_ERROR_CHECK failed: esp_err_t 0x102 (ESP_ERR_INVALID_ARG) at 0x4008e770
file: "components/ucglib/src/ucg_esp32_hal.c" line 118
func: ucg_com_hal
expression: gpio_config(&gpioConfig)
Dust112
Сообщения: 29
Зарегистрирован: 04 ноя 2020, 12:33

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

16 дек 2020, 18:30

Сейчас прогнал по пинам. Значение в SPI не переписывал. Зависон при записи 255 (не используется) в пины управления дисплеем. Достаточно записать в один из пинов управления дисплеем 255. Как понимаю в коде нет проверки на вариант не использования дисплея.
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 3037
Зарегистрирован: 23 янв 2012, 22:11

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

16 дек 2020, 18:34

Dust112 писал(а):
16 дек 2020, 18:30
Как понимаю в коде нет проверки на вариант не использования дисплея.
Проверки на отсутствие дисплея нет, ибо он прописан в минимальной конфигурации :-D
А пока просто не пишите 255 пинам, управляющим дисплеем. Просто проследите, чтобы не было дублей с другими пинами.
Исправлю в ближайшее время.
У вас недостаточно прав для просмотра этой ссылки.
Dust112
Сообщения: 29
Зарегистрирован: 04 ноя 2020, 12:33

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

16 дек 2020, 19:04

Без вмешательства в пины все заиграло. Легкие подергивания звука при выводе в консоль размер свободного буфера. Отключил вывод в консоль, все равно легкое подергивания.
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 3037
Зарегистрирован: 23 янв 2012, 22:11

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

16 дек 2020, 19:07

Вырезал переназначение типа шины SPI через веб-интерфейс. Только сбивает столку, а практического смысла нет.
Переназначить можно только через menuconfig перед компиляцией прошивки.
У вас недостаточно прав для просмотра этой ссылки.
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 3037
Зарегистрирован: 23 янв 2012, 22:11

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

16 дек 2020, 19:08

Dust112 писал(а):
16 дек 2020, 19:04
Без вмешательства в пины все заиграло. Легкие подергивания звука при выводе в консоль размер свободного буфера. Отключил вывод в консоль, все равно легкое подергивания.
Ссылку на поток, проверю. У меня все станции без затыков играют.
У вас недостаточно прав для просмотра этой ссылки.
Dust112
Сообщения: 29
Зарегистрирован: 04 ноя 2020, 12:33

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

16 дек 2020, 19:32

Еще погоняю, может это просто стечение обстоятельств. По типу шины согласен, не нужно знать основной массе пользователей. К слову в win10 связка VSC и PlatformIO исходники собирает нормально. Сейчас играет вроде нормально.
alexsumi
Сообщения: 1
Зарегистрирован: 16 дек 2020, 19:32

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

16 дек 2020, 19:35

Хорошее начало. этот проект надо развивать.
pilnikov
Сообщения: 14
Зарегистрирован: 21 ноя 2020, 22:25

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

16 дек 2020, 22:34

SinglWolf писал(а):
16 дек 2020, 16:57
pilnikov писал(а):
16 дек 2020, 16:07
vTaskDelay(300);
Бесполезная, на мой взгляд, задержка.
И такого кода в КаРадио немеряно. Туча лишних циклов. Нелепые проверки. Логгирование каждого пука. Есть участки кода просто в фигурных скобках. Особо "вставляет" код проверки считывания данных из FLASH, если битые... обрезаем, обнуляем, но продолжаем работать :-D . НАХРЕНА, спрашивается? =-O Флеш умерла. *SCRATCH* *DONT_KNOW*
я это к чему все -
убавил до 30 (можно еще меньше наверняка). сделал вебклиенту самый высокий приоритет - шевелится стало побыстрее (в вебморде) но не суть - самое главное стало меньше затыков при хреновом канале (только не при обрывах) за счет более быстрого наполнения буфера к.м.к.
еще послушал enjoyengeener'a сделал громкость в ffff для устранения щелчков сразу после резета чипа.
убрал второй резет сразу за первым.
сделал инфо о потоке (тока формат (мп3, аас...) не хочет пока показывать)
У вас недостаточно прав для просмотра этой ссылки.
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 3037
Зарегистрирован: 23 янв 2012, 22:11

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

17 дек 2020, 09:26

pilnikov писал(а):
16 дек 2020, 22:34
убавил до 30 (можно еще меньше наверняка).
Вы меня не слушаете совсем, или как?
Я же сказал - это бесполезная задержка. Даже больше скажу - вредная, ибо задерживается запуск всего девайса на 0,3 сек. (Казалось бы не критично, но у задержек есть свойство суммироваться.)
Объясняю на пальцах (на куске кода функции):

Код:

У вас недостаточно прав для просмотра этой ссылки.

//Фрагмент из main_app
// запуск задач
// задачи запускаются только ОДИН раз...
// у каждой задачи есть бесконечный цикл, в котором обрабатываются те или иные события...
xTaskCreatePinnedToCore(uartInterfaceTask, "uartInterfaceTask", 2400, NULL, PRIO_UART, &pxCreatedTask, CPU_UART);
ESP_LOGI(TAG, "%s task: %x", "uartInterfaceTask", (unsigned int)pxCreatedTask);
vTaskDelay(1); // Пауза между запусками задач
// Запуск нашей задачи, где есть затычка-тормоз
xTaskCreatePinnedToCore(clientTask, "clientTask", 3000, NULL, PRIO_CLIENT, &pxCreatedTask, CPU_CLIENT);
ESP_LOGI(TAG, "%s task: %x", "clientTask", (unsigned int)pxCreatedTask);
vTaskDelay(1)

// Фрагмент кода задачи
void clientTask(void *pvParams)
{
portBASE_TYPE uxHighWaterMark;
struct timeval timeout;
timeout.tv_usec = 0;
timeout.tv_sec = 3;
int sockfd;
int bytes_read;
uint8_t cnterror;

struct sockaddr_in dest;

vTaskDelay(300); /// ТОРМОЗИМ АЖ 0,3 секунды... НАФИГА????

strcpy(useragent, MainConfig->ua);
if (strlen(useragent) == 0)
{
strcpy(useragent, "ESP32Radiola/1.5");
strcpy(MainConfig->ua, useragent);
}

while (1)
{
// ТУТ запускается бесконечный цикл задачи КЛИЕНТА
// Он будет крутиться до выключения питания
Надеюсь, что внятно объяснил...
pilnikov писал(а):
16 дек 2020, 22:34
сделал вебклиенту самый высокий приоритет - шевелится стало побыстрее (в вебморде) но не суть - самое главное стало меньше затыков при хреновом канале (только не при обрывах) за счет более быстрого наполнения буфера к.м.к.
Это хорошо, но, на мой взгляд, основные тормоза дают: первое - логгирование почти каждого пука + то, что идёт в выхлоп консоли\телнета и второе - трансляция сообщений идёт не только на дисплей, дубли идут в вебморду, консоль, телнет.
Короче говоря, я удивляюсь как esp32 всё это вытягивает %)
pilnikov писал(а):
16 дек 2020, 22:34
еще послушал enjoyengeener'a сделал громкость в ffff для устранения щелчков сразу после резета чипа.
убрал второй резет сразу за первым.
У меня давным давно только один софтовый сброс VS-ки. В штатном режиме никаких щелчков нет.
pilnikov писал(а):
16 дек 2020, 22:34
сделал инфо о потоке (тока формат (мп3, аас...) не хочет пока показывать)
Не нашёл :-[
У вас недостаточно прав для просмотра этой ссылки.
pilnikov
Сообщения: 14
Зарегистрирован: 21 ноя 2020, 22:25

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

17 дек 2020, 14:17

Строка 360 в vs1053.c
pilnikov
Сообщения: 14
Зарегистрирован: 21 ноя 2020, 22:25

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

17 дек 2020, 14:22

300 это задержка задачи клиента - она крутится на постоянке - и задержка на каждый цикл.
Тут где-то почитал, что задачи установки соединения (handshake) и обмена данными в открытом сокете надо тоже разводить
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 3037
Зарегистрирован: 23 янв 2012, 22:11

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

17 дек 2020, 16:44

pilnikov писал(а):
17 дек 2020, 14:22
300 это задержка задачи клиента - она крутится на постоянке - и задержка на каждый цикл.
Это последняя попытка растолковать очевидную вещь...
► Показать

Код:

У вас недостаточно прав для просмотра этой ссылки.

void clientTask(void *pvParams)
{
portBASE_TYPE uxHighWaterMark;
struct timeval timeout;
timeout.tv_usec = 0;
timeout.tv_sec = 3;
int sockfd;
int bytes_read;
uint8_t cnterror;

struct sockaddr_in dest;

vTaskDelay(300);

strcpy(useragent, g_device->ua);
if (strlen(useragent) == 0)
{
strcpy(useragent, "ESP32Radiola/1.5");
strcpy(g_device->ua, useragent);
}

// portBASE_TYPE uxHighWaterMark;
// uxHighWaterMark = uxTaskGetStackHighWaterMark( NULL );
// printf("watermark webclient:%d heap:%d\n",uxHighWaterMark,xPortGetFreeHeapSize( ));

while (1) // ЭТО ОБЪЯВЛЕНИЕ БЕСКОНЕЧНОГО ЦИКЛА!!!!!!!!!!!!!!
{ // Начало тела цикла
xSemaphoreGive(sConnected);
if (xSemaphoreTake(sConnect, portMAX_DELAY))
{

xSemaphoreTake(sDisconnect, 0);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
ESP_LOGI(TAG, "Webclient socket: %d, errno: %d", sockfd, errno);
if (sockfd < 0)
{
ESP_LOGE(TAG, "Webclient socket create, errno: %d", errno);
xSemaphoreGive(sDisconnect);
continue;
}
bzero(&dest, sizeof(dest));
dest.sin_family = AF_INET;
dest.sin_port = htons(clientPort);
dest.sin_addr.s_addr = inet_addr(inet_ntoa(*(struct in_addr *)(server->h_addr_list[0])));
bytes_read = 0;
/*---Connect to server---*/
if (connect(sockfd, (struct sockaddr *)&dest, sizeof(dest)) >= 0)
{
// printf("WebClient Socket connected\n");
memset(bufrec, 0, RECEIVE + 20);

char *t0 = strstr(clientPath, ".m3u");
if (t0 == NULL)
t0 = strstr(clientPath, ".pls");
if (t0 == NULL)
t0 = strstr(clientPath, ".xspf");
if (t0 == NULL)
t0 = strstr(clientPath, ".m3u8");
if (t0 == NULL)
t0 = strstr(clientPath, ".asx");
if (t0 != NULL) // a playlist asked
{
cstatus = C_PLAYLIST;
//printf("sprint%d\n",6);
sprintf((char *)bufrec, "GET %s HTTP/1.1\r\nHOST: %s\r\nUser-Agent: %s\r\n\r\n", clientPath, clientURL, useragent); //ask for the playlist
}
else
{
if (strcmp(clientURL, "stream.pcradio.biz") == 0)
strcpy(useragent, "pcradio");
//printf("sprint%d\n",7);
sprintf((char *)bufrec, "GET %s HTTP/1.1\r\nHost: %s\r\nicy-metadata: 1\r\nUser-Agent: %s\r\n\r\n", clientPath, clientURL, useragent);
}
//printf("st:%d, Client Sent:\n%s\n",cstatus,bufrec);
xSemaphoreTake(sConnected, 0);
send(sockfd, (char *)bufrec, strlen((char *)bufrec), 0);

if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)) < 0)
ESP_LOGE(TAG, "Client socket: %d setsockopt: %d errno:%d ", sockfd, bytes_read, errno);
//////
cnterror = 0;
do
{
bytes_read = recvfrom(sockfd, bufrec, RECEIVE, 0, NULL, NULL);
if (bytes_read < 0)
{
ESP_LOGE(TAG, "Client socket: %d read: %d errno:%d ", sockfd, bytes_read, errno);
if (errno == 11)
bytes_read = 0;
}
//if (bytes_read < 1000 )
// printf("Rec:%d\n%s\n",bytes_read,bufrec);
// printf(" %d ",bytes_read); fflush(stdout);
if (bytes_read > 0)
{
cnterror = 0;
clientReceiveCallback(sockfd, (char *)bufrec, bytes_read);
}
else
{
ESP_LOGW(TAG, "No data in recv. Errno = %d", errno);
cnterror++;
if (errno != 11)
vTaskDelay(20); //timeout
else
vTaskDelay(2);
if ((errno == 128) || (cnterror > 9))
break;
}
vTaskDelay(2);
// if a stop is asked
if (xSemaphoreTake(sDisconnect, 0))
{
clearHeaders();
break;
}
} while ((bytes_read > 0) || (playing && (bytes_read == 0)));
}
else
{
ESP_LOGE(TAG, "Client socket: %d connect: %d errno:%d ", sockfd, bytes_read, errno);
clientSaveOneHeader("Invalid address", 15, METANAME);
wsHeaders();
vTaskDelay(1);
clientDisconnect("Invalid");
close(sockfd);
continue;
}
/*---Clean up---*/
if (bytes_read <= 0) //nothing received or error or disconnected
{
if ((playing) && (once == 0)) // try restart
{
clientDisconnect("try restart");
clientConnect();
playing = 1; // force
}
else if ((!playing) && (once == 1))
{ // nothing played. Force the read of the buffer
// some data not played
if ((!playing) && (spiRamFifoFill()))
{
playing = 1;
vTaskDelay(1);
setVolumei(getVolume());
kprintf(CLIPLAY, 0x0d, 0x0a);
while (spiRamFifoFill())
vTaskDelay(100);
vTaskDelay(150);
playing = 0;
clientDisconnect("data not played");
}
}
//
else if ((!playing) && (once == 0))
{ // nothing received
clientDisconnect(nodata);
clientSaveOneHeader(nodata, 7, METANAME);
wsHeaders();
vTaskDelay(1);
}
else
{ //playing & once=1 and no more received stream
while (spiRamFifoFill())
vTaskDelay(100);
vTaskDelay(200);
clientDisconnect("once");
}
} //jpc

if (playing) // stop clean
{
setVolumei(0);
audio_player_stop();
player_config->media_stream->eof = true;
//
VS1053_flush_cancel(2);
playing = 0;
vTaskDelay(40); // stop without click
setVolumei(getVolume());
}

//
shutdown(sockfd, SHUT_RDWR); // stop the socket
vTaskDelay(1);
close(sockfd);
//printf("WebClient Socket closed\n");
if (cstatus == C_PLAYLIST)
{
clientConnect();
}
uxHighWaterMark = uxTaskGetStackHighWaterMark(NULL);
ESP_LOGI(TAG, "watermark : %x %d", uxHighWaterMark, uxHighWaterMark);
}
}
}
Как задержка

Код:

У вас недостаточно прав для просмотра этой ссылки.

vTaskDelay(300);
в начале функции и ДО тела цикла может влиять на каждый цикл задачи клиента??? НИКАК!!!
ДОШЛО :-) ? Иначе в Си я вам не помощник :-|
pilnikov писал(а):
17 дек 2020, 14:22
Тут где-то почитал, что задачи установки соединения (handshake) и обмена данными в открытом сокете надо тоже разводить
*DONT_KNOW* Если задержка до тела цикла влияет на каждый цикл, то надо...
Только я не понимаю как можно с самого начала запихать в одну задачу установку соединения и обмен данными в открытом сокете *SCRATCH* :-| *PARDON*
Надо послушать enjoyneering'a по этому поводу.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
У вас недостаточно прав для просмотра этой ссылки.
pilnikov
Сообщения: 14
Зарегистрирован: 21 ноя 2020, 22:25

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

17 дек 2020, 20:46

Ок, признаю свою тупость про цикличную задержку. Сказался стереотип построения таски - когда вайл в самом начале. Каюсь - затупил слегка старый пень.
Но два резета в оригинале(у JP) были. У меня щелкало 2 раза. Я даже AVDD снимал на старте чтобы их убрать - помогает.
pilnikov
Сообщения: 14
Зарегистрирован: 21 ноя 2020, 22:25

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

17 дек 2020, 21:08

а по поводу вебсокетов - lwip_connect выполняется в клиент-таске внутри вайла каждый раз

Код:

У вас недостаточно прав для просмотра этой ссылки.

while (1)
{
xSemaphoreGive(sConnected);
if (xSemaphoreTake(sConnect, portMAX_DELAY))
{
xSemaphoreTake(sDisconnect, 0);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
sterr = lwip_strerr(errno);
ESP_LOGI(TAG, "Webclient socket: %d, err: %s", sockfd, sterr);
if (sockfd < 0)
{
sterr = lwip_strerr(errno);
ESP_LOGE(TAG, "Webclient socket create, err: %s", sterr);
xSemaphoreGive(sDisconnect);
continue;
}
bzero(&dest, sizeof(dest));
dest.sin_family = AF_INET;
dest.sin_port = htons(clientPort);
dest.sin_addr.s_addr = inet_addr(inet_ntoa(*(struct in_addr*)(server->h_addr_list[0])));
bytes_read = 0;

/*---Connect to server---*/
if (connect(sockfd, (struct sockaddr*) & dest, sizeof(dest)) >= 0)
{
// printf("WebClient Socket connected\n");
и только при поступлении данных в буфер

Код:

У вас недостаточно прав для просмотра этой ссылки.

if (bytes_read > 0)
{
cnterror = 0;
clientReceiveCallback(sockfd, (char*)bufrec, bytes_read);
}
запускается некое подобие обработчика в виде clientReceiveCallback()

хотя например здесь

Код:

У вас недостаточно прав для просмотра этой ссылки.

esp_websocket_client_handle_t client = esp_websocket_client_init(&websocket_cfg);
esp_websocket_register_events(client, WEBSOCKET_EVENT_ANY, websocket_event_handler, (void *)client); // ТУТА

esp_websocket_client_start(client);
xTimerStart(shutdown_signal_timer, portMAX_DELAY);
char data[32];
int i = 0;
while (i < 10) {
if (esp_websocket_client_is_connected(client)) {
int len = sprintf(data, "hello %04d", i++);
ESP_LOGI(TAG, "Sending %s", data);
esp_websocket_client_send_text(client, data, len, portMAX_DELAY);
}
обработчик создается на стадии соединения и основная часть задачи оперирует уже только результатом его работы -esp_websocket_client_is_connected(client)
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 3037
Зарегистрирован: 23 янв 2012, 22:11

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

17 дек 2020, 21:12

pilnikov писал(а):
17 дек 2020, 20:46
Ок, признаю свою тупость про цикличную задержку. Сказался стереотип построения таски - когда вайл в самом начале. Каюсь - затупил слегка старый пень.
Ок. Значит не всё так безнадёжно :-D
pilnikov писал(а):
17 дек 2020, 20:46
Но два резета в оригинале(у JP) были. У меня щелкало 2 раза. Я даже AVDD снимал на старте чтобы их убрать - помогает.
У меня VS не щёлкает. Остался 1 Софт ресет. Пин хард ресета VS соединён с пином сброса ESP-32. Щёлкать начинает, если при проигрывании музыки нажать кнопку сброса, а это не штатный режим. Так что я уже забыл эту проблему. Хотя чуть было не бросил проект из-за молчания VS при первом включении, петь начинала только при программном сбросе ESP-32. Намаялся я с VS-кой тогда сильно.
pilnikov писал(а):
17 дек 2020, 21:08
а по поводу вебсокетов - lwip_connect выполняется в клиент-таске внутри вайла каждый раз
Оформляйте код нормально, пожалуйста.
Websockets буду пилить, но позднее...
У вас недостаточно прав для просмотра этой ссылки.
pilnikov
Сообщения: 14
Зарегистрирован: 21 ноя 2020, 22:25

Re: ESP32-Radiola - Музыкальный центр с управлением на ESP32 своими руками

17 дек 2020, 23:30

Код:

У вас недостаточно прав для просмотра этой ссылки.

##CLI.META#: ФАКТОР 2 - Красавица
I (478544) audio_player: Buffer fill 0%, 2037 // 1048576 bytes
250s 1983.9 kb/s 44100Hz stereo MP3 h = 0xFFFB
E (482184) VS10xx: Music buffer is emty - Nothing playing :(
E (482734) VS10xx: Music buffer is emty - Nothing playing :(
E (484794) VS10xx: Music buffer is emty - Nothing playing :(
I (494224) audio_player: Buffer fill 0%, 6203 // 1048576 bytes
266s 1960.8 kb/s 44100Hz stereo MP3 h = 0xFFFB
I (510184) audio_player: Buffer fill 0%, 6515 // 1048576 bytes
282s 1940.4 kb/s 44100Hz stereo MP3 h = 0xFFFB
E (512514) VS10xx: Music buffer is emty - Nothing playing :(
E (517754) VS10xx: Music buffer is emty - Nothing playing :(
E (518544) VS10xx: Music buffer is emty - Nothing playing :(
E (519804) VS10xx: Music buffer is emty - Nothing playing :(
E (522984) VS10xx: Music buffer is emty - Nothing playing :(
I (526284) audio_player: Buffer fill 0%, 4469 // 1048576 bytes
298s 1922.0 kb/s 44100Hz stereo MP3 h = 0xFFFB
E (534744) VS10xx: Music buffer is emty - Nothing playing :(
E (536024) VS10xx: Music buffer is emty - Nothing playing :(
E (541504) VS10xx: Music buffer is emty - Nothing playing :(
E (542314) VS10xx: Music buffer is emty - Nothing playing :(
I (542384) audio_player: Buffer fill 0%, 3821 // 1048576 bytes
314s 1905.7 kb/s 44100Hz stereo MP3 h = 0xFFFB
E (548064) VS10xx: Music buffer is emty - Nothing playing :(
E (553834) VS10xx: Music buffer is emty - Nothing playing :(
I (558414) audio_player: Buffer fill 0%, 1785 // 1048576 bytes
330s 1890.8 kb/s 44100Hz stereo MP3 h = 0xFFFB
I (574184) audio_player: Buffer fill 0%, 6862 // 1048576 bytes
346s 1877.4 kb/s 44100Hz stereo MP3 h = 0xFFFB
E (576514) VS10xx: Music buffer is emty - Nothing playing :(
вот такой у меня лог обычно. при этом поет не заикаясь

Вернуться в «ESP32»