Плюсы

воскресенье, 22 октября 2017 г.

Karadio - интернет радио на базе ESP32

Это вторая статья о замечательном проекте Karadio, который создан хорошим программистом и я уверен человеком, - JP Cocatrix. Страница всех его проектов на Github.
Но речь пойдет сегодня о новой ступени развития проекта Karadio - интернет радио на базе ESP32.
Постараюсь очень четко и по делу написать в помощь тем, кто, как и я плохо понимает иностранные языки, электронику.  Однако, иметь такое интересное радио хочется всем. Будет и просто перевод с github и мои дополнения.
Проект находится на стадии тестирования,  уверен, это скоро изменится. Для вывода звука можно исплользовать внутренний DAC (ЦАП), находящийся в ESP32 или подключить внешний DAC, например такой на Aliexpress.Ссылка может перестать работать, но можно поиском найти по запросу I2S PCM5102 DAC или просто I2S DAC. 
При использовании внутреннего DAC ничего не нужно, кроме усилителя, например PA8403 (с регулятором громкости даже). Либо использовать уже знакомую нам связку ESP32 и VS1053, при этом будет возможность прослушивать потоки AAC, чего нельзя сказать о режиме DAC или PDM. На режиме PDM я не буду останавливаться, потому что смысл будет такой же, как и у внутреннего DAC. Я попробовал включить этот режим, но шум сильный, как во время дождя. Автор Karawin пояснил, что нужна фильтрация. Я не стал заморачиваться, потому что с внутренним DAC качество воспроизведения меня удовлетворило. Если что можно применить внешний DAC или VS1053. Еще есть режим I2SMERU для подключения какого-то особого усилителя, можете сами разузнать.
Сначала займемся прошивкой ESP32. Будем говорить о заливке уже скомпилированной прошивки в память. Все необходимое для прошивки можно взять тут. Программа для прошивки здесь. Сама прошивка в нескольких файлах тут и тут. Скриншот программы, поясняющий куда и что заливать тут. Все выставляете, как написано, но пути к прошивочным файлам у вас могут быть свои (не стоит использовать пути с кириллическими символами, лучше только латиницей). Т. е. распаковываете все файлы для прошивки в отдельную папку (можно назвать ее Flash) на диске C: , потом путем нажатия на многоточия в конце строк прописываете аккуратно все пути к этим файлам. Правее в поле вводите то, что написано, на скриншоте.

Все остальное прописываете, как на скрине, кроме порта COM, его вы меняете на свой. посмотреть его можно в Диспетчере устройств, при подключении ESP32 появится COM порт (если драйверы вы уже поставили). Драйверы зависят от вашей операционной системы  и типа USB- COM адаптера, который установлен на вашей ESP32. Скорость BAUD как на картинке. Подключаете ESP32 к компьютеру и нажимаете START (у меня было так, никаких кнопок на самой плате я не нажимал). Ждете окончания прошивки и отключаете плату от USB. Можно приступать к соединению всей периферии.

Схема соединений

Сильно схеме не доверяйте, доверяйте только себе, но нарочно я не ввожу в заблуждение. Батарейки изображены условно, необходимо подключить 5В. Сегодня измерял ток потребления 0,15А при малой громкости. Блока питания на 0,5 - 1А должно хватить. Питание зависит от усилителя.
Итак,  если вы используете VS1053, то соединения такие:
 VS1053----ESP32 (номера GPIO)

XCS-----  GPIO_NUM_32
RST-----  GPIO_NUM_12
XDCS----- GPIO_NUM_33
DREQ----- GPIO_NUM_34
MISO----- GPIO_NUM_19
MOSI----- GPIO_NUM_23
CLK-----  GPIO_NUM_18
 
У меня номера GPIO указаны на самой плате или смотрите распиновку
Если используете внешний DAC по I2S, то соединения такие:
I2S DAC----ESP32
LRCK-------- GPIO_25
BCLK------- GPIO_26
DATA------- GPIO_22
Если используете DAC самой платы ESP32, то GPIO 25 и 26 подключаете к правому и левому каналу усилителя, а также соединяете GND усилителя и GND ESP32. GPIO 22 при этом не нужен. Также и для PDM режим, только надо будет выбрать его в web интерфейсе и все (ну и про фильтр вспомните для этого режима).
На данный момент поддерживается использование дисплея  OLED SSD1306 128x64.
Подсоединяем так:
SSD1306-----ESP32
SCL------ GPIO_14
SDA------ GPIO_13
МСС -----3.3v (или 5v)
GND-------GND
 
 
Энкодер:
DT-------GPIO_16
CLK ----  GPIO_17
SW------- GPIO_5
GND ---GND
+-----+5V
 
 
Дополнительно можно подключить светодиод для индикации работы радио ---GPIO 4.

Включение 

Проверяете все соединения и подключаете питание. На схеме показано общее питание для всей схемы, но предпочтительнее использовать отдельное питание для ESP32 и усилителя, для того, чтобы избежать дополнительных шумов. В режиме DAC при общем питании шумы я не заметил и качество хорошее. Смотрите сами. 
Через некоторое время после включения ESP32 создаст точку доступа WifiKaradio с IP адресом 192.168.4.1. Подключаетесь к этой сети с компьютера и в браузере переходите по этому IP. Переходите на вкладку SETTING и находите настройки Wifi. Вписываете данные своего роутера и нажимаете Validate, радио может перезагрузиться. В роутере ищите какой адрес IP выдан радио. В некоторых роутерах можно оставить автоматическую раздачу IP (DHCP), но для отдельных устройств назначить постоянные адреса, чтобы каждый раз не отгадывать IP.

После перезагрузки переходите в SETTING в Sound Setting и выбираете режим вывода звука, затем нажимаете Validate.

После перезагрузки можете приступить к формированию своего списка радиостанций или скачать уже созданный на вкладке SETTING---Playlist.



 Сегодня поговорим о добавлении к Karadio32 внешней платы DAC PCM5102. При выводе 
через эту плату звук стал более чистым и появились басы. При минимальной громкости в Web 
интерфейсе искажений никаких нет.
На плате есть выход Line Out для подключения внешнего усилителя. Наушники в этот разъем 
не подключить, звука никакого нет абсолютно. 

Схема соединений.

Схему подсказал пользователь сообщества Karadio.

PCM5102              ESP32
LCK                         GPIO25
BCK                        GPIO26
DIN                          GPIO22
XMT(XSMT)           подтянуть к +5в через резистор 10кОм
FMT                          GND
SCL(SCK)                 GND


Могут быть незначительные различия в названиях пинов PCM5102, но догадаться можно.
Также на плате есть пины для подключения внешнего усилителя (у меня это PAM8403)  LOUT LROUT AGND. Питание подал 5в.
При использовании данной платы нужно выставить режим I2S в Web интерфейсе Karadio.

44 комментария:

  1. В архивах с прошивкой отсутствует первый файл boot_app0.bin. Выложите его пожалуйста

    ОтветитьУдалить
  2. https://cloud.mail.ru/public/6s7E/b1oMro28t
    Файлы прошивки.

    ОтветитьУдалить
  3. Здравствуй. Теги русские отображаются? Можно ссылку на экран?

    ОтветитьУдалить
  4. Теги русские не отображаются, надо в прошивке править и самому компилировать, а после обновления все слетит опять.
    https://ru.aliexpress.com/item/1pcs-0-96-blue-0-96-inch-OLED-module-New-128X64-OLED-LCD-LED-Display-Module/32643950109.html?spm=a2g0s.9042311.0.0.rwlduB Вот к примеру.

    ОтветитьУдалить
    Ответы
    1. А где взять информацию в какой среде и как компилировать и какие библиотеки подкидывать?

      Удалить
    2. Не смогу подсказать, не занимался этим. У автора на Github или facebook спросите.

      Удалить
  5. Подскажите пожалуйста. Прошил ESP32 готовой прошивкой от Karadio, к сожалению не могу подключить его к своей wifi сети. В его настройках набираю SSSid и пароль, сохраняю, а настройки при перезагрузке теряются. Может поможете - куда копать? Заранее благодарен

    ОтветитьУдалить
    Ответы
    1. Можно попробовать с DHCP или без. У меня терялись настройки wifi в радио, но это происходило не каждый раз,а иногда. Но автор исправил это.

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
  6. Скажи, а если хочу перепрошить ESP32 заново, нужно очищать контроллер или просто шить по верх?

    ОтветитьУдалить
  7. Звук на выходе с потрескиванием как будто плохой прием ФМ радио. Хотя пару раз мне показалось, что проскакивал и чистый. Интересно как с этим бороться.

    ОтветитьУдалить
    Ответы
    1. В режиме DAC все нормально. Ну может только звучит, как mp3 с низким битрейтом. В режиме PDM слушать невозможно, в facebook была схема фильтрации(PDM). Блок питания с хорошей фильтрацией и без просадки напряжения (помощнее). Конденсаторы электролитические и керамические применяют. Или отдельное питание усилителя и ESP32. на форуме http://arduino.ru/forum/proekty/wi-fi-internet-radio много говорили о фильтрации и борьбе с помехами. Но я не заморачивался этим, звук чистый всегда. Есть радио ESP8266 и ESP32, везде все нормально. Усилитель и ESP питаю от одного блока питания 5В 2,5А (от USB хаба).

      Удалить
    2. Jean-Pierre Cocatrix Администратор группы As i said in another post, the dac is a 8 bits, and i am unable to control the volume succesfully. Only an analog volume will be good. Sorry.
      Как я уже говорил в другой пост, кср - это 8 Бит, и я не могу контролировать объем декоративного. Только в громкость будет хорошей. Прости.

      Интересно как у Вас может быть чистый звук в таком случае? На мин. громкости идут сильные искажения звука, а на максимуме почти все отлично - но есть дискомфорт - от присутствия мелкого дождя (еле слышно но есть).

      Удалить
  8. Можете для примера снять видео где вы регулируете громкость через web страницу от мин. до макси громкости чтобы можно было оценить звук.

    ОтветитьУдалить
    Ответы
    1. Извините. Только сейчас понял о чем вы говорите. Просто я пользуюсь по-другому немного. Да, если убавлять громкость в web, то звук будет плохой. В web у меня на максимуме всегда, а убавляю усилителем. У меня PAM8403 с регулятором и выключателем, выключатель включает питание для всей схемы. Меня такой вариант устраивает. Подключать наушники до усилителя не пробовал. Собираюсь добавить внешний DAC (плату). Потом допишу статью.

      Удалить
    2. а какую плату собираетесь - Вы говорили, что на ESP8266 уже использовали. Читал на форму что синие вроде глючные лучше красные - что посоветуете, можно ссылку на продавца.

      Удалить
    3. Подскажите какого сопротивления регулятор на PAM8403 - а то у меня без него - добавлю.

      Удалить
  9. Регулятор 50кОм. Двойной. Синие и красные -это vs1053. А я просто внешний ЦАП
    http://s.aliexpress.com/jAjim2Y3
    (from AliExpress Android) добавлю. Не вижу смысла уже в Vs1053, только что поддержка aac. Может будет позже и на голой esp32 aac. А может и нет.

    ОтветитьУдалить
    Ответы
    1. ALIENTEK VS1053 модуль MP3-плеер декодирования аудио STM32 микроконтроллер развитию
      http://s.aliexpress.com/QNRrUjaU
      (from AliExpress Android) Вот такая у меня, но продавец другой был (у него уже нет их). Цена высокая.

      Удалить
  10. Очень хорошая статья. Как раз такую искал. Автор, а подскажите, как подключить кнопки управления? По esp8266 видел схему, а по esp32 не могу найти

    ОтветитьУдалить
  11. Надо у автора спросить. Может пока их совсем нет в проекте.

    ОтветитьУдалить
  12. Ошибочка
    RST----- GPIO_NUM_21
    надо
    RST----- GPIO_NUM_12

    ОтветитьУдалить
  13. все завелоссь и заработало. на моей плате нет выведенных gpio 16 и 17. не знаете как их заменить?

    ОтветитьУдалить
  14. Этот комментарий был удален автором.

    ОтветитьУдалить
  15. Подскажите как выставить правильное время чтобы отображалось на дисплее. Разница в 2 час в меньшую сторону. ESP32 случайно не с роутера синхронизирует время?

    ОтветитьУдалить
    Ответы
    1. sys.tzo("2") — выставить временную зону +2. Через телнет.

      Удалить
  16. Здравствуйте, подскажите можно реализовать на esp32 следующее... есть колонка bluetooth jbl flip, можно ли сделать интернет радио wifi и передатчик на колонку по bluetooth? модуль же имеет на борту wifi и bluetooth

    ОтветитьУдалить
  17. Здравствуйте! Собрал...работает вот только поротом ручки энкодера по часовой стрелке должна громкость увеличиваться а она уменьшается. как решить?

    ОтветитьУдалить
    Ответы
    1. нужно 2 провода крайних на энкодере (clk и dt) поменять местами

      Удалить


  18. Андрей Владимирович, подскажите пожалуйста как заместо энкодера подключить кнопки? то что нужно поправить фаил Gpio.h я понимаю а потом что? компелировать по новой бинарники.

    ОтветитьУдалить
  19. Не надо, я сделал с тремя кнопками, бин файл конфигурации выложил в Arduino.ru в теме http://arduino.ru/forum/proekty/wi-fi-internet-radio?page=97#comment-434039

    ОтветитьУдалить
    Ответы
    1. Подскажите, на какие контакты в ESP32 подпаивать эти три кнопки?

      Удалить
  20. Прошейте только его по адресу 0x3a2000.

    ОтветитьУдалить
  21. Спасибо за краткое и понятное описание.
    Подскажите, возможно использование ESP32 на 30-ти контактной плате? Особенности?
    ...С PCM1794 будет только MP3?

    ОтветитьУдалить
  22. Этот комментарий был удален автором.

    ОтветитьУдалить
  23. Андрей доброго времени суток! Ссылка https://www.espressif.com/sites/default/files/tools/flash_download_tools_v3.6.1.0.zip не работает. И второй вопрос в этой папке по ссылке(Скриншот программы, поясняющий куда и что заливать тут.), файлы с расширением .bin и компьютер не понимает какой программой эти вайлы открыть. Спасибо! Помогите пожалуйста.

    ОтветитьУдалить
  24. Здравствуйте, на форумах пишут что на ESP32 нельзя подавать 5v, сразу сгорит, надо обязательно понижать до 3. Так надо понижать или нет?

    ОтветитьУдалить
    Ответы
    1. У меня на 5В работает, проблем никаких. Там же стабилизатор стоит который понижает до 3.3В
      Вот в такой аппарат вставил радио https://www.youtube.com/watch?v=0K5aItsXV4c только управление не энкодером а тремя тактовыми кнопками.

      Удалить
    2. если esp оддельно то 3.3 если на плате расширения то 5v на плату а там стабилизатор есть для esp

      Удалить
  25. Подскажите как можно связать esp8266 с 5102. Это вообще возможно?

    ОтветитьУдалить
  26. Совет для тех, кто задолбался с пайкой. Можно сделать wifi радио из тв приставки с wifi модулем. Я сделал (сделал это конечно громко сказано) из world vision T62D+wifi модуль отдельно докупал (итого 1400 рублей на все ушло), нужно только закинуть ip radio плейлист на флэшку, в настройках приставки выставить старт с iptv и подключить колонки(наушники) в гнездо av. Теперь у Вас при включении приставки будет включаться ip радио. Управление осуществляется пультом ДУ либо кнопками на корпусе приставки. Вот такой лайфхак.

    ОтветитьУдалить