Кажется, все больше и больше людей используют это без сервера LMS, только для BT, AirPlay или Spotify. Это нормально, но помните, что compressliteESP32 — это, прежде всего, проигрыватель Logitech Media Server, и он был разработан на основе этой концепции. Все остальные — это пришитые к нему дополнения, поэтому и другие режимы имеют свои недостатки. Поэтому, пожалуйста, убедитесь, что вы прочитали это, прежде чем открывать проблему.
Squeezelite-esp32 — это пакет аудиопрограмм, предназначенный для работы на чипсетах espressif esp32 и esp32-s3 Wi-Fi (b/g/n) и Bluetooth. Он предлагает следующие возможности
В зависимости от оборудования, подключенного к esp32, вы можете отправлять звук на локальный ЦАП, на SPDIF или на динамик Bluetooth. Минимально необходимое оборудование — это модуль WROVER с 4 МБ флэш-памяти и 4 МБ PSRAM (https://www.espressif.com/en/products/modules/esp32). Если этот модуль работает автономно, просто включите питание, и вы сможете транслировать музыку на динамик Bluetooth. Вы также можете отправлять звук на большинство ЦАП I2S, а также на приемники SPDIF, используя только кабель или оптический преобразователь.
Но compresslite-esp32 обладает широкими возможностями расширения, и вы можете добавить
Другие функции включают в себя
Для управления эквалайзером или использования дисплея в LMS требуется новая модель проигрывателя, которая предоставляется через плагин, который является частью сторонних репозиториев LMS.
(мнения представлены здесь, поэтому я = @philippe44) Основная сборка compresslite-esp32 представляет собой 16-битное внутреннее ядро со всеми вычислениями с 32-битной точностью или точностью с плавающей запятой. Это выбор дизайна, который я сделал, чтобы сохранить производительность процессора (он уже сильно увеличивает нагрузку на чипсет esp32) и оптимизировать использование памяти, поскольку у нас есть только 4 МБ полезной оперативной памяти. Некоторые могут правильно заметить, что модуль WROVER имеет 8 МБ ОЗУ, но процессор способен адресовать только 4 МБ, а оставшиеся 4 МБ должны быть разбиты на страницы по меньшим блокам, и у меня нет на это терпения.
Теперь, когда я перенес Squeelite на esp32, я также сделал 16- или 32-битное ядро совместимым во время компиляции. Пока что он работает в 32-битной версии, но тестов было проведено меньше. Вы можете скомпилировать его в 32-битном режиме. Меня не очень интересуют выборки выше 16 бит, потому что это ничего не дает (у меня есть инженерное образование в области теории информации).
Возможность | 16 бит | 32 бита | комментарий |
---|---|---|---|
максимальная частота дискретизации | 192 тыс. | 96 тыс. | 192k — это очень сложно, особенно в сочетании с дисплеем. |
максимальная битовая глубина | 16 | 24 | 24 бита усекаются в 16-битном режиме |
SPDIF | 16 бит | 20 бит | |
mp3, aac, опус, ogg/vorbis | 48 тыс. | 48 тыс. | |
алак, flac, ogg/flac | 96 тыс. | 96 тыс. | |
ПКМ, WAV, АИФ | 192 тыс. | 96 тыс. | |
эквалайзер | Да | Н | Макс. 48 кГц (после передискретизации) — эквализация пропускается на треках >48 тыс. |
передискретизация | Да | Н | |
плавное затухание | 10 с | <5 с | зависит от размера буфера и частоты дискретизации |
Esp32 должен работать на частоте 240 МГц, с вводом-выводом Quad-SPI на частоте 80 МГц и тактовой частоте 40 МГц. Тем не менее, его сложно запустить, особенно если учесть, что он оснащен последовательной флэш-памятью и PSRAM, так что спасибо Espressif за оптимизацию чипсета. Теперь, чтобы иметь все декодирование, передискретизацию, выравнивание, усиление, отображение, спектр/ву, это очень (очень) хрупкое равновесие между использованием внутренней/внешней оперативной памяти, приоритетами задач и обработкой буфера. Он не идеален, и чем больше вы нажимаете систему на предел, тем выше риск того, что некоторые файлы не будут воспроизводиться (см. ниже). В общем, дисплей всегда будет иметь самый низкий приоритет, и вы заметите замедление прокрутки и частоты обновления VU/Spectrum. Теперь даже поток отображения имеет некоторый критический раздел и влияет на возможности. Например, цветной дисплей с глубиной 16 бит и низкой скоростью SPI может препятствовать работе flac 24/96, но все же работать с PCM 24/96.
В режиме 16 бит, хотя в качестве максимальной частоты указывается 192 кГц, настоятельно рекомендуется ограничить сообщаемую частоту дискретизации до 96 кГц (-Z 96000). Обратите внимание, что некоторые высокоскоростные онлайн-потоки 24/96k могут прерываться из-за производительности стека TCP/IP. Обычно это происходит из-за того, что сервер отправляет небольшие пакеты данных, и esp32 не может получать закодированный звук достаточно быстро, независимо от настроек приоритета задачи (я пытался это немного настроить). Лучший вариант в этом случае — позволить LMS проксировать поток, поскольку он будет предоставлять более крупные фрагменты и «более плавный» поток, который затем можно будет обрабатывать.
Также обратите внимание, что некоторые кодеки потребляют больше ресурсов ЦП, чем другие, или не были оптимизированы так сильно. Я приложил все усилия, чтобы их настроить, но этот уровень оптимизации включает в себя написание ассемблера, что является болезненным занятием. Одним из очень требовательных кодеков является AAC, когда файлы кодируются с помощью SBR. Он позволяет реконструировать верхнюю часть спектра и, следовательно, повысить частоту дискретизации, но спецификация кодека такова, что это необязательно, вы можете просто декодировать нижнюю полосу и принять более низкую частоту дискретизации — см. опцию AAC_DISABLE_SBR ниже.
ВАЖНО: на esp32 (не на esp32-s3) использование Spotify с SPDIF приводит к заиканию звука, когда включена «статистика». Вы ДОЛЖНЫ отключить их
Любое оборудование на базе esp32, имеющее как минимум 4 МБ флэш-памяти и 4 МБ PSRAM, будет способно работать с compresslite-esp32, и существуют различные платы, включающие такой чип. Некоторые из них упомянуты ниже, но любой из них должен работать. Здесь вы можете найти различную помощь и инструкции.
Для ясности: модули WROOM НЕ работают, поскольку не включают PSRAM. В некоторых проектах его можно добавить снаружи, но это (очень) маловероятно.
Согласно приведенному выше описанию, модуля WROVER достаточно для запуска Squeezelite-esp32, но требуется немного поработать, чтобы расширить его, чтобы он имел аналоговые аудио или аппаратные кнопки (например)
Обратите внимание, что при отправке на динамик Bluetooth (источник) можно использовать только частоту 44,1 кГц, поэтому либо позвольте LMS выполнить передискретизацию, но вы должны убедиться, что она отправляет только дорожки с частотой 44,1 кГц, или включите внутреннюю передискретизацию (с помощью опции -R). . Если вы подключаете ЦАП, выбор частоты дискретизации будет зависеть от его возможностей. Более подробную информацию смотрите ниже.
Большинство ЦАП будут работать «из коробки», просто используя соединение I2S, но некоторые требуют отправки определенных команд с использованием I2C. См. опцию DAC ниже, чтобы понять, как отправлять эти специальные команды. Имеется встроенная поддержка ЦАП TAS575x, TAS5780, TAS5713 и AC101.
Подобные модули на основе esp32-s3 также поддерживаются, но для этого требуется esp-idf 4.4. Он еще не является частью официальных выпусков, но компилируется и запускается. У s3 нет Bluetooth-аудио. Обратите внимание, что производительность процессора значительно повышается.
Это основной аппаратный компонент Squeezelite-esp32, разработанный совместно. Подробности о возможностях можно найти здесь и здесь.
Если вы хотите перестроить, используйте файл конфигурации squeezelite-esp32-SqueezeAmp-sdkconfig.defaults
.
Примечание. Вы можете использовать предварительно собранные двоичные файлы SqueezeAMP4MBFlash, в которых правильно настроены все аппаратные средства ввода-вывода. Вы также можете использовать общий двоичный файл I2S4MBFlash, и в этом случае параметры NVS должны быть установлены так, чтобы получить точно такое же поведение.
12=green,13=red,34=jack,2=spkfault
channel=7,scale=20.24
model=TAS57xx,bck=33,ws=25,do=32,sda=27,scl=26,mute=14:0
bck=33,ws=25,do=15
IR можно использовать в качестве сигнала пробуждения, используя (установив sleep_config
с wake=0:0
). Это подтягивание, поэтому оно остается на уровне 1, когда ничего не получает, что означает, что его нельзя использовать совместно с другими вводами-выводами пробуждения. См. «Сон» для получения более подробной информации об ограничении пробуждения при нескольких входах.
Этот портативный динамик с батарейным питанием совместим с Squeelite-esp32, для которого с каждым обновлением поставляется специальная сборка. Если вы хотите перестроить, используйте файл конфигурации squeezelite-esp32-Muse-sdkconfig.defaults
.
Примечание. Вы можете использовать предварительно собранные двоичные файлы Muse4MBFlash, в которых правильно настроены все аппаратные средства ввода-вывода. Вы также можете использовать общий двоичный файл I2S4MBFlash, и в этом случае параметры NVS должны быть установлены так, чтобы получить точно такое же поведение.
muse
channel=5,scale=7.48,atten=3,cells=1
"mosi=15,miso=2,clk=14
(вероятно, это необязательно)model=I2S,bck=5,ws=25,do=26,di=35,i2c=16,sda=18,scl=23,mck=0
{"init":[ {"reg":0,"val":128}, {"reg":0,"val":0}, {"reg":25,"val":4}, {"reg":1,"val":80}, {"reg":2,"val":0}, {"reg":8,"val":0}, {"reg":4,"val":192}, {"reg":0,"val":18}, {"reg":1,"val":0}, {"reg":23,"val":24}, {"reg":24,"val":2}, {"reg":38,"val":9}, {"reg":39,"val":144}, {"reg":42,"val":144}, {"reg":43,"val":128}, {"reg":45,"val":128}, {"reg":27,"val":0}, {"reg":26,"val":0}, {"reg":2,"val":240}, {"reg":2,"val":0}, {"reg":29,"val":28}, {"reg":4,"val":48}, {"reg":25,"val":0}, {"reg":46,"val":33}, {"reg":47,"val":33} ]}
[{"gpio":32, "pull":true, "debounce":10, "normal":{"pressed":"ACTRLS_VOLDOWN"}}, {"gpio":19, "pull":true, "debounce":40, "normal":{"pressed":"ACTRLS_VOLUP"}}, {"gpio":12, "pull":true, "debounce":40, "long_press":1000, "normal":{"pressed":"ACTRLS_TOGGLE"},"longpress":{"pressed":"ACTRLS_POWER"}}]
Работает с модулем ESP32-A1S, который включает аудиокодек и выход для гарнитуры. Вам все равно придется использовать подобную демонстрационную плату или внешний усилитель, если вы хотите прямое подключение динамиков. Обратите внимание, что есть версия с кодеком AC101 и еще одна с ES8388, вероятно, с двумя вариантами - на этих платах полный бардак (см. ниже).
Показанная выше плата имеет следующий набор входов/выходов.
(обратите внимание, что некоторым GPIO требуются подтяжки)
Таким образом, возможная конфигурация будет
21=amp,22=green:0,39=jack:0
[{ "gpio" : 5 , "normal" :{ "pressed" : " ACTRLS_TOGGLE " }},{ "gpio" : 18 , "pull" : true , "shifter_gpio" : 5 , "normal" :{ "pressed" : " ACTRLS_VOLUP " }, "shifted" :{ "pressed" : " ACTRLS_NEXT " }}, { "gpio" : 23 , "pull" : true , "shifter_gpio" : 5 , "normal" :{ "pressed" : " ACTRLS_VOLDOWN " }, "shifted" :{ "pressed" : " ACTRLS_PREV " }}]
для AC101
model=AC101,bck=27,ws=26,do=25,di=35,sda=33,scl=32
для ES8388 (кажется, есть варианты с одинаковым номером версии - полная лажа)
model=ES8388,bck=5,ws=25,do=26,sda=18,scl=23,i2c=16
илиmodel=ES8388,bck=27,ws=25,do=26,sda=33,scl=32,i2c=16
Это забавные умные часы на базе ESP32. Он имеет экран ST7789 с разрешением 240x240 и встроенный звук. Не очень полезно что-либо слушать, но это работает. Это пример устройства, которому требуется набор команд I2C для ЦАП/APU (см. ниже). Существует опция сборки, если вы решите все пересобрать самостоятельно, в противном случае опция I2S по умолчанию работает со следующими параметрами
model=I2S,bck=26,ws=25,do=33,i2c=53,sda=21,scl=22
{ "init" : [ { "reg" : 41 , "val" : 128 }, { "reg" : 18 , "val" : 255 } ], "poweron" : [ { "reg" : 18 , "val" : 64 , "mode" : " or " } ], "poweroff" : [ { "reg" : 18 , "val" : 191 , "mode" : " and " } ] }
dc=27,data=19,clk=18
SPI,driver=ST7789,width=240,height=240,cs=5,back=12,speed=16000000,HFlip,VFlip
Squeezelite-esp32 требует чипсета esp32 и 4 МБ PSRAM. ESP32-WROVER отвечает этим требованиям. Для получения аудиовыхода можно использовать ЦАП I2S. Дешевые ЦАП PCM5102 I2S работают, но и многие другие тоже работают. ЦАП PCM5012 можно подключить через:
I2S - ВРОВЕР
ВКК - 3,3 В
3,3 В – 3,3 В
Земля - Земля
ФЛТ-ЗЕМЛЯ
ДМП – Земля
SCL-ЗЕМЛЯ
БКК – (БКК – см. ниже)
DIN - (DO - см. ниже)
LCK – (WS – см. ниже) FMT – GND
ХМТ - 3,3 В
Используйте файл конфигурации squeezelite-esp32-I2S-4MFlash-sdkconfig.defaults
.
И супер крутой проект https://github.com/rochuck/squeeze-amp-too
Чтобы получить доступ к NVS, в веб-интерфейсе перейдите к титрам и выберите «показать редактор nvs». Перейдите на вкладку редактора NVS, чтобы изменить параметры NFS. В описании синтаксиса ниже <> означает значение, а [] описывает необязательные параметры.
Как упоминалось выше, на сегодняшний день доступно несколько специальных сборок: SqueezeAMP и Muse, но если вы создадите их самостоятельно, вы также можете создать сборку для T-WATCH2020. Сборка по умолчанию представляет собой общую прошивку под названием I2S, которую можно настроить через NVS для получения точно тех же результатов, что и специальные сборки. Разница в том, что параметры необходимо вводить и их можно случайно стереть. Графический интерфейс также отлично помогает загружать «известные наборы конфигураций».
По выбору дизайна не существует кода, встроенного только для данной версии, весь код всегда присутствует. Философия заключается в том, чтобы свести к минимуму как можно больше кода, специфичного для платформы, и использование конкретного #ifdef
запрещено, несмотря ни на что. Поэтому, если вы хотите добавить свою собственную платформу, внимательно просмотрите файл mainKConfig.projbuild
, чтобы увидеть, как вы можете, используя приведенные ниже параметры, сделать ваше устройство исключительно решением на основе конфигурации. Если другого варианта действительно нет, посмотрите targets<target>
и добавьте свой собственный код. Я не приму пиар для кода, который позволяет избежать создания такого специализированного кода, когда это возможно. Тогда «цель» NVS будет использоваться для вызова кода, специфичного для цели, но опять же, это чисто время выполнения, а не время компиляции.
Параметр NVS «i2c_config» устанавливает gpio i2c, используемый для общих целей (например, отображения). Оставьте это поле пустым, чтобы отключить использование I2C. Обратите внимание, что в SqueezeAMP порт должен быть 1. Скорость по умолчанию — 400 000, но некоторые дисплеи могут поддерживать скорость до 800 000 и более. Синтаксис
sda=<gpio>,scl=<gpio>[,port=0|1][,speed=<speed>]
Обратите внимание, что вы не можете использовать тот же GPIO или порт, что и ЦАП.
Esp32 имеет 4 подсистемы SPI, одна из которых недоступна, поэтому нумерация — 0..2, а SPI0 зарезервирован для Flash/PSRAM. Параметр NVS «spi_config» устанавливает gpio spi, используемый для общих целей (например, отображения). Оставьте это поле пустым, чтобы отключить использование SPI. Параметр DC необходим для дисплеев. Синтаксис
data|mosi=<gpio>,clk=<gpio>[,dc=<gpio>][,host=1|2][,miso=<gpio>]
По умолчанию и только «хост» равен 1, поскольку другие уже используются flash и spiram. Дополнительный параметр «miso» (MasterInSlaveOut) используется только в том случае, если шина SPI является двунаправленной и используется совместно с другими периферийными устройствами, такими как Ethernet или расширитель gpio. Обратите внимание, что «данные» также могут называться «mosi» (MasterOutSlaveIn).
Параметр NVS «dac_config» устанавливает gpio, используемый для связи i2s с вашим ЦАП. Вы можете определить значения по умолчанию во время компиляции, но параметр nvs имеет приоритет, за исключением именованных конфигураций.
bck=<gpio>,ws=<gpio>,do=<gpio>[,mck=0|1|2][,mute=<gpio>[:0|1][,model=TAS57xx|TAS5713|AC101|WM8978|ES8388|I2S][,sda=<gpio>,scl=<gpio>[,i2c=<addr>]]
если «модель» не установлена или не распознается, то используется «I2S» по умолчанию. Опция «mck» используется для некоторых кодеков, которым требуется главная тактовая частота (хотя это не обязательно). По умолчанию GPIO0 используется как MCLK, и только последние сборки (после середины 2023 года) могут использовать 1 или 2. Также имейте в виду, что это не может сосуществовать с RMII Ethernet (см. раздел Ethernet ниже). Параметры I2C являются необязательными и необходимы только в том случае, если вашему ЦАП требуется элемент управления I2C (см. «dac_controlset» ниже). Обратите внимание, что параметры «i2c» являются десятичными, шестнадцатеричная запись не допускается.
На данный момент TAS57xx, TAS5713, AC101, WM8978 и ES8388 являются признанными моделями, которым отправляются правильные элементы управления последовательностью инициализации, громкостью и питанием. Для других кодеков, которым могут потребоваться команды I2C, используйте параметр «dac_controlset», который позволяет определять простые команды, которые будут отправляться через i2c для инициализации, включения и выключения динамика и гарнитуры, используя синтаксис JSON:
{ <command>: [ <item1>, <item2>, ... <item3> ],
<command>: [ <item1>, <item2>, ... <item3> ],
... }
Где <command>
— это одно из следующих значений: init, poweron, poweroff,peakeron,peakeroff, headseton, headsetoff (это должен быть массив даже для одного элемента). Элемент – любой из следующих элементов.
{"reg":<register>,"val":<value>,"mode":<nothing>|"or"|"and"}
{"gpio":<gpio>,"level":0|1}
{"delay":<ms>}
Это стандартная нотация JSON, поэтому, если вы с ней не знакомы, Google — ваш лучший друг. Имейте в виду, что «...» означает, что вы можете иметь столько записей, сколько захотите, это не часть синтаксиса. Каждый раздел не является обязательным, но нет смысла устанавливать i2c в параметре dac_config и ничего не задавать здесь.
Ключ reg
позволяет записывать регистры на шине i2c. mode
параметра позволяет или зарегистрировать значение или и его. Не устанавливайте mode
если вы просто хотите писать. Параметр val
может быть массивом [v1, v2,...] для записи серии байтов в одном пакете i2c (в этом случае «режим» игнорируется). Обратите внимание, что все значения должны быть десятичными . Вы можете использовать такой валидатор для проверки синтаксиса. Клавиша gpio
предназначена для простой установки gpio как части действия ЦАП, а delay
позволяет сделать паузу между элементами.
Команда «питание» используется при включении/выключении ЦАП после периода простоя (см. параметр -C для compresslite), а команды «динамик/гарнитура» отправляются при переключении между динамиками и гарнитурой (см. обнаружение разъема для гарнитуры).
NB: Для именованных конфигураций ((SqueezeAMP, Muse... все кроме I2S) все это игнорируется. Для известных кодеков встроенные последовательности можно перезаписать с помощью dac_controlset
Обратите внимание, что вы не можете использовать тот же GPIO или порт, что и I2C.
Параметр NVS «spdif_config» устанавливает gpio i2s, необходимый для SPDIF.
SPDIF становится доступным путем повторного использования интерфейса i2s нестандартным способом, поэтому, хотя необходим только один вывод (DO), контроллер должен быть полностью инициализирован, поэтому тактовая частота битов (bck) и тактовая частота слов (ws) должны быть тоже поставил. Поскольку i2s и SPDIF являются взаимоисключающими, вы можете повторно использовать один и тот же ввод-вывод, если это позволяет ваше оборудование.
Вы можете определить значения по умолчанию во время компиляции, но параметр nvs имеет приоритет, за исключением именованных конфигураций (SqueezeAMP, Muse...).
Оставьте это поле пустым, чтобы отключить использование SPDIF. Вы также можете определить их во время компиляции, используя «make menuconfig». Синтаксис
bck=<gpio>,ws=<gpio>,do=<gpio>
NB: для именованных конфигураций это игнорируется.
Максимальная разрядность составляет 24 бита, даже в 32-битном режиме (это ограничение SPDIF — спасибо @UrbanLienert за обновление с 20 до 24 бит). Теперь вы также можете получить SPDIF, используя специализированный чип, который предлагает интерфейс I2S, такой как ЦАП, но выдает SPDIF (оптический и коаксиальный). Тогда ссылка на главу DAC.
Если вам нужен коаксиальный кабель, вы также можете использовать трюк бедняка для генерации сигнала от GPIO 3,3 В. Все, что нужно сделать, это разделить напряжение 3,3 В, чтобы получить размах 0,6 В, а затем снять постоянный ток.
100nF
GPIO ----210ohm-----------||---- coax S/PDIF signal out
|
110ohm
|
Ground -------------------------- coax signal ground
Параметр NVS «display_config» устанавливает параметры дополнительного дисплея. Это может быть I2C (общую шину см. здесь) или SPI (общую шину см. здесь). Синтаксис:
I2C,width=<pixels>,height=<pixels>[address=<i2c_address>][,reset=<gpio>][,HFlip][,VFlip][driver=SSD1306|SSD1326[:1|4]|SSD1327|SH1106]
SPI,width=<pixels>,height=<pixels>,cs=<gpio>[,back=<gpio>][,reset=<gpio>][,speed=<speed>][,HFlip][,VFlip][driver=SSD1306|SSD1322|SSD1326[:1|4]|SSD1327|SH1106|SSD1675|ST7735|ST7789[:x=<offset>][:y=<offset>]|ILI9341[:16|18][,rotate]]
Вы можете настроить отображение уровня громкости и анализатора спектра, а также размер изображения через специальное меню в настройках плеера (не забудьте добавить плагин).
Параметр NVS «metadata_config» определяет способ отображения метаданных для AirPlay и Bluetooth. Синтаксис
[format=<display_content>][,speed=<speed>][,pause=<pause>][,artwork[:0|1]]
%artist%
, %album%
, %title%
. Используя эту строку формата, ключевые слова заменяются их значениями для построения отображаемой строки. Обратите внимание, что простой текст после ключевого слова, которое оказалось пустым во время воспроизведения трека, будет удален. Например, если вы установили format= %artist% - %title%
и в метаданных нет исполнителя, то будет отображаться только <title>
, а не - <title>
.Вы можете использовать любой ИК-приемник, совместимый с протоколом NEC (38 кГц) или RC5. Vcc, GND и выход — единственные контакты, которые необходимо соединить, без подтяжки, без фильтрующего конденсатора, это прямое соединение.
ИК-коды отправляются в LMS «как есть», поэтому будет работать только пульт Logitech SB от Boom, Classic или Touch. Я думаю, что файл Slim_Devices_Remote.ir в «серверном» каталоге LMS можно изменить для адаптации к другим кодам, но я этого не пробовал.
В режиме AirPlay и Bluetooth поддерживаются только эти родные пульты, я не добавил возможность создать собственное сопоставление
См. «Настройка GPIO» ниже, чтобы настроить GPIO, связанный с инфракрасным приемником (опция «ir»).
Параметр «set_GPIO» используется для назначения GPIO различным функциям.
Для GPIO можно установить значение GND или Vcc при загрузке. Это удобно для питания устройств, потребляющих ток менее 40 мА от бокового разъема. Будьте осторожны, поскольку в отношении того, какой GPIO вы меняете, проверки на конфликты не выполняются, поэтому вы можете повредить плату или создать здесь конфликт.
Параметр <amp>
можно использовать для назначения GPIO, для которого будет установлен активный уровень (по умолчанию 1) при запуске воспроизведения. Он будет сброшен, когда сжималайт перейдет в режим ожидания. Тайм-аут простоя устанавливается в командной строке compresslite с помощью -C <timeout>
Параметр <power>
можно использовать для назначения GPIO, для которого будет установлен активный уровень (по умолчанию 1) при включении проигрывателя и сброшен при выключении питания (в LMS не применяется к AirPlay, Spotify или BT).
Если у вас есть аудиоразъем, поддерживающий вставку (используйте :0 или :1 для установки уровня при вставке), вы можете указать, к какому GPIO он подключен. Использование параметра jack_mutes_amp позволяет отключить звук усилителя, когда вставлена гарнитура (например).
Вы также можете установить зеленый и красный светодиоды состояния с их соответствующим активным состоянием (:0 или :1) или указать конкретный набор микросхем, если вы используете адресный светодиод RGB.
Параметр <ir>
устанавливает GPIO, связанный с ИК-приемником. Нет необходимости добавлять подтяжку или конденсатор
Синтаксис:
<gpio>=Vcc|GND|amp[:1|0]|power[:1:0]|ir[:nec|rc5]|jack[:0|1]|green[:0|1|ws2812]|red[:0|1|ws2812]|spkfault[:0|1][,<repeated sequence for next GPIO>]
Вы можете определить значения по умолчанию для светодиодов jack, spkfault во время компиляции, но параметр nvs имеет приоритет, за исключением именованных конфигураций ((SqueezeAMP, Muse ...), где они обязательны во время выполнения. Обратите внимание, что gpio 36 и 39 используются только для ввода и не могут использоваться. Если установлено прерывание или неисправность разъема или динамика, опрос в течение 100 мс проверяет их значение, но это дорого.
Можно добавить расширители GPIO, используя шину I2C или SPI. В основном их следует использовать для кнопок, но они также могут поддерживать выходные данные общего назначения. Эти дополнительные GPIO могут быть пронумерованы, начиная с произвольного значения (40 и выше, поскольку esp32 имеет GPIO 0..39). Затем эти новые «виртуальные» GPIO (например) от 100 до 115 можно использовать в конфигурации кнопок, set_GPIO или других настройках конфигурации.
Каждый расширитель может поддерживать до 32 GPIO. Для использования расширителя для кнопок должно быть предусмотрено прерывание, режим опроса не приемлем. Расширитель без прерывания по-прежнему можно настроить, но будет использоваться только выход. Обратите внимание, что одно и то же прерывание может использоваться всеми расширителями, если они используют открытый сток или открытые коллекторы (что, вероятно, все они делают).
Параметр «gpio_exp_config» представляет собой список, разделенный точкой с запятой (;), со следующим синтаксисом для каждого расширителя.
model=<model>,addr=<addr>,[,port=system|dac][,base=<n>][,count=<n>][,intr=<gpio>][,cs=<gpio>][,speed=<Hz>]
Обратите внимание, что ШИМ («led_brightness» ниже) не поддерживается для расширенных GPIO, и их нельзя использовать для высокоскоростных или точных сигналов синхронизации, таких как CS, D/C, Reset и Ready. Поддерживаются кнопки, поворотный энкодер, управление усилителем и питание. В зависимости от фактического набора микросхем может поддерживаться подтягивание или понижение напряжения, поэтому вам, возможно, придется добавить внешние резисторы (подтягивание поддерживает только MCP23x17). pca8575 — не лучший чип, он генерирует немало ложных прерываний при использовании для выхода GPIO. При использовании расширителя SPI шина должна быть настроена с использованием общей шины SPI.
См. set_GPIO, чтобы узнать, как настроить зеленый и красный светодиоды (включая адресуемые RGB). Кроме того, их яркостью можно управлять с помощью параметра «led_brigthness». Синтаксис:
[green=0..100][,red=0..100]
Примечание. Для именованной конфигурации GPIO, на который влияет зеленый и красный светодиод, не может быть изменен, но применяется опция яркости.
Одну светодиодную ленту, содержащую до 255 адресуемых светодиодов, можно настроить для обеспечения улучшенной визуализации. Визуализатор VU Meter включает индикатор состояния батареи (см. Батарея). В настоящее время поддерживаются только светодиоды WS2812B. Установите аппаратную конфигурацию светодиодной ленты или синтаксис NVSled_vu_config:
type=[WS2812],length=<n>,gpio=<dataPin>[,scale=<gain>]
где <n>
– количество светодиодов в ленте (1..255). Значение усиления <scale>
(в процентах) может быть добавлено для улучшения отклика эффекта.
Последнее обновление плагина LMS требуется для установки режима визуализатора и яркости на странице настроек ESP32 для плеера или управляемого дисплея (см. меню Extra/SqueezeESP32). Плагин добавляет дополнительные команды CLI LMS.
Команда | Примечания |
---|---|
<playerid>led_visual [<режим>] [<яркость>] | Переключает или выбирает «режим» визуализатора. Яркостью визуализатора (0..255) можно управлять с помощью тега «brightness». |
<playerid> dmx <R,G,B,R,G,B, ... R,G,B> [<смещение>] | Устанавливает цвет светодиода, начиная с позиции «смещение». с цветовыми последовательностями «R» (красный), «G» (зеленый) и «B» (синий). Добавьте дополнительные значения RGB в строку с разделителями, чтобы установить несколько светодиодов. |
Поддерживается один общий поворотный энкодер, квадратурный сдвиг при нажатии. Такие энкодеры обычно имеют 2 контакта для энкодеров (A и B), общий C, который необходимо заземлить, и дополнительный контакт SW для нажатия. A, B и SW должны быть подтянуты, поэтому ESP32 обеспечивает автоматическое подтягивание, но вы можете добавить свои собственные резисторы. Небольшая фильтрация на A и B (~470 нФ) помогает устранить дребезг, который не создается программным обеспечением.
Кодер обычно жестко запрограммирован на управление ручкой влево, вправо и нажатием на LMS, а также на уменьшение/увеличение/переключение громкости на BT, AirPlay и Spotify. Использование опции «громкость» делает постоянное переключение громкости вниз/увеличение/воспроизведение жестко запрограммированным (даже в LMS). Опция «longpress» позволяет использовать альтернативный режим при длительном нажатии SW. В этом режиме лево — предыдущее, право — следующее, а нажатие — переключение. Каждое долгое нажатие на SW переключает режимы (фактическое поведение основного режима зависит от «громкости»).
Существует также возможность использовать опцию «knobonly» (только с «громкостью» и «длительным нажатием»). В этом режиме предлагается полная навигация с помощью одной ручки, что немного искажено из-за принципов пользовательского интерфейса LMS. Влево, вправо и нажатие подчиняются правилам навигации LMS, и особенно нажатие всегда переходит к нижнему элементу подменю, даже при навигации по музыкальной библиотеке. Это вызывает проблему, поскольку здесь нет кнопок «Воспроизвести», «Назад» или «Пауза». Обходной путь приведен ниже:
Скорость двойного щелчка (или левого-правого) можно установить с помощью дополнительного параметра «knobonly». Это не идеальное решение, и другие идеи приветствуются. Имейте в виду, что чем дольше вы устанавливаете скорость двойного щелчка, тем менее отзывчивым будет интерфейс. Причина в том, что мне нужно дождаться этой задержки, прежде чем решить, будет ли это одиночный или двойной щелчок. Это также может привести к «колебаниям» навигации по меню, которые легко интерпретируются как «Пауза».
Используйте параметр Rotary_config со следующим синтаксисом:
A=<gpio>,B=<gpio>[,SW=gpio>[[,knobonly[=<ms>]]|[[,volume][,longpress]]]]
Аппаратное примечание: все gpio, используемые для вращения, имеют внутреннее подтягивание, поэтому обычно нет необходимости подавать Vcc на энкодер. Тем не менее, если используемая вами плата кодировщика также имеет свои собственные подтягивающие напряжения, более сильные, чем у ESP32 (что, вероятно, так и есть), тогда между gpio будут перекрестные помехи, поэтому вам придется подключить Vcc. Посмотрите на схему вашей платы, и вы поймете, что эти подтягивания платы создают «выигрышное» понижение напряжения, когда любой другой контакт заземлен.
SW gpio не является обязательным, вы можете изменить его на чистую кнопку, если хотите, но параметры громкости, длительного нажатия и только ручки не имеют особого смысла, поскольку отсутствующий переключатель играет важную роль в этих режимах. У вас все еще может быть режим «громкости», но вы не сможете использовать его ни для чего, кроме увеличения и уменьшения громкости. Так что имейте в виду, что использование синтаксиса [] выше немного вводит в заблуждение.
См. также «ВАЖНОЕ ПРИМЕЧАНИЕ» в разделе «Кнопки» и помните, что когда активирован lms_ctrls_raw (см. ниже), ни одна из этих опций только кнопок, громкости и длительного нажатия не применяется, необработанные коды кнопок (а не действия) просто отправляются в LMS.
Обратите внимание, что в esp32 gpio 36 и 39 предназначены только для ввода и не могут использовать прерывания, поэтому для них нельзя установить значение A или B. При их использовании для ПО используется опрос 100 мс, что дорого.
Поддерживается один специальный поворотный энкодер громкости, квадратурный сдвиг при нажатии. Кодер жестко запрограммирован для увеличения, уменьшения громкости и переключения воспроизведения для LMS, BT, AirPlay и Spotify (см. примечание выше о фильтрации и примечание к аппаратному обеспечению, а также GPIO 36 и 39 на esp32).
Используйте параметр Volume_rotary со следующим синтаксисом:
A=<gpio>,B=<gpio>[,SW=gpio>]
Кнопки описываются с помощью строки JSON со следующим синтаксисом.
[
{ "gpio" : <num>,
"type" : " BUTTON_LOW | BUTTON_HIGH " ,
"pull" :[ true|false ],
"long_press" : <ms>,
"debounce" : <ms>,
"shifter_gpio" : <-1|num>,
"normal" : { "pressed" : " <action> " , "released" : " <action> " },
"longpress" : { <same> },
"shifted" : { <same> },
"longshifted" : { <same> },
},
{ ... },
{ ... },
]
Где (все параметры являются необязательными, кроме gpio)
Где <action>
является либо именем другой конфигурации для загрузки (Remap), либо один среди
ACTRLS_NONE, ACTRLS_POWER, ACTRLS_VOLUP, ACTRLS_VOLDOWN, ACTRLS_TOGGLE, ACTRLS_PLAY,
ACTRLS_PAUSE, ACTRLS_STOP, ACTRLS_REW, ACTRLS_FWD, ACTRLS_PREV, ACTRLS_NEXT,
BCTRLS_UP, BCTRLS_DOWN, BCTRLS_LEFT, BCTRLS_RIGHT,
BCTRLS_PS1, BCTRLS_PS2, BCTRLS_PS3, BCTRLS_PS4, BCTRLS_PS5, BCTRLS_PS6, BCTRLS_PS7, BCTRLS_PS8, BCTRLS_PS9, BCTRLS_PS10,
KNOB_LEFT, KNOB_RIGHT, KNOB_PUSH,
ACTRLS_SLEEP,
Обратите внимание, что actrls_sleep - это не реальная кнопка, которую можно отправить в LMS, но это крючок для активации режима глубокого спя (см. Sleep).
Тот, что вы создали такую строку, используйте ее, чтобы заполнить новый параметр NVS с любым именем ниже 16 (?). Вы можете иметь как можно больше из этих конфигураций. Затем установите параметр конфигурации "ACTRLS_CONFIG" с именем вашего конфигурации по умолчанию
Например, конфигурация с именем «кнопки»:
[{ "gpio" : 4 , "type" : " BUTTON_LOW " , "pull" : true , "long_press" : 1000 , "normal" :{ "pressed" : " ACTRLS_VOLDOWN " }, "longpress" :{ "pressed" : " buttons_remap " }},
{ "gpio" : 5 , "type" : " BUTTON_LOW " , "pull" : true , "shifter_gpio" : 4 , "normal" :{ "pressed" : " ACTRLS_VOLUP " }, "shifted" :{ "pressed" : " ACTRLS_TOGGLE " }}]
Определяет две кнопки
В то время как конфигурация с именем "bultons_remap"
[{ "gpio" : 4 , "type" : " BUTTON_LOW " , "pull" : true , "long_press" : 1000 , "normal" :{ "pressed" : " BCTRLS_DOWN " }, "longpress" :{ "pressed" : " buttons " }},
{ "gpio" : 5 , "type" : " BUTTON_LOW " , "pull" : true , "shifter_gpio" : 4 , "normal" :{ "pressed" : " BCTRLS_UP " }}]
Определяет две кнопки
Ниже приведен сложный, но функциональный интерфейс 2-буттонов для вашего удовольствия от декодирования:
actrls_config
:
buttons
buttons
:
[{ "gpio" : 4 , "type" : " BUTTON_LOW " , "pull" : true , "long_press" : 1000 ,
"normal" :{ "pressed" : " ACTRLS_VOLDOWN " },
"longpress" :{ "pressed" : " buttons_remap " }},
{ "gpio" : 5 , "type" : " BUTTON_LOW " , "pull" : true , "long_press" : 1000 , "shifter_gpio" : 4 ,
"normal" :{ "pressed" : " ACTRLS_VOLUP " },
"shifted" :{ "pressed" : " ACTRLS_TOGGLE " },
"longpress" :{ "pressed" : " ACTRLS_NEXT " }}
]
buttons_remap
:
[{ "gpio" : 4 , "type" : " BUTTON_LOW " , "pull" : true , "long_press" : 1000 ,
"normal" :{ "pressed" : " BCTRLS_DOWN " },
"longpress" :{ "pressed" : " buttons " }},
{ "gpio" : 5 , "type" : " BUTTON_LOW " , "pull" : true , "long_press" : 1000 , "shifter_gpio" : 4 ,
"normal" :{ "pressed" : " BCTRLS_UP " },
"shifted" :{ "pressed" : " BCTRLS_PUSH " },
"longpress" :{ "pressed" : " ACTRLS_PLAY " },
"longshifted" :{ "pressed" : " BCTRLS_LEFT " }}
]
Важное примечание : LMS также поддерживает возможность отправки кодов кнопок «необработанные». Это немного сложно, так что терпите меня. Кнопки могут быть обработаны с помощью SqueezeSP32 и отображены с «функцией», например, Play/Paus T есть какой -либо контроль над этим.
Преимущество режима «необработанного» заключается в том, что вы можете построить игрока, который как можно ближе к буму (например,), но вы не можете использовать функцию перенастроения или логику Longpress или сдвиг, чтобы выполнить свое собственное отображение, когда у вас есть Ограниченный набор кнопок. В режиме «сырой» все, что вам действительно нужно определить, это отображение между GPIO и кнопкой. Что касается LMS, любой другой вариант в этих полезных нагрузках JSON не имеет значения. Теперь, когда вы используете BT или AirPlay, полностью применяется полная конструкция JSON, поэтому параметры Shift, Longpress, переиздание все еще работают.
Имейте в виду, что при использовании режима не «необработанного» используется CLI (интерфейс командной строки) LMS и должен быть доступен без пароля
Нет хорошего или плохого варианта, это ваш выбор. Используйте параметр NVS "LMS_CTRLS_RAW", чтобы изменить эту опцию
Обратите внимание, что GPIO 36 и 39 являются входными только и не могут использовать прерывание. При использовании их для кнопки запускается опрос на 100 мс, что стоит дорого. Длинная пресса также, вероятно, не очень хорошо работает
Wired Ethernet поддерживается ESP32 с различными вариантами, но SqueezeSP32 поддерживает только Microchip LAN8720 с интерфейсом RMII, таким как этот, или мосты Spi-Ethernet, такие как Davicom DM9051, который или W5500, как это.
Примечание. Строительные кнопки, которые можно найти на какой -то плате, как Lyrat V4.3, в настоящее время не поддерживаются.
GPIO | Сигнал RMII | Примечания |
---|---|---|
GPIO21 | Tx_en | EMAC_TX_EN |
GPIO19 | TX0 | EMAC_TXD0 |
GPIO22 | TX1 | EMAC_TXD1 |
GPIO25 | RX0 | EMAC_RXD0 |
GPIO26 | RX1 | EMAC_RXD1 |
GPIO27 | CRS_DV | EMAC_RX_DRV |
GPIO0 | Ref_clk | 50 МГц часы |
model=lan8720,mdc=<gpio>,mdio=<gpio>[,rst=<gpio>]
Подключение штифта сброса для LAN8720 является необязательным, но рекомендуется избежать того, что GPIO0 (входные часы 50 МГц) блокирует ESP32 в режиме загрузки во время загрузки.
APLL ESP32 необходим для аудиокодека, поэтому нам нужен LAN8720, который предоставляет