LMS サーバーを使用せずに、BT、AirPlay、または Spotify のみにこれを使用する人が増えているようです。それは問題ありませんが、squeezeliteESP32 は主に Logitech Media Server プレーヤーであり、そのコンセプトに基づいて設計されていることを理解してください。他のすべてのモードにはアドオンが縫い付けられているため、他のモードには欠点があります。したがって、問題を開く前に必ずこれをお読みください
Squeezelite-esp32 は、espressif の esp32 および esp32-s3 Wi-Fi (b/g/n) および Bluetooth チップセット上で動作するように作られたオーディオ ソフトウェア スイートです。次の機能を提供します
esp32 に接続されているハードウェアに応じて、オーディオをローカル DAC、SPDIF、または Bluetooth スピーカーに送信できます。最低限必要なハードウェアは、4MB のフラッシュと 4MB の PSRAM を備えた WROVER モジュールです (https://www.espressif.com/en/products/modules/esp32)。このモジュールをスタンドアロンで使用すると、電源を入れるだけで Bluetooth スピーカーにストリーミングできます。ケーブルまたは光トランスデューサーだけを使用して、オーディオをほとんどの I2S DAC および SPDIF レシーバーに送信することもできます。
ただし、squeezelite-esp32 は拡張性が高く、追加することができます。
その他の機能としては、
イコライザーを制御したり、LMS でディスプレイを使用するには、新しいプレーヤー モデルが必要です。これは、LMS のサードパーティ リポジトリの一部であるプラグインを通じて提供されます。
(意見はここに提示されているので、I = @philippe44) queuelite-esp32 のメイン ビルドは、すべての計算を 32 ビットまたは浮動小数点精度で行う 16 ビットの内部コアです。これは、CPU パフォーマンスを維持し (すでに esp32 チップセットを大幅に拡張しています)、使用可能な RAM が 4MB しかないため、メモリ使用量を最適化するために行った設計上の選択です。 WROVER モジュールには 8MB の RAM があると正しくコメントする人もいるかもしれませんが、プロセッサは 4MB しかアドレス指定できず、残りの 4MB はより小さいブロックでページ分割する必要があり、私にはそれに対する忍耐力がありません。
さて、squeezelite を esp32 に移植したとき、コンパイル時にコアを 16 ビットまたは 32 ビットと互換性のあるものにしました。これまでのところ、32 ビットで動作しますが、テストはほとんど行われていません。 32 ビット モードでコンパイルすることを選択できます。私は 16 ビット以上のサンプルにはあまり興味がありません。なぜなら、それは何ももたらさないからです (私には情報理論のエンジニアリングのバックグラウンドがあります)。
能力 | 16ビット | 32ビット | コメント |
---|---|---|---|
最大サンプリングレート | 192k | 96k | 192k は、特にディスプレイと組み合わせる場合、非常に困難です |
最大ビット深度 | 16 | 24 | 16 ビット モードでは 24 ビットが切り捨てられます |
spdif | 16ビット | 20ビット | |
mp3、aac、opus、ogg/vorbis | 48k | 48k | |
alac、flac、ogg/flac | 96k | 96k | |
pcm、wav、aif | 192k | 96k | |
イコライザ | Y | N | 最大 48kHz (リサンプリング後) - 48k トラックを超えるイコライゼーションはスキップされます |
リサンプリング | Y | N | |
クロスフェード | 10代 | 5秒未満 | バッファサイズとサンプリングレートに依存します |
esp32 は 240 MHz で動作し、Quad-SPI I/O は 80 MHz、クロックは 40 MHz である必要があります。それでも、特にシリアル フラッシュと PSRAM が搭載されていることを考えると、実行するのは大変なので、チップセットの最適化に対する Espressif には敬意を表します。さて、デコード、リサンプリング、イコライジング、ゲイン、表示、スペクトル/VU をすべて実行するには、内部/外部 RAM の使用、タスクの優先順位、バッファ処理の間の非常に (非常に) 微妙なバランスが必要です。これは完璧ではなく、システムを限界まで追い込むほど、一部のファイルが再生されなくなるリスクが高くなります (下記を参照)。一般に、ディスプレイの優先順位は常に最も低くなり、スクロールと VU/スペクトルのリフレッシュ レートが遅くなることがわかります。現在、表示スレッドにも重要なセクションがあり、機能に影響を与えます。たとえば、SPI 速度が低い 16 ビット深度のカラー ディスプレイでは、24/96 flac は動作しませんが、pcm 24/96 では動作する可能性があります。
16 ビット モードでは、最大レートとして 192 kHz が報告されますが、報告されるサンプリング レートを 96k (-Z 96000) に制限することを強くお勧めします。一部の高速 24/96k オンライン ストリームは、TCP/IP スタックのパフォーマンスが原因で途切れる可能性があることに注意してください。これは通常、タスクの優先順位の設定に関係なく、サーバーが小さなデータ パケットを送信し、esp32 がエンコードされたオーディオを十分な速度で受信できないことが原因です (私はそれをかなり調整しようとしました)。この場合の最良のオプションは、LMS にストリームをプロキシさせることです。これにより、処理できるチャンクが大きくなり、「よりスムーズな」ストリームが提供されるようになります。
一部のコーデックは他のコーデックよりも多くの CPU を消費するか、それほど最適化されていないことにも注意してください。これらを微調整するために最善を尽くしましたが、そのレベルの最適化にはアセンブリの作成が含まれており、これは苦痛です。非常に要求の厳しいコーデックの 1 つは、ファイルが SBR でエンコードされている場合の AAC です。これにより、スペクトルの上部の再構築が可能になり、サンプリング レートが高くなりますが、コーデックの仕様ではこれはオプションであり、単純に低帯域をデコードして、より低いサンプリング レートを受け入れることができます。以下の AAC_DISABLE_SBR オプションを参照してください。
重要: esp32 (esp32-s3 ではありません) では、「統計」が有効になっている場合、SPDIF で Spotify を使用すると音声が途切れます。それらを無効にする必要があります
少なくとも 4MB のフラッシュと 4MB の PSRAM を備えた esp32 ベースのハードウェアは、squeezelite-esp32 を実行でき、そのようなチップを搭載したさまざまなボードがあります。以下にいくつか挙げますが、どれも機能するはずです。ここでさまざまなヘルプと手順を見つけることができます
明確にするために、WROOM モジュールには PSRAM が含まれていないため、機能しません。一部の設計では外部から追加する可能性がありますが、その可能性は (非常に) 低いです。
上記の説明によると、Squeezelite-esp32 を実行するには WROVER モジュールで十分ですが、アナログ オーディオまたはハードウェア ボタンを追加するには少し工夫が必要です (例)
Bluetooth スピーカー (ソース) に送信する場合、使用できるのは 44.1 kHz のみであることに注意してください。そのため、LMS にリサンプリングを実行させますが、LMS が 44.1 kHz トラックのみを送信することを確認するか、内部リサンプリング (-R を使用) オプションを有効にする必要があります。 。 DAC を接続する場合、サンプル レートの選択はその機能によって異なります。詳細については、以下を参照してください。
ほとんどの DAC は I2S 接続だけでそのまま動作しますが、一部の DAC では I2C を使用して特定のコマンドを送信する必要があります。これらの専用コマンドの送信方法については、以下の DAC オプションを参照してください。 TAS575x、TAS5780、TAS5713、および AC101 DAC のサポートが組み込まれています。
このような esp32-s3 ベースのモジュールもサポートされていますが、esp-idf 4.4 が必要です。まだ正式リリースには含まれていませんが、コンパイルして実行できます。 S3にはBluetoothオーディオがありません。 CPU のパフォーマンスが大幅に向上していることに注意してください。
これは Squeezelite-esp32 の主要なハードウェア コンパニオンであり、一緒に開発されました。機能の詳細については、こちらとこちらをご覧ください。
再構築する場合は、 squeezelite-esp32-SqueezeAmp-sdkconfig.defaults
構成ファイルを使用します。
注意: すべてのハードウェア I/O が適切に設定されているプリビルド バイナリ 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 は、( wake=0:0
でsleep_config
設定する) を使用してウェイクアップ信号として使用できます。これはプルアップであるため、何も受信していないときは 1 のままです。これは、他のウェイクアップ IO と組み合わせて使用できないことを意味します。複数の入力によるウェイクアップの制限の詳細については、「スリープ」を参照してください。
このポータブル バッテリー駆動スピーカーは、更新ごとに専用のビルドが提供される Squeezelite-esp32 と互換性があります。再構築する場合は、 squeezelite-esp32-Muse-sdkconfig.defaults
構成ファイルを使用します。
注意: すべてのハードウェア I/O が適切に設定されているプリビルド バイナリ 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 を備えたバージョンがあり、おそらく 2 つのバリエーションがあることに注意してください。これらのボードは混乱しています (下記を参照)。
上に示したボードには次の 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 " }}]
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ベースの楽しいスマートウォッチです。 240x240 の ST7789 画面とオンボードオーディオを備えています。何かを聞くのにはあまり役に立ちませんが、機能します。これは、DAC/APU に I2C コマンド セットを必要とするデバイスの例です (下記を参照)。すべてを自分で再構築する場合はビルド オプションがあります。それ以外の場合は、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 チップセットと 4MB PSRAM が必要です。 ESP32-WROVER はこれらの要件を満たしています。オーディオ出力を取得するには、I2S DAC を使用できます。安価な PCM5102 I2S DAC は動作しますが、他の多くの DAC も動作します。 PCM5012 DAC は次の方法で接続できます。
I2S - ウーバー
VCC - 3.3V
3.3V~3.3V
グランド - グランド
FLT-GND
DMP - GND
SCL - GND
BCK - (BCK - 下記参照)
DIN - (DO - 下記参照)
LCK - (WS - 以下を参照) FMT - GND
XMT - 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>
を参照して独自のコードを追加します。このような専用コードの作成を可能な限り回避できるコードの PR は受け付けません。 NVS の「ターゲット」はターゲット固有のコードを呼び出すために使用されますが、これもコンパイル時ではなく純粋に実行時です。
NVS パラメータ「i2c_config」は、一般的な目的 (表示など) に使用される i2c の GPIO を設定します。 I2C の使用を無効にするには、空白のままにします。 SqueezeAMP では、ポートは 1 である必要があることに注意してください。デフォルトの速度は 400000 ですが、一部のディスプレイでは最大 800000 以上の速度が可能です。構文は
sda=<gpio>,scl=<gpio>[,port=0|1][,speed=<speed>]
DAC と同じ GPIO またはポートを使用することはできないことに注意してください。
esp32 には 4 つの SPI サブシステムがあり、1 つはアクセスできないため、番号付けは 0..2 となり、SPI0 はフラッシュ/PSRAM 用に予約されています。 NVS パラメータ「spi_config」は、一般的な目的 (表示など) に使用される spi の gpio を設定します。 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」は、DAC との i2s 通信に使用される gpio を設定します。コンパイル時にデフォルトを定義できますが、名前付き構成を除き、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 イーサネットと共存できないことに注意してください (以下のイーサネットのセクションを参照)。 I2C パラメータはオプションであり、DAC が I2C 制御を必要とする場合にのみ必要です (下記の「dac_controlset」を参照)。 「i2c」パラメータは 10 進数であり、16 進数表記は許可されないことに注意してください。
これまでのところ、TAS57xx、TAS5713、AC101、WM8978、ES8388 は、適切な初期化シーケンス/ボリューム/電源コントロールが送信されるモデルとして認識されています。 I2C コマンドを必要とする可能性のあるその他のコーデックの場合は、パラメータ「dac_controlset」を使用してください。これにより、JSON 構文を使用して、初期化、電源、スピーカー、ヘッドセットのオンとオフを行うための簡単なコマンドを i2c 経由で送信できるようになります。
{ <command>: [ <item1>, <item2>, ... <item3> ],
<command>: [ <item1>, <item2>, ... <item3> ],
... }
<command>
、init、poweron、poweroff、speakeron、speakeroff、headseton、headsetoff のいずれかです (単一項目の場合でも配列である必要があります)。項目は次のいずれかの要素です
{"reg":<register>,"val":<value>,"mode":<nothing>|"or"|"and"}
{"gpio":<gpio>,"level":0|1}
{"delay":<ms>}
これは標準的な JSON 表記なので、慣れていない場合は、Google が最適です。 「...」は、必要なだけエントリを含めることができることを意味し、構文の一部ではないことに注意してください。すべてのセクションはオプションですが、「dac_config」パラメータで i2c を設定し、ここで何も設定しないのは意味がありません。
reg
キーを使用すると、i2c バスにレジスタを書き込むことができます。パラメータmode
toまたはレジスタに値を指定したり、toとit を指定したりできます。単に書き込むだけの場合は、 mode
を設定しないでください。 val
パラメータには配列 [v1, v2,...] を指定して、単一の i2c バーストで一連のバイトを書き込むことができます (その場合、「mode」は無視されます)。すべての値は 10 進数でなければならないことに注意してください。このようなバリデータを使用して構文を検証できます。 gpio
キーは、DAC アクションの一部として gpio を設定するだけであり、 delay
要素間の一時停止が可能になります。
「power」コマンドは、アイドル期間後に DAC の電源をオン/オフするときに使用され (squeezelite の -C オプションを参照)、「speaker/headset」コマンドは、スピーカーとヘッドセットを切り替えるときに送信されます (ヘッドセット ジャックの検出を参照)。
注意: 名前付き構成 ((SqueezeAMP、Muse ... I2S を除くすべて) の場合、これはすべて無視されます。既知のコーデックの場合、組み込みシーケンスは dac_controlset を使用して上書きできます
I2C と同じ GPIO またはポートを使用することはできないことに注意してください。
NVS パラメータ「spdif_config」は、SPDIF に必要な i2s の gpio を設定します。
SPDIF は、非標準的な方法で i2s インターフェイスを再利用することによって利用できるようになります。そのため、必要なピンは 1 つだけですが (DO)、コントローラーは完全に初期化されている必要があるため、ビット クロック (bck) とワード クロック (ws) はもセットします。 i2s と SPDIF は相互に排他的であるため、ハードウェアで許可されていれば同じ IO を再利用できます。
コンパイル時にデフォルトを定義できますが、名前付き構成 (SqueezeAMP、Muse ...) を除き、nvs パラメーターが優先されます。
SPDIF の使用を無効にするには空白のままにします。「make menuconfig」を使用してコンパイル時に定義することもできます。構文は
bck=<gpio>,ws=<gpio>,do=<gpio>
注意: 名前付き構成の場合、これは無視されます。
最大ビット深度は、32 ビット モードであっても 24 ビットです (これは SPDIF の制限です - 20 ビットから 24 ビットへの更新について @UrbanLienert に感謝します)。現在は、DAC のような I2S インターフェイスを提供しながら SPDIF (光および同軸) を吐き出す特殊なチップを使用して SPDIF を取得することもできます。 DAC の章を参照してください。
同軸が必要な場合は、貧乏人のトリックを使用して 3.3V GPIO から信号を生成することもできます。 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 メーターとスペクトラム アナライザーの表示方法やアートワークのサイズを微調整できます (プラグインを追加することを忘れないでください)。
NVS パラメータ「metadata_config」は、AirPlay および Bluetooth のメタデータの表示方法を設定します。構文は
[format=<display_content>][,speed=<speed>][,pause=<pause>][,artwork[:0|1]]
%artist%
、 %album%
、 %title%
のいずれかを含めることができます。そのフォーマット文字列を使用して、キーワードがその値に置き換えられ、表示される文字列が構築されます。トラックの再生中に空になったキーワードに続くプレーン テキストは削除されることに注意してください。たとえば、 format= %artist% - %title%
を設定し、メタデータにアーティストが存在しない場合は、 <title>
ではなく- <title>
のみが表示されます。NEC プロトコル (38KHz) または RC5 と互換性のある IR レシーバーを使用できます。接続する必要があるピンは Vcc、GND、および出力のみで、プルアップやフィルタ コンデンサはなく、ストレート接続です。
IR コードは「そのまま」LMS に送信されるため、Boom、Classic、または Touch からリモートにある Logitech SB のみが機能します。 LMS の "server" ディレクトリにあるファイル Slim_Devices_Remote.ir を変更して他のコードに適応できると思いますが、試したことはありません。
AirPlay および Bluetooth モードでは、これらのネイティブ リモコンのみがサポートされます。独自のマッピングを作成するオプションは追加していません。
赤外線受信機 (オプション「ir」) に関連付けられた GPIO を設定するには、以下の「GPIO の設定」を参照してください。
パラメータ「set_GPIO」は、GPIO をさまざまな機能に割り当てるために使用されます。
GPIO は起動時に GND 提供または Vcc に設定できます。これは、消費電力が 40mA 未満のデバイスに側面コネクタから電力を供給するのに便利です。変更する GPIO に関して競合チェックが行われないため、ボードに損傷を与えたり、ここで競合が発生したりする可能性があるので注意してください。
<amp>
パラメータは、再生開始時にアクティブ レベル (デフォルト 1) に設定される GPIO を割り当てるために使用できます。これは、Squeezelite がアイドル状態になるとリセットされます。アイドル タイムアウトは、squeezelite コマンド ラインで-C <timeout>
によって設定されます。
<power>
パラメータは、プレーヤーの電源がオンのときにアクティブ レベル (デフォルト 1) に設定され、電源がオフのときにリセットされる GPIO を割り当てるために使用できます (LMS では、AirPlay、Spotify、または BT には適用されません)。
挿入をサポートするオーディオ ジャックがある場合 (挿入時のレベルを設定するには :0 または :1 を使用します)、どの GPIO に接続するかを指定できます。パラメータ jack_mutes_amp を使用すると、ヘッドセット (例) が挿入されているときにアンプをミュートできます。
緑と赤のステータス LED をそれぞれのアクティブ状態 (:0 または :1) で設定したり、アドレス指定可能な RGB LED を使用する場合はチップセットを指定したりすることもできます。
<ir>
パラメータは、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 LED のデフォルトを定義できますが、名前付き構成 ((SqueezeAMP、Muse ...) を除き、nvs パラメーターが優先されます。これらは実行時に強制されます。gpio 36 および 39 は入力専用であり、使用できないことに注意してください)割り込みをジャックまたはスピーカーの障害に設定すると、100 ミリ秒のポーリングで値がチェックされますが、コストがかかります。
I2C または SPI バスを使用して GPIO エクスパンダを追加することができます。これらは主にボタンに使用する必要がありますが、汎用出力もサポートできます。これらの追加の GPIO には、任意の値から始まる番号を付けることができます (esp32 の GPIO は 0..39 であるため、40 以上)。次に、(例) 100 から 115 までのこれらの新しい「仮想」 GPIO は、ボタン構成、set_GPIO、またはその他の構成設定で使用できます。
各エクスパンダは最大 32 個の GPIO をサポートできます。ボタンにエキスパンダーを使用するには、割り込みを提供する必要があります。ポーリング モードは受け入れられません。中断のないエクスパンダも引き続き構成できますが、使用できるのは出力のみです。オープン ドレインまたはオープン コレクタを使用している限り (おそらくすべてのエクスパンダで使用されている)、同じ割り込みを複数のエクスパンダ間で共有できることに注意してください。
パラメータ「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 出力に使用するとかなりの量のスプリアス割り込みを生成します。 SPI エクスパンダを使用する場合、共有 SPI バスを使用してバスを構成する必要があります
緑と赤の LED (アドレス指定可能な RGB LED を含む) を設定する方法については、set_GPIO を参照してください。さらに、「led_brightness」パラメータを使用して明るさを制御できます。構文は次のとおりです
[green=0..100][,red=0..100]
注意: 名前付き構成の場合、緑と赤の LED に影響を受ける GPIO は変更できませんが、明るさのオプションは適用されます
最大 255 個のアドレス指定可能な LED を備えた 1 つの LED ストリップを構成して、視覚化を強化できます。 VU メーター ビジュアライザには、バッテリー ステータス インジケーターが含まれています (バッテリーを参照)。現在、WS2812B LED のみがサポートされています。 LED ストリップのハードウェア構成を設定します。または、NVS の led_vu_config 構文は次のようになります。
type=[WS2812],length=<n>,gpio=<dataPin>[,scale=<gain>]
ここで、 <n>
はストリップ内の LED の数 (1 ~ 255) です。 <scale>
ゲイン値 (パーセンテージ) を追加して、エフェクトの応答を強化できます。
プレーヤーまたは制御可能なディスプレイの ESP32 設定ページでビジュアライザー モードと明るさを設定するには、最新の LMS プラグイン アップデートが必要です (「Extra/SqueezeESP32 メニュー」を参照)。このプラグインは、追加の LMS CLI コマンドを追加します。
指示 | 注意事項 |
---|---|
<プレーヤーID> LED_visual [<モード>] [<明るさ>] | ビジュアライザの「モード」を切り替えるか選択します。 ビジュアライザの明るさ (0..255) は、「brightness」タグを使用して制御できます。 |
<プレイヤー ID> dmx <R,G,B,R,G,B, ... R,G,B> [<オフセット>] | 「オフセット」位置から始まる LED の色を設定します。 「R」(赤)、「G」(緑)、「B」(青)のカラー シーケンス。 複数の LED を設定するには、区切られた文字列に RGB 値を追加します。 |
1 つの一般的なロータリー エンコーダがサポートされており、プレスによる直交シフトが行われます。このようなエンコーダには通常、エンコーダ用の 2 つのピン (A および B)、グランドに設定する必要がある共通の C、およびプレス用のオプションの SW ピンがあります。 A、B、SW はプルアップする必要があるため、ESP32 によって自動プルアップが提供されますが、独自の抵抗を追加することもできます。 A と B に少しフィルタリングを施すと (~470nF)、ソフトウェアによって行われないデバウンスに役立ちます。
エンコーダは通常、LMS ではそれぞれノブを左、右、押すように、BT、AirPlay、Spotify では音量ダウン/アップ/再生切り替えを行うようにハードコーディングされています。 「ボリューム」オプションを使用すると、(LMS であっても) 常にボリュームダウン/アップ/再生の切り替えがハードコーディングされます。オプション「longpress」を使用すると、SW を長押ししたときに代替モードが可能になります。このモードでは、左が前、右が次、押すと切り替わります。 SW を長押しするたびに、モードが切り替わります (メイン モードの実際の動作は「音量」によって異なります)。
「knobonly」オプションを使用する可能性もあります(「volume」および「longpress」と排他的)。このモードでは、単一ノブのフル ナビゲーションを提供しようとしていますが、LMS UI の原理により少し歪んでいます。 Left、Right、および Press は LMS のナビゲーション ルールに従い、特に Press は、ミュージック ライブラリ内でナビゲートしている場合でも、常に下のサブメニュー項目に移動します。 「再生」、「戻る」、または「一時停止」ボタンがないため、問題が発生します。回避策は以下のとおりです。
ダブルクリック(または左右)の速度は、「knobonly」のオプションのパラメータを使用して設定できます。これは完璧な解決策ではないため、他のアイデアも歓迎します。ダブルクリック速度を長く設定すると、インターフェイスの応答性が低下することに注意してください。その理由は、シングルクリックかダブルクリックかを判断する前に、その遅延を待つ必要があるためです。また、メニュー ナビゲーションが「ためらう」状態になり、簡単に「一時停止」と解釈される可能性があります。
次の構文でパラメータrotary_configを使用します。
A=<gpio>,B=<gpio>[,SW=gpio>[[,knobonly[=<ms>]]|[[,volume][,longpress]]]]
HW 注: ロータリーに使用されるすべての GPIO には内部プルアップがあるため、通常はエンコーダーに Vcc を供給する必要はありません。それにも関わらず、使用しているエンコーダ ボードに ESP32 のプルアップよりも強力な独自のプルアップがある場合 (おそらくそうなります)、GPIO 間にクロストークが発生するため、Vcc を接続する必要があります。基板の回路図を見ると、他のピンが接地されている場合、これらの基板のプルアップが「勝ち」プルダウンを作成することがわかります。
SW gpio はオプションであり、必要に応じて純粋なボタンに再度影響を与えることができますが、ボリューム、長押し、ノブのみのオプションは、これらのモードでは欠落しているスイッチが重要な役割を果たすため、ほとんど意味がありません。 「音量」モードは引き続き使用できますが、音量の上げ下げ以外には使用できなくなります。したがって、上記の構文 [] の使用は少し誤解を招きやすいことに注意してください。
「ボタン」セクションの「重要な注意事項」も参照してください。また、「lms_ctrls_raw」(以下を参照) が有効になっている場合、これらのノブのみ、ボリューム、長押しオプションは適用されず、生のボタン コード (アクションではない) が LMS に送信されるだけであることに注意してください。
esp32 では、gpio 36 と 39 は入力のみで割り込みを使用できないため、A または B に設定できないことに注意してください。SW に使用する場合は、コストがかかる 100ms ポーリングが使用されます。
1 つの専用ボリューム ロータリー エンコーダがサポートされており、押すと直交シフトします。エンコーダは、LMS、BT、AirPlay、Spotify のボリュームアップ、ダウン、再生切り替えがハードコードされています (フィルタリングと HW のメモについては上記のメモを参照、esp32 の GPIO 36 と 39 も参照してください)。
次の構文でパラメータ 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)または中の1つのいずれかです
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に送信できる実際のボタンではありませんが、深い睡眠モードをアクティブにするためのフックであることに注意してください(睡眠を参照)。
このような文字列を作成したものは、16文字未満の名前で新しいNVSパラメーターを入力するために使用します。これらの構成をできるだけ多く持つことができます。次に、デフォルト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 " }}]
2つのボタンを定義します
「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つのボタンを定義します
以下は、あなたのデコードの喜びのための難しいが機能的な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は、「生の」ボタンコードを送信する可能性もサポートしています。それは少し複雑なので、私と一緒に我慢してください。ボタンは、SpeezeSP32で処理し、再生/一時停止のような「関数」にマッピングするか、プレーン(RAW)コードとしてLMSに送信することができ、プレス/リリース/ロングプレスの完全なロジックはLMSによって処理されます。それを制御できます。
「生」モードの利点は、ブームに可能な限り近いプレーヤーを構築できることです(例えば)が、再マッピング機能を使用したり、ロジックをシフトしたりすることはできません。ボタンの限られたセット。 「RAW」モードでは、本当に定義する必要があるのは、GPIOとボタンの間のマッピングだけです。 LMSに関する限り、これらのJSONペイロードの他のオプションは重要ではありません。これで、BTまたはAirPlayを使用すると、上記の完全なJSONコンストラクトが完全に適用されるため、シフト、ロングプレス、再マッピングオプションがまだ機能します。
非「生」モードを使用する場合、LMSのCLI(コマンドラインインターフェイス)が使用され、パスワードなしで利用できる必要があることに注意してください
良いオプションも悪い選択もありません、それはあなたの選択です。 NVSパラメーター「LMS_CTRLS_RAW」を使用して、そのオプションを変更します
GPIO 36および39は入力のみであり、割り込みを使用できないことに注意してください。ボタンに使用すると、100msのポーリングが開始されますが、これは高価です。ロングプレスもうまく機能しない可能性があります
有線イーサネットはさまざまなオプションを備えたESP32でサポートされていますが、SqueezeSP32は、このようなRMIIインターフェイスを備えたMicroChip LAN8720またはDavicom DM9051のようなSPITETHERNETブリッジのみをサポートしています。
注: 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をロックすることを避けるために推奨されます。
ESP32のAPLLはオーディオコーデックに必要なため、