ดูเหมือนว่าผู้คนจำนวนมากขึ้นเรื่อยๆ จะใช้สิ่งนี้โดยไม่มีเซิร์ฟเวอร์ LMS เพียงสำหรับ BT, AirPlay หรือ Spotify ไม่เป็นไร แต่เข้าใจว่า squeezeliteESP32 นั้นเป็นเครื่องเล่น Logitech Media Server เป็นหลัก และได้รับการออกแบบตามแนวคิดนั้น โหมดอื่นๆ ทั้งหมดเป็นส่วนเสริมที่ต่อเข้าด้วยกัน ดังนั้นโหมดอื่นๆ จึงมีข้อบกพร่อง ดังนั้นโปรดอ่านข้อความนี้ก่อนเปิดประเด็น
Squeezelite-esp32 เป็นชุดซอฟต์แวร์เสียงที่สร้างขึ้นเพื่อใช้บนชิปเซ็ต esp32 และ esp32-s3 wifi (b/g/n) และบลูทูธของ espressif มันมีความสามารถดังต่อไปนี้
ขึ้นอยู่กับฮาร์ดแวร์ที่เชื่อมต่อกับ esp32 คุณสามารถส่งสัญญาณเสียงไปยัง DAC ในเครื่อง ไปยัง SPDIF หรือไปยังลำโพง Bluetooth ได้ ฮาร์ดแวร์ขั้นต่ำที่จำเป็นคือโมดูล WROVER ที่มี Flash 4MB และ PSRAM 4MB (https://www.espressif.com/en/products/modules/esp32) ด้วยโมดูลนั้นแบบสแตนด์อโลน เพียงจ่ายไฟและคุณสามารถสตรีมไปยังลำโพง Bluetooth ได้ คุณยังสามารถส่งสัญญาณเสียงไปยัง I2S DAC ส่วนใหญ่รวมถึงตัวรับ SPDIF ได้โดยใช้เพียงสายเคเบิลหรือทรานสดิวเซอร์แบบออปติคอล
แต่ squeezelite-esp32 สามารถขยายได้สูงและคุณสามารถเพิ่มได้
คุณสมบัติอื่น ๆ ได้แก่
หากต้องการควบคุมอีควอไลเซอร์หรือใช้การแสดงผลบน LMS จำเป็นต้องมีโมเดลเครื่องเล่นใหม่และจัดเตรียมให้ผ่านปลั๊กอินที่เป็นส่วนหนึ่งของที่เก็บบุคคลที่สามของ LMS
(ความคิดเห็นที่นำเสนอที่นี่ ดังนั้น I = @ philippe44) โครงสร้างหลักของ squeezelite-esp32 คือคอร์ภายใน 16 บิตพร้อมการคำนวณทั้งหมดใน 32 บิตหรือความแม่นยำแบบลอยตัว นี่คือตัวเลือกการออกแบบที่ฉันได้ทำเพื่อรักษาประสิทธิภาพของ CPU (ซึ่งขยายชิปเซ็ต esp32 ไปมากแล้ว) และเพิ่มประสิทธิภาพการใช้หน่วยความจำเนื่องจากเรามี RAM ที่ใช้งานได้เพียง 4MB เท่านั้น บางคนอาจแสดงความคิดเห็นอย่างถูกต้องว่าโมดูล WROVER มี RAM 8MB แต่โปรเซสเซอร์สามารถระบุที่อยู่ได้เพียง 4MB และส่วนที่เหลืออีก 4MB จะต้องแบ่งหน้าด้วยบล็อกที่เล็กกว่า และฉันไม่มีความอดทนกับสิ่งนั้น
ตอนนี้ ตอนที่ฉันย้ายไฟล์ squeezelite ไปยัง esp32 ฉันยังทำให้คอร์ 16 หรือ 32 บิตเข้ากันได้ในเวลาคอมไพล์ด้วย จนถึงตอนนี้มันใช้งานได้ในรูปแบบ 32 บิต แต่มีการทดสอบน้อยกว่า คุณสามารถเลือกที่จะคอมไพล์ในโหมด 32 บิต ฉันไม่สนใจตัวอย่างที่สูงกว่า 16 บิตมากนักเพราะมันไม่ได้นำอะไรเลย (ฉันมีพื้นฐานด้านวิศวกรรมในทฤษฎีข้อมูล)
ความสามารถ | 16 บิต | 32 บิต | ความคิดเห็น |
---|---|---|---|
อัตราการสุ่มตัวอย่างสูงสุด | 192k | 96k | 192,000 ถือว่าท้าทายมาก โดยเฉพาะอย่างยิ่งเมื่อรวมกับจอแสดงผล |
ความลึกบิตสูงสุด | 16 | 24 | 24 บิตถูกตัดทอนในโหมด 16 บิต |
เอสพีดิฟ | 16 บิต | 20 บิต | |
mp3, aac, บทประพันธ์, ogg/vorbis | 48k | 48k | |
อแลค, ฟแลค, ogg/flac | 96k | 96k | |
pcm, wav, aif | 192k | 96k | |
อีควอไลเซอร์ | ย | เอ็น | สูงสุด 48kHz (หลังการสุ่มตัวอย่างใหม่) - ข้ามการปรับสมดุลบนแทร็ก >48k |
การสุ่มตัวอย่างใหม่ | ย | เอ็น | |
ข้ามจาง | 10 วินาที | <5 วินาที | ขึ้นอยู่กับขนาดบัฟเฟอร์และอัตราการสุ่มตัวอย่าง |
esp32 ต้องทำงานที่ 240 MHz พร้อมด้วย Quad-SPI I/O ที่ 80 MHz และนาฬิกา 40 Mhz ถึงกระนั้น ยังมีอะไรให้ทำอีกมาก โดยเฉพาะอย่างยิ่งเมื่อรู้ว่ามันมี Serial Flash และ PSRAM ดังนั้นขอขอบคุณ Espressif สำหรับการเพิ่มประสิทธิภาพชิปเซ็ต ตอนนี้ การถอดรหัส การสุ่มตัวอย่างใหม่ การปรับสมดุล อัตราขยาย การแสดงผล สเปกตรัม/vu ถือเป็นความสมดุลที่ละเอียดอ่อน (มาก) ระหว่างการใช้ RAM ภายใน/ภายนอก ลำดับความสำคัญของงาน และการจัดการบัฟเฟอร์ มันไม่สมบูรณ์แบบ และยิ่งคุณผลักดันระบบจนถึงขีดจำกัดมากเท่าใด ความเสี่ยงที่ไฟล์บางไฟล์จะไม่เล่นก็จะยิ่งสูงขึ้นเท่านั้น (ดูด้านล่าง) โดยทั่วไป จอแสดงผลจะมีลำดับความสำคัญต่ำสุดเสมอ และคุณจะสังเกตเห็นการเลื่อนช้าลงและอัตราการรีเฟรช VU/สเปกตรัม ตอนนี้แม้แต่เธรดการแสดงผลก็มีส่วนที่สำคัญและส่งผลกระทบต่อความสามารถ ตัวอย่างเช่น จอแสดงผลสีความลึก 16 บิตที่มีความเร็ว SPI ต่ำอาจทำให้ 24/96 flac ทำงานไม่ได้ แต่ยังคงใช้งานได้กับ pcm 24/96
ในโหมด 16 บิต แม้ว่า 192 kHz จะถูกรายงานเป็นอัตราสูงสุด แต่ขอแนะนำอย่างยิ่งให้จำกัดอัตราการสุ่มตัวอย่างที่รายงานไว้ที่ 96k (-Z 96000) โปรดทราบว่าสตรีมออนไลน์ความเร็วสูง 24/96k บางรายการอาจกระตุกเนื่องจากประสิทธิภาพของสแต็ก TCP/IP โดยปกติจะเกิดจากการที่เซิร์ฟเวอร์ส่งข้อมูลขนาดเล็กและ esp32 ไม่สามารถรับเสียงที่เข้ารหัสได้เร็วพอ โดยไม่คำนึงถึงการตั้งค่าลำดับความสำคัญของงาน (ฉันพยายามปรับแต่งเล็กน้อยพอสมควร) ตัวเลือกที่ดีที่สุดในกรณีนั้นคือปล่อยให้พร็อกซี LMS สตรีม เนื่องจากจะให้สตรีมที่ใหญ่กว่าและสตรีมที่ "ราบรื่นขึ้น" ที่สามารถจัดการได้
โปรดทราบว่าตัวแปลงสัญญาณบางตัวใช้ CPU มากกว่าตัวอื่นหรือไม่ได้รับการปรับให้เหมาะสมมากนัก ฉันได้พยายามปรับแต่งสิ่งเหล่านี้อย่างเต็มที่แล้ว แต่การเพิ่มประสิทธิภาพระดับนั้นรวมถึงการเขียนแอสเซมบลีบางส่วนซึ่งเป็นเรื่องที่เจ็บปวด ตัวแปลงสัญญาณที่มีความต้องการอย่างมากตัวหนึ่งคือ AAC เมื่อไฟล์ถูกเข้ารหัสด้วย SBR ช่วยให้สามารถสร้างส่วนบนของสเปกตรัมขึ้นใหม่ได้และทำให้อัตราการสุ่มตัวอย่างสูงขึ้น แต่ข้อมูลจำเพาะของตัวแปลงสัญญาณเป็นทางเลือก คุณสามารถถอดรหัสย่านความถี่ที่ต่ำกว่าและยอมรับอัตราการสุ่มตัวอย่างที่ต่ำกว่า - ดูตัวเลือก AAC_DISABLE_SBR ด้านล่าง
สิ่งสำคัญ: บน esp32 (ไม่ใช่ esp32-s3) การใช้ Spotify พร้อม SPDIF จะสร้างเสียงติดอ่างเมื่อเปิดใช้งาน "สถิติ" คุณต้องปิดการใช้งานพวกเขา
ฮาร์ดแวร์ที่ใช้ esp32 ใดๆ ที่มีแฟลชอย่างน้อย 4MB และ PSRAM ขนาด 4MB จะสามารถรัน squeezelite-esp32 ได้ และมีบอร์ดต่างๆ ที่มีชิปดังกล่าวรวมอยู่ด้วย มีการกล่าวถึงบางส่วนด้านล่างนี้ แต่บางส่วนควรใช้งานได้ คุณสามารถดูความช่วยเหลือและคำแนะนำต่างๆ ได้ที่นี่
เพื่อความชัดเจน โมดูล WROOM จะไม่ทำงานเนื่องจากไม่มี PSRAM การออกแบบบางอย่างอาจเพิ่มไว้ภายนอก แต่ก็ไม่น่าเป็นไปได้ (มาก)
ตามคำอธิบายข้างต้น โมดูล WROVER นั้นเพียงพอที่จะเรียกใช้ Squeezelite-esp32 ได้ แต่ต้องใช้การแก้ไขเล็กน้อยเพื่อขยายให้มีปุ่มเสียงอะนาล็อกหรือฮาร์ดแวร์ (เช่น)
โปรดทราบว่าเมื่อส่งไปยังลำโพง Bluetooth (แหล่งที่มา) คุณสามารถใช้ได้เพียง 44.1 kHz เท่านั้น ดังนั้นคุณจึงปล่อยให้ LMS ทำการสุ่มตัวอย่างใหม่ แต่คุณต้องแน่ใจว่าจะส่งเฉพาะแทร็ก 44.1kHz หรือเปิดใช้งานตัวเลือกการสุ่มตัวอย่างภายใน (โดยใช้ -R) . หากคุณเชื่อมต่อ DAC การเลือกอัตราตัวอย่างจะขึ้นอยู่กับความสามารถของ DAC ดูด้านล่างสำหรับรายละเอียดเพิ่มเติม
DAC ส่วนใหญ่จะทำงานนอกกรอบด้วยการเชื่อมต่อ I2S แต่บางอันจำเป็นต้องส่งคำสั่งเฉพาะโดยใช้ I2C ดูตัวเลือก DAC ด้านล่างเพื่อทำความเข้าใจวิธีการส่งคำสั่งเฉพาะเหล่านี้ มีการรองรับในตัวสำหรับ TAS575x, TAS5780, TAS5713 และ AC101 DAC
โมดูลที่ใช้ esp32-s3 ในลักษณะนี้ได้รับการรองรับเช่นกัน แต่ต้องใช้ esp-idf 4.4 ยังไม่ได้เป็นส่วนหนึ่งของการเปิดตัวอย่างเป็นทางการ แต่เป็นการรวบรวมและดำเนินการ s3 ไม่มีเสียงบลูทูธ โปรดทราบว่าประสิทธิภาพของ CPU ได้รับการปรับปรุงอย่างมาก
นี่คือฮาร์ดแวร์คู่หูหลักของ Squeezelite-esp32 และได้รับการพัฒนาร่วมกัน รายละเอียดเกี่ยวกับความสามารถสามารถพบได้ที่นี่และที่นี่
หากคุณต้องการสร้างใหม่ ให้ใช้ไฟล์การกำหนดค่า squeezelite-esp32-SqueezeAmp-sdkconfig.defaults
หมายเหตุ: คุณสามารถใช้ไบนารีที่สร้างไว้ล่วงหน้า SqueezeAMP4MBFlash ซึ่งมีการตั้งค่า I/O ฮาร์ดแวร์ทั้งหมดอย่างถูกต้อง คุณยังสามารถใช้ไบนารี่ทั่วไป 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 เมื่อไม่ได้รับสิ่งใดๆ ซึ่งหมายความว่าไม่สามารถใช้ร่วมกับ IO การปลุกอื่นๆ ได้ ดูการนอนหลับสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับข้อจำกัดในการปลุกจากอินพุตหลายอินพุต
ลำโพงแบบพกพาที่ใช้พลังงานจากแบตเตอรี่นี้สามารถใช้งานร่วมกับ squeezelite-esp32 ซึ่งมีโครงสร้างเฉพาะที่มาพร้อมกับการอัปเดตทุกครั้ง หากคุณต้องการสร้างใหม่ ให้ใช้ไฟล์การกำหนดค่า squeezelite-esp32-Muse-sdkconfig.defaults
หมายเหตุ: คุณสามารถใช้ไบนารีที่สร้างไว้ล่วงหน้า Muse4MBFlash ซึ่งมีการตั้งค่า I/O ฮาร์ดแวร์ทั้งหมดอย่างถูกต้อง คุณยังสามารถใช้ไบนารี่ทั่วไป 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 ซึ่งอาจมีสองเวอร์ชัน - บอร์ดเหล่านี้ยุ่งเหยิง (ดูด้านล่าง)
บอร์ดที่แสดงด้านบนมีชุด IO ดังต่อไปนี้
(โปรดทราบว่า 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 " }}]
สำหรับ เอซี101
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 มีหน้าจอ 240x240 ST7789 และระบบเสียงออนบอร์ด ไม่มีประโยชน์มากในการฟังอะไรเลยแต่ใช้งานได้ นี่คือตัวอย่างอุปกรณ์ที่ต้องใช้ชุดคำสั่ง I2C สำหรับ DAC/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 และ PSRAM ขนาด 4MB ESP32-WROVER ตรงตามข้อกำหนดเหล่านี้ หากต้องการรับเอาต์พุตเสียง สามารถใช้ I2S DAC ได้ PCM5102 I2S DAC ราคาถูกใช้งานได้ แต่ก็มีอีกหลายตัวที่ทำเช่นกัน PCM5012 DAC สามารถเชื่อมต่อได้ทาง:
I2S - เวอร์เวอร์
วีซีซี - 3.3V
3.3V - 3.3V
จีเอ็นดี - จีเอ็นดี
FLT - GND
DMP-GND
SCL-GND
BCK - (BCK - ดูด้านล่าง)
DIN - (DO - ดูด้านล่าง)
LCK - (WS - ดูด้านล่าง) FMT - GND
เอ็กซ์เอ็มที - 3.3V
ใช้ไฟล์การกำหนดค่า squeezelite-esp32-I2S-4MFlash-sdkconfig.defaults
และโปรเจ็กต์สุดเจ๋ง https://github.com/rochuck/squeeze-amp-too
หากต้องการเข้าถึง NVS ใน webUI ให้ไปที่เครดิตและเลือก "แสดงตัวแก้ไข nvs" ไปที่แท็บตัวแก้ไข NVS เพื่อเปลี่ยนพารามิเตอร์ NFS ในคำอธิบายไวยากรณ์ด้านล่าง <> หมายถึงค่าในขณะที่ [] อธิบายพารามิเตอร์ทางเลือก
ตามที่กล่าวไว้ข้างต้น มีบิลด์เฉพาะบางส่วนที่มีให้ในปัจจุบัน: SqueezeAMP และ Muse แต่ถ้าคุณสร้างมันขึ้นมาเอง คุณสามารถสร้างบิลด์สำหรับ T-WATCH2020 ได้เช่นกัน บิลด์เริ่มต้นคือเฟิร์มแวร์ทั่วไปชื่อ I2S ซึ่งสามารถกำหนดค่าผ่าน NVS เพื่อให้ได้ผลลัพธ์ที่เหมือนกัน ทุกประการ กับบิลด์เฉพาะ ข้อแตกต่างคือต้องป้อนพารามิเตอร์และสามารถลบโดยไม่ตั้งใจได้ GUI ให้ความช่วยเหลือในการโหลด "ชุดการกำหนดค่าที่รู้จัก" ได้เป็นอย่างดี
ตามตัวเลือกการออกแบบ ไม่มีโค้ดที่ฝังไว้สำหรับเวอร์ชันที่กำหนดเท่านั้น โค้ดทั้งหมดจะอยู่ที่นั่นเสมอ ปรัชญาคือการลดโค้ดเฉพาะแพลตฟอร์มให้เหลือน้อยที่สุด และห้ามใช้ #ifdef
เฉพาะไม่ว่าจะยังไงก็ตาม ดังนั้น หากคุณต้องการเพิ่มแพลตฟอร์มของคุณเอง โปรดดูที่ mainKConfig.projbuild
อย่างจริงจัง เพื่อดูว่าคุณจะทำให้อุปกรณ์ของคุณเป็นโซลูชันตามการกำหนดค่าเพียงอย่างเดียวได้อย่างไร โดยใช้พารามิเตอร์ด้านล่าง เมื่อไม่มีตัวเลือกอื่นจริงๆ ให้ดูที่ targets<target>
เพื่อเพิ่มโค้ดของคุณเอง ฉันจะไม่ยอมรับการประชาสัมพันธ์สำหรับโค้ดที่สามารถหลีกเลี่ยงการสร้างโค้ดเฉพาะดังกล่าวทุกครั้งที่เป็นไปได้ "เป้าหมาย" ของ NVS จะถูกใช้เพื่อเรียกโค้ดเฉพาะเป้าหมาย แต่นี่เป็นรันไทม์ล้วนๆ ไม่ใช่เวลาคอมไพล์
พารามิเตอร์ NVS "i2c_config" ตั้งค่า gpio ของ i2c ที่ใช้เพื่อวัตถุประสงค์ทั่วไป (เช่น จอแสดงผล) เว้นว่างไว้เพื่อปิดใช้งานการใช้งาน I2C โปรดทราบว่าบน SqueezeAMP พอร์ตต้องเป็น 1 ความเร็วเริ่มต้นคือ 400000 แต่จอแสดงผลบางจอสามารถทำได้ถึง 800000 หรือมากกว่า ไวยากรณ์คือ
sda=<gpio>,scl=<gpio>[,port=0|1][,speed=<speed>]
โปรดทราบว่าคุณไม่สามารถใช้ GPIO หรือพอร์ตเดียวกันกับ DAC ได้
esp32 มีระบบย่อย SPI 4 ระบบ โดยระบบหนึ่งไม่สามารถเข้าถึงได้ ดังนั้นการกำหนดหมายเลขจึงเป็น 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 เนื่องจากรายการอื่นถูกใช้ไปแล้วโดยแฟลชและสไปรัม พารามิเตอร์เสริม "miso" (MasterInSlaveOut) จะใช้เฉพาะเมื่อบัส SPI เป็นแบบสองทิศทางและแชร์กับอุปกรณ์ต่อพ่วงอื่นๆ เช่น อีเธอร์เน็ต, ตัวขยาย gpio โปรดทราบว่า "data" สามารถตั้งชื่อว่า "mosi" ได้ (MasterOutSlaveIn)
พารามิเตอร์ NVS "dac_config" ตั้งค่า gpio ที่ใช้สำหรับการสื่อสาร i2s กับ DAC ของคุณ คุณสามารถกำหนดค่าเริ่มต้นในเวลาคอมไพล์ได้ แต่พารามิเตอร์ 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>]]
หากไม่ได้ตั้งค่า "model" หรือไม่รู้จัก ระบบจะใช้ "I2S" เริ่มต้น ตัวเลือก "mck" ใช้สำหรับตัวแปลงสัญญาณบางตัวที่ต้องใช้นาฬิกาหลัก (แม้ว่าจะไม่ควรเป็นเช่นนั้นก็ตาม) ตามค่าเริ่มต้น GPIO0 จะถูกใช้เป็น MCLK และเฉพาะบิวด์ล่าสุด (หลังกลางปี 2023) เท่านั้นที่สามารถใช้ 1 หรือ 2 ได้ นอกจากนี้ โปรดทราบว่าสิ่งนี้ไม่สามารถออกร่วมกับ RMII Ethernet ได้ (ดูหัวข้ออีเธอร์เน็ตด้านล่าง) พารามิเตอร์ I2C เป็นทางเลือกและจำเป็นเฉพาะในกรณีที่ DAC ของคุณต้องมีการควบคุม I2C (ดู 'dac_controlset' ด้านล่าง) โปรดทราบว่าพารามิเตอร์ "i2c" เป็นทศนิยม ไม่อนุญาตให้ใช้สัญลักษณ์ฐานสิบหก
จนถึงขณะนี้ TAS57xx, TAS5713, AC101, WM8978 และ ES8388 เป็นรุ่นที่ได้รับการยอมรับซึ่งมีการส่งการควบคุมลำดับ init/ระดับเสียง/พลังงานที่เหมาะสม สำหรับตัวแปลงสัญญาณอื่นๆ ที่อาจต้องใช้คำสั่ง I2C โปรดใช้พารามิเตอร์ "dac_controlset" ที่อนุญาตให้ส่งคำจำกัดความของคำสั่งง่ายๆ ผ่าน i2c สำหรับการเปิดและปิด init, เปิด/ปิด, ลำโพง และชุดหูฟัง โดยใช้ไวยากรณ์ JSON:
{ <command>: [ <item1>, <item2>, ... <item3> ],
<command>: [ <item1>, <item2>, ... <item3> ],
... }
โดยที่ <command>
เป็นหนึ่งใน init, poweron, poweroff, Speakeron, Speakeroff, Headphoneon, 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 เป็นส่วนหนึ่งของการกระทำ DAC และ delay
ทำให้สามารถหยุดชั่วคราวระหว่างองค์ประกอบต่างๆ
คำสั่ง 'power' ถูกใช้เมื่อเปิด/ปิด DAC หลังจากไม่ได้ใช้งาน (ดูตัวเลือก -C ของ squeezelite) และคำสั่ง 'speaker/headset' จะถูกส่งไปเมื่อสลับระหว่างลำโพงและชุดหูฟัง (ดูการตรวจจับแจ็คชุดหูฟัง)
หมายเหตุ: สำหรับการกำหนดค่าที่มีชื่อ ((SqueezeAMP, Muse ... ทั้งหมดยกเว้น I2S) ทั้งหมดนี้จะถูกละเว้น สำหรับตัวแปลงสัญญาณที่รู้ ลำดับในตัวสามารถเขียนทับได้โดยใช้ dac_controlset
โปรดทราบว่าคุณไม่สามารถใช้ GPIO หรือพอร์ตเดียวกันกับ I2C ได้
พารามิเตอร์ NVS "spdif_config" ตั้งค่า gpio ของ i2s ที่จำเป็นสำหรับ SPDIF
SPDIF ใช้งานได้โดยการใช้อินเทอร์เฟซ i2s ซ้ำในลักษณะที่ไม่ได้มาตรฐาน ดังนั้นแม้ว่าจะจำเป็นต้องใช้พินเดียว (DO) เท่านั้น คอนโทรลเลอร์จะต้องได้รับการเตรียมใช้งานอย่างสมบูรณ์ ดังนั้นบิตคล็อก (bck) และเวิร์ดคล็อก (ws) จะต้องเป็น ตั้งเช่นกัน เนื่องจาก i2s และ SPDIF แยกจากกัน คุณจึงสามารถใช้ IO เดิมซ้ำได้หากฮาร์ดแวร์ของคุณอนุญาต
คุณสามารถกำหนดค่าเริ่มต้นในเวลาคอมไพล์ได้ แต่พารามิเตอร์ nvs จะมีความสำคัญเหนือกว่า ยกเว้นการกำหนดค่าที่มีชื่อ (SqueezeAMP, Muse ...)
เว้นว่างไว้เพื่อปิดใช้งานการใช้ SPDIF คุณยังสามารถกำหนดได้ในขณะคอมไพล์โดยใช้ "make menuconfig" ไวยากรณ์คือ
bck=<gpio>,ws=<gpio>,do=<gpio>
หมายเหตุ: สำหรับการกำหนดค่าที่มีชื่อ สิ่งนี้จะถูกละเว้น
ความลึกบิตสูงสุดคือ 24 บิตแม้ในโหมด 32 บิต (นี่เป็นข้อ จำกัด SPDIF - ขอบคุณ @UrbanLienert สำหรับการอัพเดตจาก 20 ถึง 24 บิต) ตอนนี้คุณสามารถรับ SPDIF ได้โดยใช้ชิปพิเศษที่มีอินเทอร์เฟซ I2S เช่น DAC แต่จะแยก SPDIF (ออปติคอลและ coax) ออก อ้างถึงบท DAC แล้ว
หากคุณต้องการเล้าโลม คุณสามารถใช้เคล็ดลับของคนจนเพื่อสร้างสัญญาณจาก GPIO 3.3V ได้ สิ่งที่ต้องทำคือแบ่ง 3.3V เพื่อสร้าง 0.6V จากยอดถึงยอด จากนั้นจึงถอด DC ออก
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]]
คุณสามารถปรับแต่งวิธีการแสดง vu-meter และตัววิเคราะห์สเปกตรัม รวมถึงขนาดของอาร์ตเวิร์คผ่านเมนูเฉพาะในการตั้งค่าของผู้เล่น (อย่าลืมเพิ่มปลั๊กอิน)
พารามิเตอร์ NVS "metadata_config" กำหนดวิธีการแสดงข้อมูลเมตาสำหรับ AirPlay และ Bluetooth ไวยากรณ์คือ
[format=<display_content>][,speed=<speed>][,pause=<pause>][,artwork[:0|1]]
%artist%
, %album%
, %title%
เมื่อใช้สตริงรูปแบบนั้น คำสำคัญจะถูกแทนที่ด้วยค่าเพื่อสร้างสตริงที่จะแสดง โปรดทราบว่าข้อความธรรมดาที่อยู่ต่อจากคีย์เวิร์ดที่ว่างเปล่าระหว่างการเล่นแทร็กจะถูกลบออก ตัวอย่างเช่น หากคุณตั้งค่า format= %artist% - %title%
และไม่มีศิลปินในข้อมูลเมตา จะมีเพียง <title>
เท่านั้นที่จะไม่แสดง - <title>
คุณสามารถใช้ตัวรับสัญญาณ IR ที่รองรับโปรโตคอล NEC (38KHz) หรือ RC5 Vcc, GND และเอาต์พุตเป็นพินเดียวที่ต้องเชื่อมต่อ ไม่ต้องดึง ไม่มีตัวเก็บประจุกรอง มันเป็นการเชื่อมต่อแบบตรง
รหัส IR จะถูกส่ง "ตามที่เป็น" ไปยัง LMS ดังนั้นเฉพาะรีโมท Logitech SB จาก Boom, Classic หรือ Touch เท่านั้นที่จะใช้งานได้ ฉันคิดว่าไฟล์ Slim_Devices_Remote.ir ในไดเรกทอรี "เซิร์ฟเวอร์" ของ LMS สามารถแก้ไขได้เพื่อปรับให้เข้ากับรหัสอื่น ๆ แต่ฉันไม่ได้ลอง
ในโหมด AirPlay และ Bluetooth รองรับเฉพาะรีโมทเนทีฟเหล่านี้เท่านั้น ฉันไม่ได้เพิ่มตัวเลือกในการสร้างแผนที่ของคุณเอง
ดู "ตั้งค่า GPIO" ด้านล่างเพื่อตั้งค่า GPIO ที่เชื่อมโยงกับตัวรับสัญญาณอินฟราเรด (ตัวเลือก "ir")
พารามิเตอร์ "set_GPIO" ใช้เพื่อกำหนด GPIO ให้กับฟังก์ชันต่างๆ
GPIO สามารถตั้งค่าเป็น GND ให้หรือ Vcc เมื่อบูตได้ สะดวกในการจ่ายไฟให้กับอุปกรณ์ที่ใช้กระแสไฟน้อยกว่า 40mA จากขั้วต่อด้านข้าง โปรดใช้ความระมัดระวังเนื่องจากไม่มีการตรวจสอบข้อขัดแย้งไม่ว่าคุณจะเปลี่ยน GPIO ใด ดังนั้นคุณอาจสร้างความเสียหายให้กับบอร์ดของคุณหรือสร้างข้อขัดแย้งที่นี่
พารามิเตอร์ <amp>
สามารถใช้ในการกำหนด GPIO ที่จะตั้งค่าเป็นระดับที่ใช้งานอยู่ (ค่าเริ่มต้น 1) เมื่อการเล่นเริ่มต้น มันจะถูกรีเซ็ตเมื่อ Squeezelite ไม่ได้ใช้งาน การหมดเวลาของการไม่ได้ใช้งานถูกตั้งค่าบนบรรทัดคำสั่ง squeezelite ผ่าน -C <timeout>
พารามิเตอร์ <power>
สามารถใช้เพื่อกำหนด GPIO ที่จะตั้งค่าเป็นระดับแอคทีฟ (ค่าเริ่มต้น 1) เมื่อเครื่องเล่นเปิดอยู่ และรีเซ็ตเมื่อปิดเครื่อง (ใน LMS ใช้ไม่ได้กับ AirPlay, Spotify หรือ BT)
หากคุณมีแจ็คเสียงที่รองรับการแทรก (ใช้ :0 หรือ :1 เพื่อตั้งค่าระดับเมื่อเสียบ) คุณสามารถระบุ GPIO ที่เชื่อมต่ออยู่ได้ การใช้พารามิเตอร์ jack_mutes_amp ช่วยให้สามารถปิดเสียงแอมป์ได้เมื่อเสียบชุดหูฟัง (เช่น)
คุณสามารถตั้งค่าสถานะ LED สีเขียวและสีแดงรวมถึงสถานะใช้งานตามลำดับ (:0 หรือ :1) หรือระบุชิปเซ็ตโดยเฉพาะหากคุณใช้ไฟ LED RGB ที่สามารถระบุตำแหน่งได้
พารามิเตอร์ <ir>
ตั้งค่า GPIO ที่เกี่ยวข้องกับตัวรับสัญญาณ IR ไม่จำเป็นต้องเพิ่มพูลอัพหรือตัวเก็บประจุ
ไวยากรณ์คือ:
<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>]
คุณสามารถกำหนดค่าเริ่มต้นสำหรับแจ็ค, spkfault leds ณ เวลาคอมไพล์ได้ แต่พารามิเตอร์ nvs จะมีความสำคัญเหนือกว่ายกเว้นการกำหนดค่าที่มีชื่อ ((SqueezeAMP, Muse ...) โดยที่สิ่งเหล่านี้ถูกบังคับขณะรันไทม์ โปรดทราบว่า gpio 36 และ 39 เป็นอินพุตเท่านั้นและไม่สามารถใช้ ขัดจังหวะ เมื่อตั้งค่าเป็นข้อผิดพลาดของแจ็คหรือลำโพง การโพล 100 มิลลิวินาทีจะตรวจสอบค่าของมัน แต่มีราคาแพง
เป็นไปได้ที่จะเพิ่มตัวขยาย GPIO โดยใช้บัส I2C หรือ SPI ควรใช้กับปุ่มเป็นหลัก แต่สามารถรองรับเอาต์พุตทั่วไปได้เช่นกัน GPIO เพิ่มเติมเหล่านี้สามารถกำหนดหมายเลขได้โดยเริ่มจากค่าที่กำหนดเอง (40 ขึ้นไป เนื่องจาก esp32 มี GPIO 0..39) จากนั้น GPIO "เสมือน" ใหม่เหล่านี้ตั้งแต่ (เช่น) 100 ถึง 115 สามารถใช้ในการกำหนดค่าปุ่ม set_GPIO หรือการตั้งค่าการกำหนดค่าอื่น ๆ
Expander แต่ละตัวสามารถรองรับ GPIO ได้สูงสุด 32 GPIO หากต้องการใช้ตัวขยายสำหรับปุ่มต่างๆ จะต้องจัดให้มีการขัดจังหวะ โหมดโพลลิ่งไม่เป็นที่ยอมรับ ยังคงสามารถกำหนดค่าตัวขยายที่ไม่มีการหยุดชะงักได้ แต่จะใช้ได้เฉพาะเอาต์พุตเท่านั้น โปรดทราบว่าการขัดจังหวะแบบเดียวกันสามารถแชร์กับส่วนขยายได้ ตราบใดที่พวกเขาใช้ open Drain หรือ Open Collector (ซึ่งพวกเขาอาจทำทั้งหมด)
พารามิเตอร์ "gpio_exp_config" เป็นรายการที่คั่นด้วยเครื่องหมายอัฒภาค (;) โดยมีไวยากรณ์ต่อไปนี้สำหรับตัวขยายแต่ละตัว
model=<model>,addr=<addr>,[,port=system|dac][,base=<n>][,count=<n>][,intr=<gpio>][,cs=<gpio>][,speed=<Hz>]
โปรดทราบว่า PWM ("led_brightness" ด้านล่าง) ไม่รองรับ GPIO แบบขยาย และไม่สามารถใช้กับสัญญาณความเร็วสูงหรือจังหวะที่แม่นยำ เช่น CS, D/C, รีเซ็ต และ พร้อมใช้งาน รองรับปุ่ม ตัวเข้ารหัสแบบหมุน การควบคุมเครื่องขยายเสียง และกำลังไฟ ขึ้นอยู่กับชิปเซ็ตจริง อาจรองรับการดึงขึ้นหรือดึงลง ดังนั้นคุณอาจต้องเพิ่มตัวต้านทานภายนอก (เฉพาะ MCP23x17 เท่านั้นที่ทำการดึงขึ้น) pca8575 ไม่ใช่ชิปที่ยอดเยี่ยม มันสร้างการขัดจังหวะปลอมเล็กน้อยเมื่อใช้กับ GPIO out เมื่อใช้ตัวขยาย SPI จะต้องกำหนดค่าบัสโดยใช้บัส SPI ที่ใช้ร่วมกัน
ดู set_GPIO สำหรับวิธีตั้งค่าไฟ LED สีเขียวและสีแดง (รวมถึงไฟ RGB ที่สามารถระบุตำแหน่งได้) นอกจากนี้สามารถควบคุมความสว่างได้โดยใช้พารามิเตอร์ "led_brigthness" ไวยากรณ์คือ
[green=0..100][,red=0..100]
หมายเหตุ: สำหรับการกำหนดค่าที่มีชื่อ ไม่สามารถเปลี่ยน GPIO ที่ได้รับผลกระทบจาก LED สีเขียวและสีแดงได้ แต่จะใช้ตัวเลือกความสว่าง
สามารถกำหนดค่าแถบ LED หนึ่งแถบที่มี LED ที่สามารถระบุตำแหน่งได้สูงสุด 255 ดวงเพื่อให้การแสดงภาพได้รับการปรับปรุง Visualizer VU Meter มีตัวบ่งชี้สถานะแบตเตอรี่ (ดูแบตเตอรี่) ปัจจุบันรองรับเฉพาะ LED WS2812B เท่านั้น ตั้งค่าการกำหนดค่าฮาร์ดแวร์ LED Strip หรือไวยากรณ์ NVS led_vu_config คือ
type=[WS2812],length=<n>,gpio=<dataPin>[,scale=<gain>]
โดยที่ <n>
คือจำนวน LED ในแถบ (1..255) คุณสามารถเพิ่มค่าเกน <scale>
(เปอร์เซ็นต์) เพื่อปรับปรุงการตอบสนองเอฟเฟกต์
จำเป็นต้องมีการอัปเดตปลั๊กอิน LMS ล่าสุดเพื่อตั้งค่าโหมดวิชวลไลเซอร์และความสว่างในหน้าการตั้งค่า ESP32 สำหรับเครื่องเล่นหรือจอแสดงผลที่ควบคุมได้ (ดูเมนูพิเศษ/SqueezeESP32) ปลั๊กอินเพิ่มคำสั่ง LMS CLI เพิ่มเติม
สั่งการ | หมายเหตุ |
---|---|
<ผู้เล่น> led_visual [<โหมด>] [<ความสว่าง>] | สลับหรือเลือก "โหมด" ของวิชวลไลเซอร์ สามารถควบคุมความสว่างของวิชวลไลเซอร์ (0..255) ได้โดยใช้แท็ก "ความสว่าง" |
<ผู้เล่น> dmx <R,G,B,R,G,B, ... R,G,B> [<ออฟเซ็ต>] | ตั้งค่าสี LED เริ่มต้นที่ตำแหน่ง "offset" ด้วยลำดับสี "R" (สีแดง), "G" (สีเขียว) และ "B" (สีน้ำเงิน) เพิ่มค่า RGB เพิ่มเติมให้กับสตริงที่คั่นเพื่อตั้งค่า LED หลายดวง |
รองรับโรตารีเอนโค้ดเดอร์ทั่วไปหนึ่งตัว การเปลี่ยนพื้นที่สี่เหลี่ยมจัตุรัสด้วยการกด ตัวเข้ารหัสดังกล่าวมักจะมี 2 พินสำหรับตัวเข้ารหัส (A และ B) และ C ทั่วไปที่ต้องตั้งค่าเป็นกราวด์และพิน SW ที่เป็นอุปกรณ์เสริมสำหรับการกด ต้องดึง A, B และ SW ขึ้น ดังนั้น ESP32 จึงจัดให้มีการดึงขึ้นอัตโนมัติ แต่คุณสามารถเพิ่มตัวต้านทานของคุณเองได้ การกรองเล็กน้อยบน A และ B (~470nF) ช่วยในการ debouncing ซึ่งไม่ได้เกิดจากซอฟต์แวร์
โดยปกติตัวเข้ารหัสจะถูกฮาร์ดโค้ดไว้ที่ปุ่มหมุนซ้าย ขวา และกด LMS ตามลำดับ และสลับระดับเสียงลง/ขึ้น/เล่นบน BT, AirPlay และ Spotify การใช้ตัวเลือก 'ระดับเสียง' ทำให้ฮาร์ดโค้ดเพื่อลดระดับเสียง/เพิ่ม/เล่นสลับตลอดเวลา (แม้แต่ใน LMS) ตัวเลือก 'กดแบบยาว' อนุญาตให้มีโหมดอื่นเมื่อกด SW ค้างไว้ ในโหมดนั้น ซ้ายคือก่อนหน้า ขวาคือถัดไป และกดสลับ การกด SW ค้างไว้แต่ละครั้งจะสลับระหว่างโหมดต่างๆ (พฤติกรรมที่แท้จริงของโหมดหลักจะขึ้นอยู่กับ 'ระดับเสียง')
นอกจากนี้ยังมีความเป็นไปได้ที่จะใช้ตัวเลือก 'knobonly' (เฉพาะกับ 'volume' และ 'longpress') โหมดนี้พยายามนำเสนอการนำทางแบบเต็มด้วยปุ่มเดียวซึ่งมีการบิดเบี้ยวเล็กน้อยเนื่องจากหลักการของ LMS UI ซ้าย ขวา และกด ปฏิบัติตามกฎการนำทางของ LMS และโดยเฉพาะอย่างยิ่ง กด จะไปที่รายการเมนูย่อยด้านล่างเสมอ แม้ว่าจะนำทางในคลังเพลงก็ตาม นั่นทำให้เกิดความท้าทายเนื่องจากไม่มีปุ่ม 'เล่น', 'ย้อนกลับ' หรือ 'หยุดชั่วคราว' วิธีแก้ปัญหามีดังนี้:
คุณสามารถตั้งค่าความเร็วของการดับเบิลคลิก (หรือซ้าย-ขวา) ได้โดยใช้พารามิเตอร์ทางเลือกของ 'ลูกบิด' นี่ไม่ใช่วิธีแก้ปัญหาที่สมบูรณ์แบบ และยินดีรับแนวคิดอื่นๆ โปรดทราบว่ายิ่งคุณตั้งค่าความเร็วในการคลิกสองครั้งนานเท่าใด อินเทอร์เฟซก็จะตอบสนองน้อยลงเท่านั้น เหตุผลก็คือฉันต้องรอให้เกิดความล่าช้านั้นก่อนที่จะตัดสินใจว่าเป็นการคลิกครั้งเดียวหรือสองครั้ง นอกจากนี้ยังสามารถทำให้การนำทางเมนู "ลังเล" ถูกตีความว่าเป็น "หยุดชั่วคราว" ได้อย่างง่ายดาย
ใช้พารามิเตอร์rotary_configด้วยไวยากรณ์ต่อไปนี้:
A=<gpio>,B=<gpio>[,SW=gpio>[[,knobonly[=<ms>]]|[[,volume][,longpress]]]]
หมายเหตุ HW: gpio ทั้งหมดที่ใช้สำหรับโรตารีมีการดึงขึ้นภายใน ดังนั้นโดยปกติแล้วไม่จำเป็นต้องให้ Vcc แก่ตัวเข้ารหัส อย่างไรก็ตามหากบอร์ดเข้ารหัสที่คุณใช้มีตัวดึงขึ้นเองซึ่งแข็งแกร่งกว่าบอร์ดของ ESP32 (ซึ่งน่าจะเป็นกรณีนี้) ก็จะมี crosstalk ระหว่าง gpio ดังนั้นคุณต้องนำ Vcc มาด้วย ดูแผนผังบอร์ดของคุณแล้วคุณจะเข้าใจว่าการดึงขึ้นของบอร์ดเหล่านี้สร้างการดึงลงที่ "ชนะ" เมื่อมีพินอื่น ๆ ต่อสายดิน
SW gpio เป็นทางเลือก คุณสามารถส่งผลกระทบอีกครั้งเป็นปุ่มล้วนๆ ได้หากต้องการ แต่ตัวเลือกระดับเสียง การกดแบบยาว และแบบปุ่มอย่างเดียวนั้นดูสมเหตุสมผลเล็กน้อย เนื่องจากสวิตช์ที่หายไปมีบทบาทสำคัญในโหมดเหล่านี้ คุณยังคงมีโหมด "ระดับเสียง" ได้ แต่จะไม่สามารถใช้โหมดนี้สำหรับ สิ่งที่ คาดว่าจะเพิ่มระดับเสียงขึ้นหรือลงได้ ดังนั้นโปรดทราบว่าการใช้ไวยากรณ์ [] อาจทำให้เข้าใจผิดเล็กน้อยข้างต้น
ดูเพิ่มเติมที่ "หมายเหตุสำคัญ" ในส่วน "ปุ่ม" และโปรดจำไว้ว่าเมื่อเปิดใช้งาน 'lms_ctrls_raw' (ดูด้านล่าง) จะไม่มีการใช้ตัวเลือกแบบลูกบิด ระดับเสียง และแบบกดแบบยาวเหล่านี้ รหัสปุ่มดิบ (ไม่ใช่การกระทำ) จะถูกส่งไปยัง LMS
โปรดทราบว่าใน esp32, gpio 36 และ 39 เป็นอินพุตเท่านั้นและไม่สามารถใช้การขัดจังหวะได้ ดังนั้นจึงไม่สามารถตั้งค่าเป็น A หรือ B ได้ เมื่อใช้สำหรับ SW จะใช้การโพล 100ms ซึ่งมีราคาแพง
รองรับโรตารีเอนโค้ดเดอร์เฉพาะปริมาณหนึ่งตัว การเปลี่ยนพื้นที่สี่เหลี่ยมจัตุรัสด้วยการกด ตัวเข้ารหัสได้รับการฮาร์ดโค้ดเพื่อเพิ่ม ลดระดับเสียง และสลับการเล่นสำหรับ LMS, BT, AirPlay และ Spotify (ดูหมายเหตุด้านบนสำหรับการกรองและหมายเหตุ HW รวมถึง 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>
เป็นชื่อของการกำหนดค่าอื่นในการโหลด (รีแมป) หรือหนึ่งในหมู่
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 ได้ แต่เป็นเบ็ดในการเปิดใช้งานโหมดสลีปลึก (ดูการนอนหลับ)
หนึ่งที่คุณสร้างสตริงดังกล่าวใช้เพื่อเติมพารามิเตอร์ NVS ใหม่ด้วยชื่อใด ๆ ด้านล่างตัวอักษร 16 (?) คุณสามารถกำหนดค่าเหล่านี้ได้มากที่สุดเท่าที่จะทำได้ จากนั้นตั้งค่าพารามิเตอร์ config "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 " }}]
กำหนดสองปุ่ม
ในขณะที่กำหนดค่าชื่อ "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 , "shifter_gpio" : 4 , "normal" :{ "pressed" : " BCTRLS_UP " }}]
กำหนดสองปุ่ม
ด้านล่างเป็นอินเทอร์เฟซ 2-buttons ที่ยาก แต่ใช้งานได้สำหรับความสุขในการถอดรหัสของคุณ:
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 ยังรองรับความเป็นไปได้ในการส่งรหัสปุ่ม 'ดิบ' มันค่อนข้างซับซ้อนดังนั้นทนกับฉัน ปุ่มสามารถประมวลผลได้โดย SqueezEESP32 และแมปกับ "ฟังก์ชั่น" เช่นการเล่น/หยุดชั่วคราวหรือพวกเขาสามารถส่งไปยัง LMS เป็นรหัสธรรมดา (ดิบ) และตรรกะเต็มรูปแบบของการกด/ปล่อย/longpress ได้รับการจัดการโดย LMS มีการควบคุมใด ๆ
ประโยชน์ของโหมด "ดิบ" คือคุณสามารถสร้างเครื่องเล่นที่ใกล้เคียงกับบูม (เช่น) แต่คุณไม่สามารถใช้ฟังก์ชั่นการแมป ชุดปุ่ม จำกัด ในโหมด 'ดิบ' สิ่งที่คุณต้องกำหนดจริงๆคือการแมประหว่าง GPIO และปุ่ม เท่าที่ LMS เกี่ยวข้องตัวเลือกอื่น ๆ ใน Payloads JSON เหล่านี้ไม่สำคัญ ตอนนี้เมื่อคุณใช้ BT หรือ AirPlay ตัวสร้าง JSON แบบเต็มที่อธิบายไว้ข้างต้นใช้อย่างเต็มที่ดังนั้นการเลื่อน, longpress, ตัวเลือกการแมปยังคงทำงานได้
โปรดทราบว่าเมื่อใช้โหมด "RAW" ที่ไม่ได้ใช้งาน CLI (อินเทอร์เฟซบรรทัดคำสั่ง) ของ LMS จะถูกใช้และ ต้อง ใช้งานได้โดยไม่ต้องใช้รหัสผ่าน
ไม่มีตัวเลือกที่ดีหรือไม่ดีเป็นทางเลือกของคุณ ใช้พารามิเตอร์ NVS "LMS_CTRLS_RAW" เพื่อเปลี่ยนตัวเลือกนั้น
โปรดทราบว่า GPIO 36 และ 39 เป็นอินพุตเท่านั้นและไม่สามารถใช้การขัดจังหวะได้ เมื่อใช้เป็นปุ่มหนึ่งการสำรวจ 100MS จะเริ่มขึ้นซึ่งมีราคาแพง กดยาวก็มีแนวโน้มที่จะทำงานได้ไม่ดีนัก
Wired Ethernet ได้รับการสนับสนุนโดย ESP32 ด้วยตัวเลือกต่าง ๆ แต่ SqueezEESP32 นั้นรองรับ 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 | นาฬิกา 50MHz |
model=lan8720,mdc=<gpio>,mdio=<gpio>[,rst=<gpio>]
การเชื่อมต่อพินรีเซ็ตสำหรับ LAN8720 เป็นทางเลือก แต่แนะนำให้หลีกเลี่ยงนาฬิกา GPIO0 (50MHz อินพุต) ล็อค ESP32 ในโหมดดาวน์โหลดในเวลาบูต
APLL ของ ESP32 เป็นสิ่งจำเป็นสำหรับตัวแปลงสัญญาณเสียงดังนั้นเราจึง ต้องมี LAN8720 ที่ให้