小部屋の覚え書きRO

ど根性軟弱ネットゲーマーさーくすのブログ。本家の小部屋から日記をこちらにしました。
本家は主に電子工作ネタで更新中

[ucom]スマートスピーカーになりそこねた話

2020-08-13 23:16:13 | 組み込み・マイコン

IIMPMusicプレーヤーを使っていて
音量調整のためにアンプのボリュームを触るのが煩わしくなってきました
ラズパイからスピーカーまで全部つなげてしまえば
スマートスピーカーになるのでは?
ということで作成に取り掛かりました

IIMPのクライアントにはラズパイZeroWHを使います
Zeroには3Bのようにちゃんとした音声出力端子が無いので
Amazonの激安USBAudioを使うことにします
メーカー名の入った同じ見た目のお高い品もありますが
「ちゃんと動く」か「ちゃんと動かないかもしない」程度の違いです
中身は同じです(たぶん)
余分に買っておけばいいです

USBホストケーブルをはさんでこのUSBオーディオを接続をすれば
自動的に使えるようになりました

音声出力とボリューム調整をするには以下のコマンドを使います
音声出力

mplayer -volume 100 -ao alsa:device=plughw=1.0 MUSICFILE

内蔵BCM2835が0.0、外付けUSBは1.0になるそうです

ボリューム調整(vol 0~100)

sudo amixer -c 1 sset Speaker vol%

mplayerコマンドでボリューム調整も出来るのですが、
再生中に動的に変更するためamixerの機能を使うことにしました

こうして音量調整した出力をアンプに接続します
この接続には可変抵抗を使わず、固定抵抗でレベルが1/10となるようにしました
これは「一切の操作部品を使わない」というコンセプトに基づくものです

アンプにはタンスの奥で眠っていたTA2020-020アンプキットを使いました
調べてみると10年以上昔に話題になったデジタルアンプだそう
深く調べると沼にはまりそうなので窓を閉じます
そんな伝説的なアンプを活用出来てラッキーでした

さてこの一式をスピーカーの箱に納められればいいのですが
使用予定のスピーカーの裏板は外せないものでした
とりあえずラズパイ、USBオーディオ、アンプを塩ビ板に載せて
液晶TV背面のVESA穴に固定しました
こうして「アンプ付きIoTMusicプレーヤー」の完成です

参考記事
http://www.yam-web.net/raspberry-pi/music.html
https://nikko.us/12/080.html
http://niconico.uiui.net/1_right_TA2020-020.html
https://www.niandc.co.jp/sol/tech/date20160508_542.php
https://www.phileweb.com/review/article/201609/13/2221.html
https://www.toomath.net/entry/2019/02/26/raspberry-pi-zero-w-usb-audio-convert-adapter

ここから昔の話
2018-05-06(Sun)
Raspberry pi ZERO WHが手に入りました
IIMPプロジェクトが進んだのでいろいろメモを残します

まずは複数配信先の対応

配信先であるラズパイBを二つ用意して
それぞれ同じクライアントソフトを入れておきます
サーバーのラズパイAにB1とB2のアドレスを登録しておき
タブレットで選択した配信先に対して命令を出すようにします
これで複数配信コントロールが出来るようになりました

ちょっと便利になってきたシステムですが
今後の展開の邪魔になる仕組みを次で直します

クライアント側が配信を受け取るにあたり
ApacheのPHP5動作で実行していました

動作はうまくいっているのですが、
この仕組みだと以下のデメリットがあります
・サーバー側にクライアントのアドレスを登録しておく必要がある
・クライアントにApacheとPHP5をインストールしなければならない
これらを直すためにいわゆるCSシステムに変更しました

サーバーが直接クライアントに命令を出すのではなく
命令をファイルとして内部に保持しておき
クライアントのcurlポーリングによって
命令を受け取り動作する仕組みにしました
これはこれで問題があって
サーバーとクライアントが非同期になるので
タブレットでの再生指示から実際の再生開始まで
ポーリング分の待ち時間が起きます
ポーリング時間は10秒にしておきます

CSシステムにすることで、次の準備が出来ました

クライアントのアドレスを気にする必要がないので
クライアントがインターネットの先でも問題ありません
2回目の実験になるので今度はHTTPSアクセスを試します
curlはHTTPSに対応しているのでオプション追加でクリア出来ました

PiZERO WHでmplayerが使えなかったので
omxplayerで代用しました
curlで再生対象のURLを取得した後
再度curlで再生対象mp3ファイルを
自身にダウンロードするようにしました
Bluetooth対応スピーカーで再生すれば
ワイヤレスでとってもいい感じに