• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Internet Radio ESP8266 + VS1003

kostake

New member
Добрый день. Прошу у вас помощи, совета.
Собрал радио по этому проекту Edzelf/Esp-radio , радио заиграло, правда не без костылей. Не хотел заводится VS1053 (синяя плата), пробовал и ножки 33/34 замыкать-ничего не помогло. пока не откинул резистор на 1кОм (от земли. после этого все стартует отлично и без замкнутых ножек). Может кому то поможет эта информация.
Безымянный.jpg
А я запутался в кнопках, точнее как их реализовать. Нужно две кнопки для переключения станций, в файле PDF проекта про это немного сказано.
Безымянный.jpg
Напаял резисторы, посмотрел значения какие выдаются при замыкании той или иной кнопки. И дальше ступор, подскажите где надо прописать команды на них? Я просто только вчера познакомился с Arduino ide. Пытался в файлике Radio.ini прописать раздел Analog, но что-то ничего не получилось.
 

думка

New member
Друзья, всем привет, принимайте новичка)
В качестве очередной поделки на ESP8266 задумал собрать интернет-радио с MP3 плеером, на основе NodeMCU v.3 и вот такой платы с VS1053 и слотом TF-карты: Arduino MP3 shield board with TF card - Geeetech Wiki
В качестве дисплея и клавиатуры подключил такой LCD1602 keypad shield: LCD Keypad shield: схема подключения, распиновка, скетч для шилда Arduino
Поскольку ножек у ESP на все не хватает, пришлось дисплей подключить через I2C буфер на PCF8574.
Для проверки использовал библиотеку и скетч от Adafruit VS1053 Codec Breakout, простой MP3 плеер, который по циклу воспроизводит 1 файл с карты, а на экран выводит счетчик повторений и время воспроизведения.
В общем, все заработало, но проявилась одна неприятная проблемка: ESP крашится, если вывод на дисплей по I2C и обращение к SPI происходят одновременно. А поскольку SPI работает по прерываниям от кодека, притом, что I2C по (более-менее) регулярному циклу, то как эти события развести по времени, не совсем понятно. Посоветуйте, куда копать, что с этим делать?
Буду благодарен за любые идеи.

P.S. WiFi тут не причем, пробовал и с ним и без него. Только отключение в скетче вывода на I2C помогает, без него играет сутками без остановки)
В архиве схемка и тестовый скетч.
 

Вложения

Pilnikov

Active member
А поскольку SPI работает по прерываниям от кодека, притом, что I2C по (более-менее) регулярному циклу, то как эти события развести по времени, не совсем понятно. Посоветуйте, куда копать, что с этим делать?
Буду благодарен за любые идеи.
А тормознуть I2c пока spi обрабатывает прерывание нельзя?
Вообще, имхуется мне, что "дури" у esp8266 слегка не хватает на одновременную работу экрана и мп3 по причине малого объема ОЗУ.
 

думка

New member
А тормознуть I2c пока spi обрабатывает прерывание нельзя?
Думается мне, тут как раз обратная история - прерывание от кодека на SPI приходит в тот момент, когда передача по I2C уже в процессе.. Т.е. нужно напротив блокировать прерывание от кодлека на тот момент, пока вывод на дисплей идет. Как раз пытаюсь сообразить, как такой сценарий реализовать)
Но, это конечно не самый красивый костыль.
 

Pilnikov

Active member
Икать будет. Лучше пусть экран лагает. Прервать вывод. Потом сразу повторить
 

думка

New member
Икать будет. Лучше пусть экран лагает. Прервать вывод. Потом сразу повторить
Дык не получится так... Если он уже в обработчике прерывания от кодека, то вывод на дисплей и так не начнется, он же в loop. А вот если вывод на I2C уже начался, то его уже не заблокируешь по прерыванию...
конечно, можно вывод на дисплей тоже сделать в обработчике, но это надо VS библиотеку потрошить. Да и вопрос - что делать, когда воспроизведение остановится?
Так что пока изучаю вариант - задержать обработку прерывания от SPI... (не отключить, а задержать!). Икать, надеюсь, не будет - там же в кодеке собственный буфер MP3.
на днях попробую, но думается мне, должно быть какое то другое, более правильное решение.
 

думка

New member
правильнее не на ардуине, а в SDK с freertos
RTOS пока подождет)
проверил noInterrupts() - interrupts() для блокировки прерываний от кодека на время вывода на I2C дисплей. Помогло.
На тестовом скетче уменьшил интервал обновления дисплея до 100мс и увеличил объем вывода, но работает стабильно, артефактов в звуке не слышно.
Можно продолжать работу над проектом)
тестовый скетч прилагаю.
 

Вложения

Fayton

Member
Накидал на выходных...

Радио на базе esp8266 1.5уе

Mpc602 фильтр 0.5 уе

Pam8403 усилитель 0.5уе

Lds3985 стабилизатор 3.3v 300mA 0.5уе

Ик пульт с фотоприемником для ардуино 0.5уе

Итог 3.5уе Получам..

веб морду с настройкой сети и потоков

10 сохраненных мной станций

и 10 вы можете сами сохранить

Регулировка громкости

Выключение с запоминанием станции и громкости

Вход в вебморду с пульта

Выход два по три вата

Нормальный фильтр шестого порядка для человеческого звука.

Питание 5 вольт

Если увижу интерес дам прошивку : )

Вебморда и плата на фото...

https://youtu.be/pOTD8KXDDDs
обзор...
https://drive.google.com/file/d/1-_la1wg8dulOmCeRZQzZ2fqL1_9vic77/view?u...
плата...
RADIOSAN.bin
прошивка...

Конфигурация:
; set frequency to 160MHz
board_build.f_cpu = 160000000L
; set frequency to 80MHz
board_build.f_flash = 80000000L
board_build.flash_mode = dio
upload_resetmethod = nodemcu
На здоровье :)

Если использовать 4 мГ флеш то обновление через веб морду!
Если есть ошибки или пожелания мыльте на почту euspro1@gmail.com
 

Вложения

Последнее редактирование:

думка

New member

Fayton

Member
Накидал на выходных...
Радио на базе esp8266 1.5уе
Mpc602 фильтр 0.5 уе
Pam8403 усилитель 0.5уе
Lds3985 стабилизатор 3.3v 300mA 0.5уе
Ик пульт с фотоприемником для ардуино 0.5уе
Итог ~3.5уе Получаем..

Активация всех функций бесплатная только за фото собранного Radiosan.
Заходим 192.168.4.1/radiosan
Шлем фото и 4 кода - получаем 4 кода и наслаждаемся.
Коммерческое использование запрещено!

20 станций записано и все можно менять.
Обучение любого пульта. Но уже прописан пульт от Ардуино.
Питание от USB или 5V 1A. одна колонка и 2А если две!
Выход 2 по 3W.
Управление громкостью.
Вход и выход в вебморду по нажатию кнопки с пульта.
Выключение с памятью канала и громкости.
Авто перезагрузка при потере потока или wifi.
Код хорошо оптимизирован что позволило сделать радио очень шустрым.
Как по мне всякие календари и часы пихать в радио не вижу смысла. Так как радио должно просто играть.
При переключениях звук приглушается но только при повторении моей платы.
Светодиод красный. Фоторезистор 10к. Стоит над светодиодом нос в нос. Сверху заливается черным термоклеем.
Качественный звук с большим динамическим диапазоном.
Фильтр Баттерворта шестого порядка.
Срез фильтра -60 дбм на 44 кгц давит антиалиасный и гранулярный шум
погрешность номиналов 1% для идеальной работы но можно ставить до 5%
это лучше чем без него вовсе.

Прошивка в архиве. RADIOSAN-V6.rar
Распаковать в корень диска. Запустить ESPFlashDownloadTool_v3.3.6.exe
Вот я видос делал как залить прошивку!


После прошивки ждем 2 мин не отключаем питание, пока происходит конфигурация и обновление списка станций.
Сканируем wifi сети и подключаемся к RADIOSAN пароль 12345678
Заходим на 192.168.4.1
Ставим галочку напротив своей сети и вводим пароль от нее.
Нажимаем на пульте кнопку вниз.
Ждем несколько секунд и вуаля ля ля ля!
Все уже настроено.


 
Последнее редактирование:
Сверху Снизу