Tampaknya semakin banyak orang yang menggunakan ini tanpa server LMS, hanya untuk BT, AirPlay, atau Spotify. Tidak apa-apa, tetapi pahamilah bahwa memerasliteESP32 pada dasarnya adalah pemutar Media Server Logitech dan telah dirancang berdasarkan konsep tersebut. Semua mode lainnya merupakan tambahan yang digabungkan ke dalamnya, sehingga mode lain memiliki kekurangannya masing-masing. Jadi pastikan Anda membaca ini sebelum membuka terbitan
Squeezelite-esp32 adalah rangkaian perangkat lunak audio yang dibuat untuk berjalan pada wifi esp32 dan esp32-s3 espressif (b/g/n) dan chipset bluetooth. Ia menawarkan kemampuan berikut
Tergantung pada perangkat keras yang terhubung ke esp32, Anda dapat mengirim audio ke DAC lokal, ke SPDIF, atau ke speaker Bluetooth. Perangkat keras minimum yang diperlukan adalah modul WROVER dengan Flash 4MB dan PSRAM 4MB (https://www.espressif.com/en/products/modules/esp32). Dengan modul mandiri tersebut, cukup gunakan daya dan Anda dapat melakukan streaming ke speaker Bluetooth. Anda juga dapat mengirim audio ke sebagian besar I2S DAC serta penerima SPDIF hanya dengan menggunakan kabel atau transduser optik.
Namun pemerasan-esp32 sangat dapat diperluas dan Anda dapat menambahkannya
Fitur lainnya termasuk
Untuk mengontrol equalizer atau menggunakan tampilan di LMS, diperlukan model pemutar baru dan ini disediakan melalui plugin yang merupakan bagian dari repositori pihak ketiga LMS
(pendapat disajikan di sini jadi saya = @ philippe44) Build utama dari pemerasan-esp32 adalah inti internal 16 bit dengan semua perhitungan dalam 32 bit atau presisi float. Ini adalah pilihan desain yang saya buat untuk menjaga kinerja CPU (ini sudah banyak menggunakan chipset esp32) dan mengoptimalkan penggunaan memori karena kami hanya memiliki 4MB RAM yang dapat digunakan. Beberapa orang mungkin berkomentar dengan benar bahwa modul WROVER memiliki 8MB RAM, tetapi prosesor hanya mampu menangani 4MB dan 4MB sisanya harus diberi nomor halaman dengan blok yang lebih kecil dan saya tidak memiliki kesabaran untuk itu.
Sekarang, ketika saya melakukan porting dari pemerasan ke esp32, saya juga membuat inti 16 atau 32 bit kompatibel pada waktu kompilasi. Sejauh ini, ini berfungsi dalam 32 bit tetapi lebih sedikit pengujian yang dilakukan. Anda dapat memilih untuk mengkompilasinya dalam mode 32 bit. Saya tidak terlalu tertarik dengan sampel 16 bit di atas karena tidak membawa apa-apa (saya memiliki latar belakang teknik dalam teori informasi).
Kemampuan | 16 bit | 32 bit | komentar |
---|---|---|---|
tingkat pengambilan sampel maksimal | 192k | 96k | 192k sangat menantang, apalagi jika dipadukan dengan tampilan |
kedalaman bit maksimal | 16 | 24 | 24 bit terpotong dalam mode 16 bit |
spdif | 16 bit | 20 bit | |
mp3, aac, karya, ogg/vorbis | 48k | 48k | |
alac, flac, ogg/flac | 96k | 96k | |
pcm, wav, aif | 192k | 96k | |
penyeimbang | Y | N | Maks 48kHz (setelah pengambilan sampel ulang) - pemerataan dilewati pada >48k trek |
pengambilan sampel ulang | Y | N | |
memudar silang | 10 detik | <5 detik | tergantung pada ukuran buffer dan laju pengambilan sampel |
Esp32 harus berjalan pada 240 MHz, dengan Quad-SPI I/O pada 80 MHz dan clock 40 Mhz. Tetap saja, masih banyak yang harus dijalankan, terutama mengetahui bahwa ia memiliki serial Flash dan PSRAM, jadi pujian untuk Espressif untuk optimalisasi chipsetnya. Sekarang, untuk memiliki semua decoding, resampling, equalizing, gain, display, spektrum/vu adalah keseimbangan yang sangat (sangat) rumit antara penggunaan RAM internal/eksternal, prioritas tugas dan penanganan buffer. Ini tidak sempurna dan semakin Anda menekan sistem hingga batasnya, semakin tinggi risiko beberapa file tidak dapat diputar (lihat di bawah). Secara umum, tampilan akan selalu memiliki prioritas terendah dan Anda akan melihat perlambatan dalam kecepatan gulir dan kecepatan refresh VU/Spectrum. Sekarang, bahkan thread tampilan memiliki beberapa bagian penting dan memengaruhi kemampuan. Misalnya, tampilan warna dengan kedalaman 16 bit dengan kecepatan SPI rendah mungkin mencegah flac 24/96 berfungsi tetapi masih berfungsi dengan pcm 24/96
Dalam mode 16 bit, meskipun 192 kHz dilaporkan sebagai kecepatan maksimal, sangat disarankan untuk membatasi kecepatan pengambilan sampel yang dilaporkan hingga 96k (-Z 96000). Perhatikan bahwa beberapa streaming online 24/96k berkecepatan tinggi mungkin tersendat karena kinerja tumpukan TCP/IP. Hal ini biasanya disebabkan oleh fakta bahwa server mengirimkan paket data kecil dan esp32 tidak dapat menerima audio yang dikodekan dengan cukup cepat, terlepas dari pengaturan prioritas tugas (saya sudah mencoba mengubahnya sedikit). Pilihan terbaik dalam hal ini adalah membiarkan LMS memproksi aliran tersebut karena akan memberikan potongan yang lebih besar dan aliran yang "lebih lancar" yang kemudian dapat ditangani.
Perhatikan juga bahwa beberapa codec mengonsumsi lebih banyak CPU dibandingkan yang lain atau belum terlalu dioptimalkan. Saya telah melakukan yang terbaik untuk mengubahnya, tetapi tingkat pengoptimalan tersebut mencakup penulisan beberapa perakitan yang menyakitkan. Salah satu codec yang sangat menuntut adalah AAC ketika file dikodekan dengan SBR. Hal ini memungkinkan rekonstruksi bagian atas spektrum dan dengan demikian tingkat pengambilan sampel yang lebih tinggi, tetapi spesifikasi codec sedemikian rupa sehingga ini opsional, Anda dapat memecahkan kode pita yang lebih rendah dan menerima tingkat pengambilan sampel yang lebih rendah - Lihat opsi AAC_DISABLE_SBR di bawah.
PENTING: di esp32 (bukan esp32-s3), menggunakan Spotify dengan SPDIF menghasilkan audio yang tersendat-sendat saat "statistik" diaktifkan. Anda HARUS menonaktifkannya
Perangkat keras berbasis esp32 apa pun dengan flash minimal 4MB dan PSRAM 4MB akan mampu menjalankan pemerasan-esp32 dan ada berbagai papan yang menyertakan chip tersebut. Beberapa disebutkan di bawah, tetapi yang mana pun bisa digunakan. Anda dapat menemukan berbagai bantuan & petunjuk di sini
Demi kejelasan, modul WROOM TIDAK berfungsi karena tidak menyertakan PSRAM. Beberapa desain mungkin menambahkannya secara eksternal, tetapi (sangat) kecil kemungkinannya.
Sesuai uraian di atas, modul WROVER cukup untuk menjalankan Squeezelite-esp32, tetapi memerlukan sedikit penyesuaian untuk memperluasnya agar memiliki audio analog atau tombol perangkat keras (misalnya)
Harap dicatat bahwa saat mengirim ke speaker Bluetooth (sumber), hanya 44,1 kHz yang dapat digunakan, jadi Anda membiarkan LMS melakukan pengambilan sampel ulang, namun Anda harus memastikan LMS hanya mengirimkan trek 44,1 kHz atau mengaktifkan opsi pengambilan sampel ulang internal (menggunakan -R) . Jika Anda menghubungkan DAC, pilihan laju sampel akan bergantung pada kemampuannya. Lihat di bawah untuk lebih jelasnya.
Kebanyakan DAC akan bekerja langsung hanya dengan koneksi I2S, namun beberapa memerlukan perintah khusus untuk dikirim menggunakan I2C. Lihat opsi DAC di bawah untuk memahami cara mengirim perintah khusus ini. Ada dukungan bawaan untuk TAS575x, TAS5780, TAS5713 dan AC101 DAC.
Modul berbasis esp32-s3 seperti ini juga didukung tetapi memerlukan esp-idf 4.4. Ini belum menjadi bagian dari rilis resmi, tetapi sudah dikompilasi & dijalankan. S3 tidak memiliki audio bluetooth. Perhatikan bahwa kinerja CPU sangat ditingkatkan.
Ini adalah pendamping perangkat keras utama Squeezelite-esp32 dan telah dikembangkan bersama. Detail mengenai kemampuan dapat ditemukan di sini dan di sini.
Jika Anda ingin membangun kembali, gunakan file konfigurasi squeezelite-esp32-SqueezeAmp-sdkconfig.defaults
.
NB: Anda dapat menggunakan binari pra-bangun SqueezeAMP4MBFlash yang semua I/O perangkat kerasnya diatur dengan benar. Anda juga dapat menggunakan biner generik I2S4MBFlash dalam hal ini parameter NVS harus diatur untuk mendapatkan perilaku yang sama persis
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 dapat digunakan sebagai sinyal bangun menggunakan (mengatur sleep_config
dengan wake=0:0
). Ini adalah pull-up sehingga tetap di 1 ketika tidak menerima apa pun yang berarti tidak dapat digunakan bersama dengan IO bangun lainnya. Lihat Tidur untuk rincian lebih lanjut mengenai batasan bangun pada beberapa input.
Speaker portabel bertenaga baterai ini kompatibel dengan memeraslite-esp32 yang mana terdapat build khusus yang disertakan dengan setiap pembaruan. Jika Anda ingin membangun kembali, gunakan file konfigurasi squeezelite-esp32-Muse-sdkconfig.defaults
.
NB: Anda dapat menggunakan binari pra-bangun Muse4MBFlash yang memiliki semua I/O perangkat keras yang diatur dengan benar. Anda juga dapat menggunakan biner generik I2S4MBFlash dalam hal ini parameter NVS harus diatur untuk mendapatkan perilaku yang sama persis
muse
channel=5,scale=7.48,atten=3,cells=1
"mosi=15,miso=2,clk=14
(yang ini mungkin opsional)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"}}]
Bekerja dengan modul ESP32-A1S yang mencakup codec audio dan output headset. Anda tetap perlu menggunakan papan demo seperti ini atau amplifier eksternal jika ingin sambungan speaker langsung. Perhatikan bahwa ada versi dengan codec AC101 dan satu lagi dengan ES8388 dengan kemungkinan dua varian - papan ini berantakan (lihat di bawah)
Papan yang ditunjukkan di atas memiliki set IO berikut
(perhatikan bahwa beberapa GPIO memerlukan pullup)
Jadi konfigurasi yang mungkin adalah
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 " }}]
untuk AC101
model=AC101,bck=27,ws=26,do=25,di=35,sda=33,scl=32
untuk ES8388 (sepertinya ada varian dengan nomor versi yang sama - berantakan total)
model=ES8388,bck=5,ws=25,do=26,sda=18,scl=23,i2c=16
ataumodel=ES8388,bck=27,ws=25,do=26,sda=33,scl=32,i2c=16
Ini adalah jam tangan pintar yang menyenangkan berdasarkan ESP32. Ini memiliki layar 240x240 ST7789 dan audio onboard. Tidak terlalu berguna untuk mendengarkan apa pun tetapi berhasil. Ini adalah contoh perangkat yang memerlukan serangkaian perintah I2C untuk DAC/APU-nya (lihat di bawah). Ada opsi build jika Anda memutuskan untuk membangun kembali semuanya sendiri, jika tidak, opsi default I2S berfungsi dengan parameter berikut
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 membutuhkan chipset esp32 dan PSRAM 4MB. ESP32-WROVER memenuhi persyaratan ini. Untuk mendapatkan output audio dapat digunakan I2S DAC. DAC PCM5102 I2S murah berfungsi tetapi banyak lainnya juga berfungsi. DAC PCM5012 dapat dihubungkan melalui:
I2S - PENYUSUN
VCC - 3.3V
3.3V - 3.3V
GND - GND
FLT - GND
DMP - GND
SCL - GND
BCK - (BCK - lihat di bawah)
DIN - (LAKUKAN - lihat di bawah)
LCK - (WS - lihat di bawah) FMT - GND
XMT - 3.3V
Gunakan file konfigurasi squeezelite-esp32-I2S-4MFlash-sdkconfig.defaults
.
Dan proyek super keren https://github.com/rochuck/squeeze-amp-too
Untuk mengakses NVS, di webUI, buka kredit dan pilih "shows nvs editor". Masuk ke tab editor NVS untuk mengubah parameter NFS. Dalam deskripsi sintaksis di bawah ini <> berarti suatu nilai sedangkan [] menjelaskan parameter opsional.
Seperti disebutkan di atas, ada beberapa build khusus yang disediakan saat ini: SqueezeAMP dan Muse tetapi jika Anda membuatnya sendiri, Anda juga dapat membuat build untuk T-WATCH2020. Build default adalah firmware generik bernama I2S yang dapat dikonfigurasi melalui NVS untuk menghasilkan hasil yang persis sama dibandingkan build khusus. Bedanya, parameter harus dimasukkan dan dapat terhapus secara tidak sengaja. GUI juga memberikan bantuan besar untuk memuat "kumpulan konfigurasi yang diketahui".
Berdasarkan pilihan desain, tidak ada kode yang hanya disematkan untuk versi tertentu, semua kode selalu ada. Filosofinya adalah meminimalkan sebanyak mungkin kode khusus platform dan penggunaan #ifdef
tertentu dilarang, apa pun yang terjadi. Jadi jika Anda ingin menambahkan platfrom Anda sendiri, harap perhatikan baik-baik mainKConfig.projbuild
untuk melihat bagaimana Anda dapat, dengan menggunakan parameter di bawah, menjadikan perangkat Anda murni solusi berbasis konfigurasi. Jika tidak ada pilihan lain, lihat targets<target>
untuk menambahkan kode Anda sendiri. Saya tidak akan menerima PR untuk kode yang dapat menghindari pembuatan kode khusus tersebut bila memungkinkan. "Target" NVS akan digunakan untuk memanggil kode spesifik target, tetapi sekali lagi ini murni waktu proses, bukan waktu kompilasi.
Parameter NVS "i2c_config" mengatur gpio i2c yang digunakan untuk tujuan umum (misalnya tampilan). Biarkan kosong untuk menonaktifkan penggunaan I2C. Perhatikan bahwa pada SqueezeAMP, port harus 1. Kecepatan default adalah 400000 tetapi beberapa tampilan dapat mencapai 800000 atau lebih. Sintaksnya adalah
sda=<gpio>,scl=<gpio>[,port=0|1][,speed=<speed>]
Harap diperhatikan bahwa Anda tidak dapat menggunakan GPIO atau port yang sama dengan DAC.
Esp32 memiliki 4 sub-sistem SPI, satu tidak dapat diakses sehingga penomorannya 0..2 dan SPI0 dicadangkan untuk Flash/PSRAM. Parameter NVS "spi_config" mengatur gpio spi yang digunakan untuk tujuan umum (misalnya tampilan). Biarkan kosong untuk menonaktifkan penggunaan SPI. Parameter DC diperlukan untuk tampilan. Sintaksnya adalah
data|mosi=<gpio>,clk=<gpio>[,dc=<gpio>][,host=1|2][,miso=<gpio>]
Default dan hanya "host" adalah 1 karena yang lain sudah digunakan oleh flash dan spiram. Parameter opsional "miso" (MasterInSlaveOut) hanya digunakan ketika bus SPI bersifat dua arah dan dibagikan dengan perangkat lain seperti ethernet, gpio expander. Perhatikan bahwa "data" juga bisa diberi nama "mosi" (MasterOutSlaveIn).
Parameter NVS "dac_config" mengatur gpio yang digunakan untuk komunikasi i2s dengan DAC Anda. Anda dapat menentukan default pada waktu kompilasi tetapi parameter nvs diutamakan kecuali untuk konfigurasi bernama
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>]]
jika "model" tidak disetel atau tidak dikenali, maka "I2S" default digunakan. Opsi "mck" digunakan untuk beberapa codec yang memerlukan jam master (walaupun seharusnya tidak). Secara default GPIO0 digunakan sebagai MCLK dan hanya versi terbaru (pasca pertengahan 2023) yang dapat menggunakan 1 atau 2. Perlu diketahui juga bahwa ini tidak dapat digabungkan dengan RMII Ethernet (lihat bagian ethernet di bawah). Parameter I2C bersifat opsional dan hanya diperlukan jika DAC Anda memerlukan kontrol I2C (Lihat 'dac_controlset' di bawah). Perhatikan bahwa parameter "i2c" adalah desimal, notasi hex tidak diperbolehkan.
Sejauh ini, TAS57xx, TAS5713, AC101, WM8978 dan ES8388 merupakan model yang dikenali di mana kontrol urutan init/volume/daya yang tepat dikirimkan. Untuk codec lain yang mungkin memerlukan perintah I2C, harap gunakan parameter "dac_controlset" yang memungkinkan definisi perintah sederhana dikirim melalui i2c untuk menghidupkan dan mematikan init, daya, speaker, dan headset menggunakan sintaks JSON:
{ <command>: [ <item1>, <item2>, ... <item3> ],
<command>: [ <item1>, <item2>, ... <item3> ],
... }
Dimana <command>
adalah salah satu dari init, poweron, poweroff, speakeron, speakeroff, headseton, headsetoff ( harus berupa array bahkan untuk satu item). Item adalah salah satu elemen berikut
{"reg":<register>,"val":<value>,"mode":<nothing>|"or"|"and"}
{"gpio":<gpio>,"level":0|1}
{"delay":<ms>}
Ini adalah notasi JSON standar, jadi jika Anda belum mengetahuinya, Google adalah teman terbaik Anda. Sadarilah bahwa '...' berarti Anda dapat memiliki entri sebanyak yang Anda inginkan, itu bukan bagian dari sintaksis. Setiap bagian bersifat opsional, tetapi tidak masuk akal untuk menyetel i2c di parameter 'dac_config' dan tidak menyetel apa pun di sini.
Kunci reg
memungkinkan untuk menulis register pada bus i2c. mode
parameter memungkinkan to atau register dengan nilai atau to dan it. Jangan atur mode
jika Anda hanya ingin menulis. Parameter val
dapat berupa array [v1, v2,...] untuk menulis serangkaian byte dalam satu i2c burst (dalam hal ini 'mode' diabaikan). Perhatikan bahwa semua nilai harus desimal . Anda dapat menggunakan validator seperti ini untuk memverifikasi sintaksis Anda. Kunci gpio
hanya mengatur gpio sebagai bagian dari tindakan DAC dan delay
memungkinkan jeda antar elemen.
Perintah 'daya' digunakan saat menghidupkan/mematikan DAC setelah periode idle (lihat opsi -C pada pemerasan) dan perintah 'speaker/headset' dikirim saat beralih antara speaker dan headset (lihat deteksi jack headset).
NB: Untuk konfigurasi bernama ((SqueezeAMP, Muse...semua kecuali I2S), semua ini diabaikan. Untuk codec yang diketahui, urutan bawaan dapat ditimpa menggunakan dac_controlset
Harap dicatat bahwa Anda tidak dapat menggunakan GPIO atau port yang sama dengan I2C.
Parameter NVS "spdif_config" menyetel gpio i2s yang diperlukan untuk SPDIF.
SPDIF disediakan dengan menggunakan kembali antarmuka i2s dengan cara yang tidak standar, sehingga meskipun hanya diperlukan satu pin (DO), pengontrol harus diinisialisasi penuh, sehingga bit clock (bck) dan word clock (ws) harus atur juga. Karena i2s dan SPDIF saling eksklusif, Anda dapat menggunakan kembali IO yang sama jika perangkat keras Anda mengizinkannya.
Anda dapat menentukan default pada waktu kompilasi tetapi parameter nvs diutamakan kecuali untuk konfigurasi bernama (SqueezeAMP, Muse ...)
Biarkan kosong untuk menonaktifkan penggunaan SPDIF, Anda juga dapat mendefinisikannya pada waktu kompilasi menggunakan "make menuconfig". Sintaksnya adalah
bck=<gpio>,ws=<gpio>,do=<gpio>
NB: Untuk konfigurasi bernama, ini diabaikan
Kedalaman bit maksimum adalah 24 bit, bahkan dalam mode 32 bit (ini adalah batasan SPDIF - terima kasih @UrbanLienert untuk pembaruan dari 20 ke 24 bit). Sekarang, Anda juga bisa mendapatkan SPDIF menggunakan chip khusus yang menawarkan antarmuka I2S seperti DAC tetapi mengeluarkan SPDIF (optik dan coax). Mengacu pada bab DAC.
Jika Anda ingin membujuk, Anda juga dapat menggunakan trik orang malang untuk menghasilkan sinyal dari GPIO 3.3V. Yang dilakukan hanyalah membagi 3,3V untuk menghasilkan 0,6V puncak-ke-puncak dan kemudian menghilangkan DC
100nF
GPIO ----210ohm-----------||---- coax S/PDIF signal out
|
110ohm
|
Ground -------------------------- coax signal ground
Parameter NVS "display_config" menetapkan parameter untuk tampilan opsional. Ini bisa berupa I2C (lihat di sini untuk bus bersama) atau SPI (lihat di sini untuk bus bersama) Sintaksnya
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]]
Anda dapat mengubah cara vu-meter dan penganalisis spektrum ditampilkan, serta ukuran karya seni melalui menu khusus di pengaturan pemutar (jangan lupa untuk menambahkan plugin).
Parameter NVS "metadata_config" mengatur bagaimana metadata ditampilkan untuk AirPlay dan Bluetooth. Sintaksnya adalah
[format=<display_content>][,speed=<speed>][,pause=<pause>][,artwork[:0|1]]
%artist%
, %album%
, %title%
. Dengan menggunakan format string tersebut, kata kunci diganti dengan nilainya untuk membuat string yang akan ditampilkan. Perhatikan bahwa teks biasa setelah kata kunci yang kebetulan kosong selama pemutaran trek akan dihapus. Misalnya, jika Anda telah menyetel format= %artist% - %title%
dan tidak ada artis di metadata, maka hanya <title>
yang akan ditampilkan, bukan - <title>
.Anda dapat menggunakan penerima IR apa pun yang kompatibel dengan protokol NEC (38KHz) atau RC5. Vcc, GND dan output adalah satu-satunya pin yang perlu dihubungkan, tanpa pullup, tanpa kapasitor penyaringan, sambungan lurus.
Kode IR dikirim "sebagaimana adanya" ke LMS, jadi hanya remote Logitech SB dari Boom, Classic, atau Touch yang akan berfungsi. Saya rasa file Slim_Devices_Remote.ir di direktori "server" LMS dapat dimodifikasi untuk beradaptasi dengan kode lain, tetapi saya belum mencobanya.
Dalam mode AirPlay dan Bluetooth, hanya remote asli ini yang didukung, saya belum menambahkan opsi untuk membuat pemetaan Anda sendiri
Lihat "mengatur GPIO" di bawah untuk mengatur GPIO yang terkait dengan penerima inframerah (opsi "ir").
Parameter "set_GPIO" digunakan untuk menetapkan GPIO ke berbagai fungsi.
GPIO dapat diatur ke penyediaan GND atau Vcc saat boot. Ini nyaman untuk memberi daya pada perangkat yang mengonsumsi kurang dari 40mA dari konektor samping. Berhati-hatilah karena tidak ada pemeriksaan konflik yang dilakukan pada GPIO mana yang Anda ubah, sehingga Anda dapat merusak board Anda atau menimbulkan konflik di sini.
Parameter <amp>
dapat digunakan untuk menetapkan GPIO yang akan diatur ke level aktif (default 1) saat pemutaran dimulai. Ini akan direset ketika pemerasan menjadi tidak aktif. Batas waktu idle diatur pada baris perintah pemerasan melalui -C <timeout>
Parameter <power>
dapat digunakan untuk menetapkan GPIO yang akan diatur ke level aktif (default 1) saat pemutar dihidupkan dan disetel ulang saat dimatikan (di LMS, tidak berlaku untuk AirPlay, Spotify, atau BT).
Jika Anda mempunyai jack audio yang mendukung penyisipan (gunakan :0 atau :1 untuk mengatur level saat dimasukkan), Anda dapat menentukan GPIO mana yang terhubung dengannya. Menggunakan parameter jack_mutes_amp memungkinkan untuk mematikan amp ketika headset (misalnya) dimasukkan.
Anda dapat mengatur LED status Hijau dan Merah juga dengan status aktifnya masing-masing (:0 atau :1) atau spesifik chipsetnya jika Anda menggunakan LED RGB beralamat.
Parameter <ir>
mengatur GPIO yang terkait dengan penerima IR. Tidak perlu menambahkan pullup atau kapasitor
Sintaksnya adalah:
<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>]
Anda dapat menentukan default untuk jack, led spkfault pada waktu kompilasi tetapi parameter nvs diutamakan kecuali untuk konfigurasi bernama ((SqueezeAMP, Muse ...) yang dipaksakan saat runtime. Perhatikan bahwa gpio 36 dan 39 hanya input dan tidak dapat digunakan interupsi. Bila disetel ke kesalahan jack atau speaker, polling 100 ms akan memeriksa nilainya tetapi itu mahal
Dimungkinkan untuk menambahkan ekspander GPIO menggunakan bus I2C atau SPI. Mereka terutama digunakan untuk tombol tetapi mereka juga dapat mendukung keluaran tujuan umum. GPIO tambahan ini dapat diberi nomor mulai dari nilai sembarang (40 ke atas karena esp32 memiliki GPIO 0..39). Kemudian GPIO "virtual" baru dari (misalnya) 100 hingga 115 dapat digunakan dalam konfigurasi tombol, set_GPIO, atau pengaturan konfigurasi lainnya.
Setiap expander dapat mendukung hingga 32 GPIO. Untuk menggunakan expander untuk tombol, interupsi harus disediakan, mode polling tidak dapat diterima. Ekspander tanpa gangguan masih dapat dikonfigurasi, tetapi hanya keluaran yang dapat digunakan. Perhatikan bahwa interupsi yang sama dapat dibagikan ke seluruh ekspander, selama mereka menggunakan saluran terbuka atau kolektor terbuka (yang mungkin semuanya dilakukan)
Parameter "gpio_exp_config" adalah daftar yang dipisahkan titik koma (;) dengan sintaks berikut untuk setiap expander
model=<model>,addr=<addr>,[,port=system|dac][,base=<n>][,count=<n>][,intr=<gpio>][,cs=<gpio>][,speed=<Hz>]
Perhatikan bahwa PWM ("led_brightness" di bawah) tidak didukung untuk GPIO yang diperluas dan tidak dapat digunakan untuk sinyal kecepatan tinggi atau pengaturan waktu yang tepat seperti CS, D/C, Reset, dan Siap. Tombol, encoder putar, kontrol amplifier, dan daya didukung. Tergantung pada chipset sebenarnya, pullup atau pulldown mungkin didukung sehingga Anda mungkin harus menambahkan resistor eksternal (hanya MCP23x17 yang melakukan pullup). Pca8575 bukanlah chip yang bagus, ia menghasilkan sedikit interupsi palsu ketika digunakan untuk GPIO out. Saat menggunakan ekspander SPI, bus harus dikonfigurasi menggunakan bus SPI bersama
Lihat set_GPIO untuk mengetahui cara mengatur LED hijau dan merah (termasuk LED RGB beralamat). Selain itu, kecerahannya dapat dikontrol menggunakan parameter "led_brigthness". Sintaksnya adalah
[green=0..100][,red=0..100]
NB: Untuk konfigurasi bernama, GPIO yang terpengaruh pada LED hijau dan merah tidak dapat diubah tetapi opsi kecerahan berlaku
Satu strip LED dengan hingga 255 LED yang dapat dialamatkan dapat dikonfigurasi untuk menawarkan visualisasi yang lebih baik. Visualisator VU Meter menyertakan indikator status baterai (lihat Baterai). Saat ini hanya LED WS2812B yang didukung. Atur konfigurasi perangkat keras Strip LED, atau sintaks NVS led_vu_config
type=[WS2812],length=<n>,gpio=<dataPin>[,scale=<gain>]
dimana <n>
adalah jumlah LED dalam strip (1..255). Nilai perolehan <scale>
(persentase) dapat ditambahkan untuk meningkatkan respons efek.
Pembaruan plugin LMS terbaru diperlukan untuk mengatur mode visualisator dan kecerahan di halaman Pengaturan ESP32 untuk pemutar, atau tampilan yang dapat dikontrol (lihat menu Ekstra/SqueezeESP32). Plugin ini menambahkan perintah LMS CLI tambahan.
Memerintah | Catatan |
---|---|
<playerid> led_visual [<mode>] [<kecerahan>] | Mengalihkan atau memilih "mode" visualisator. Kecerahan visualisator (0..255) dapat dikontrol menggunakan tag "kecerahan". |
<playerid> dmx <R,G,B,R,G,B, ... R,G,B> [<offset>] | Mengatur warna LED mulai dari posisi "offset" dengan rangkaian warna "R" (merah), "G" (hijau), dan "B" (biru). Tambahkan nilai RGB tambahan ke string yang dibatasi untuk mengatur beberapa LED. |
Satu encoder putar umum didukung, pergeseran kuadratur dengan pers. Encoder seperti itu biasanya memiliki 2 pin untuk encoder (A dan B), dan C umum yang harus disetel ke ground dan pin SW opsional untuk tekan. A, B dan SW harus ditarik ke atas, jadi penarik otomatis disediakan oleh ESP32, tetapi Anda dapat menambahkan resistor Anda sendiri. Sedikit pemfilteran pada A dan B (~470nF) membantu debouncing yang tidak dilakukan oleh perangkat lunak.
Encoder biasanya dikodekan secara keras ke masing-masing kenop kiri, kanan, dan tekan pada LMS dan untuk tombol volume turun/naik/putar di BT, AirPlay, dan Spotify. Menggunakan opsi 'volume' membuatnya sulit dikodekan untuk mengubah volume turun/naik/putar sepanjang waktu (bahkan di LMS). Opsi 'tekan lama' memungkinkan mode alternatif ketika SW ditekan lama. Dalam mode itu, kiri adalah sebelumnya, kanan adalah berikutnya dan tekan tombol alih. Setiap penekanan lama pada SW akan bergantian antar mode (perilaku mode utama sebenarnya bergantung pada 'volume').
Ada juga kemungkinan untuk menggunakan opsi 'knobonly' (eksklusif dengan 'volume' dan 'longpress'). Mode ini mencoba menawarkan navigasi penuh satu tombol yang sedikit menyimpang karena prinsip LMS UI. Kiri, Kanan dan Tekan mematuhi aturan navigasi LMS dan khususnya Tekan selalu menuju ke item submenu bawah, bahkan saat bernavigasi di Perpustakaan Musik. Hal ini menimbulkan tantangan karena tidak ada tombol 'Mainkan', 'Kembali' atau 'Jeda'. Solusinya adalah sebagai berikut:
Kecepatan klik dua kali (atau kiri-kanan) dapat diatur menggunakan parameter opsional 'knobonly'. Ini bukanlah solusi yang sempurna, dan ide-ide lain diterima. Ketahuilah bahwa semakin lama Anda menyetel kecepatan klik dua kali, antarmuka akan semakin kurang responsif. Alasannya adalah saya harus menunggu penundaan tersebut sebelum memutuskan apakah itu klik tunggal atau ganda. Hal ini juga dapat membuat navigasi menu "ragu-ragu" dengan mudah diartikan sebagai 'Jeda'
Gunakan parameter rotary_config dengan sintaks berikut:
A=<gpio>,B=<gpio>[,SW=gpio>[[,knobonly[=<ms>]]|[[,volume][,longpress]]]]
Catatan HW: semua gpio yang digunakan untuk rotary memiliki internal pull-up sehingga biasanya tidak perlu memberikan Vcc ke encoder. Namun jika encoder board yang anda gunakan juga memiliki pull-upnya sendiri yang lebih kuat dari ESP32 (kemungkinan besar demikian), maka akan terjadi crosstalk antar gpio, jadi anda harus membawa Vcc. Lihatlah skema papan Anda dan Anda akan memahami bahwa pull-up papan ini menciptakan pull-down yang "menang" ketika pin lainnya di-ground.
SW gpio bersifat opsional, Anda dapat memengaruhinya kembali ke tombol murni jika Anda mau, tetapi opsi volume, tekan lama, dan tombol saja tidak masuk akal karena sakelar yang hilang memainkan peran penting dalam mode ini. Anda masih dapat memiliki mode "volume", tetapi Anda tidak akan dapat menggunakannya untuk apa pun kecuali volume naik dan turun. Jadi ketahuilah bahwa penggunaan sintaks [] agak menyesatkan di atas.
Lihat juga "CATATAN PENTING" di bagian "Tombol" dan ingat bahwa ketika 'lms_ctrls_raw' (lihat di bawah) diaktifkan, tidak satu pun dari opsi tombol, volume, tekan lama yang berlaku, kode tombol mentah (bukan tindakan) hanya dikirim ke LMS
Perhatikan bahwa pada esp32, gpio 36 dan 39 hanya sebagai input dan tidak dapat menggunakan interupsi, sehingga tidak dapat disetel ke A atau B. Saat menggunakannya untuk SW, digunakan polling 100ms yang mahal.
Satu encoder putar volume khusus didukung, pergeseran kuadratur dengan pers. Encoder dikodekan secara keras untuk menaikkan volume, menurunkan, dan memutar tombol untuk LMS, BT, AirPlay, dan Spotify (lihat catatan di atas untuk pemfilteran dan catatan HW serta GPIO 36 dan 39 di esp32)
Gunakan parameter volume_rotary dengan sintaks berikut:
A=<gpio>,B=<gpio>[,SW=gpio>]
Tombol dijelaskan menggunakan string JSON dengan sintaks berikut
[
{ "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> },
},
{ ... },
{ ... },
]
Dimana (semua parameter bersifat opsional kecuali gpio)
Di mana <action>
adalah nama konfigurasi lain untuk dimuat (remap) atau satu di antara
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,
Perhatikan bahwa ACTRLS_SLEP bukan tombol aktual yang dapat dikirim ke LMS, tetapi ini adalah kait untuk mengaktifkan mode tidur yang dalam (lihat tidur).
Salah satu yang telah Anda buat string seperti itu, gunakan untuk mengisi parameter NVS baru dengan nama apa pun di bawah 16 (?) Karakter. Anda dapat memiliki sebanyak mungkin konfigurasi ini. Kemudian atur parameter konfigurasi "actrls_config" dengan nama konfigurasi default Anda
Misalnya konfigurasi bernama "tombol":
[{ "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 " }}]
Mendefinisikan dua tombol
Sedangkan konfigurasi bernama "tombol_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 " }}]
Mendefinisikan dua tombol
Di bawah ini adalah antarmuka 2 tombol yang sulit tetapi fungsional untuk kesenangan decoding Anda:
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 " }}
]
Catatan penting : LMS juga mendukung kemungkinan untuk mengirim kode tombol 'mentah'. Agak rumit, jadi bersabarlah. Tombol dapat diproses oleh Squeezeesp32 dan dipetakan ke "fungsi" seperti Play/Pause atau mereka hanya dapat dikirim ke LMS sebagai kode polos (mentah) dan logika lengkap tekan/rilis/longpress ditangani oleh LMS, Anda tidak T memiliki kendali atas itu.
Manfaat dari mode "mentah" adalah Anda dapat membangun pemain yang sedekat mungkin dengan boom (misalnya) tetapi Anda tidak dapat menggunakan fungsi ulang atau longpress atau mengubah logika untuk melakukan pemetaan sendiri saat Anda memiliki file set tombol terbatas. Dalam mode 'RAW', yang benar -benar perlu Anda tentukan hanyalah pemetaan antara GPIO dan tombol. Sejauh menyangkut LMS, opsi lain dalam muatan JSON ini tidak masalah. Sekarang, ketika Anda menggunakan BT atau AirPlay, konstruksi JSON lengkap yang dijelaskan di atas sepenuhnya berlaku, sehingga shift, longpress, memetakan ulang opsi masih berfungsi.
Ketahuilah bahwa saat menggunakan mode "RAW", CLI (antarmuka baris perintah) dari LMS digunakan dan harus tersedia tanpa kata sandi
Tidak ada pilihan yang baik atau buruk, itu pilihan Anda. Gunakan parameter NVS "LMS_CTRLS_RAW" untuk mengubah opsi itu
Perhatikan bahwa GPIO 36 dan 39 hanya input dan tidak dapat menggunakan interupsi. Saat menggunakannya untuk sebuah tombol, pemungutan suara 100ms dimulai yang mahal. Press panjang juga cenderung tidak bekerja dengan baik
Wired Ethernet didukung oleh ESP32 dengan berbagai opsi tetapi Squeezeesp32 hanya mendukung Microchip LAN8720 dengan antarmuka RMII seperti ini atau jembatan Spi-Ethernet seperti Davicom DM9051 yang atau W5500 seperti ini.
Catatan: Tombol sentuh yang dapat ditemukan di beberapa papan seperti Lyrat v4.3 tidak didukung saat ini.
GPIO | Sinyal RMII | Catatan |
---|---|---|
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 | Jam 50mhz |
model=lan8720,mdc=<gpio>,mdio=<gpio>[,rst=<gpio>]
Menghubungkan pin reset untuk lan8720 adalah opsional tetapi disarankan untuk menghindari gpio0 (clock input 50mHz) mengunci ESP32 dalam mode unduhan pada waktu boot.
APLL dari ESP32 diperlukan untuk codec audio, jadi kami membutuhkan LAN8720 yang menyediakan a