2020-01-28 動作確認・オプションについて追記
はじめに
ラズパイを用いてBluetoothレシーバを作りたいと思った。検索すると大体bluezを用いてBluetoothレシーバにする例があったため最初bluezで構築した。しかし、遅延やら停止、コーデックのエンコードエラーが多発したためbluezのBluetoothレシーバはやめた。色々と調べているうち、balenaプロジェクト公式で「昔のHi-fiオーディオを今時レシーバにさせない?」みたいな記事があったため構築してみようとやってみた。
以下そのサイト
Turn your old speakers or Hi-Fi into Bluetooth, Airplay and Spotify receivers with a Raspberry Pi and this step-by-step guide
https://www.balena.io/blog/turn-your-old-speakers-or-hi-fi-into-bluetooth-receivers-using-only-a-raspberry-pi/
どうやらこの通りだとBluetoothだけでなくAirplay、Spotify Connect が使えるようになるらしい。
ある意味すごい。今じゃ当たり前だが。。
やってみる。
準備したもの
- Raspberry Pi 3B
- microSD 64GB (FAT32フォーマット済み)
- 3.5mmプラグステレオスピーカー
- 電源 (5V,3A)
ラズパイに関してはRaspberry Pi 3A+/3B/3B+/4B/Zero W (Wi-Fi,Bluetoothが使えるモデル)で動作する。
セットアップPC環境はWindows 10 Home
balena Cloud の初期操作
アカウントの作成
https://dashboard.balena-cloud.com/signup?utm_source=efp&utm_campaign=balena-sound にてアカウントを作成。Github,GoogleのアカウントでもOK
アプリケーションの作成
サインインするとアプリケーション作成が出る。自分がわかりやすいものでよい。
ラズパイに焼くbalenaOSの準備
ダッシュボードから[ +Add Device ]
、 select device type
は自分のラズパイを選ぶ。select balenaos version
は最新のもの"(recommended)"を選ぶのではなく"v2.38.0+rev1"を選ぶとよい。(recommendedのまま焼いたら起動しなかった) select edition
は "Development"、network connection
は"Ethernet+Wi-Fi"を選びSSID,Password を入力。そしてダウンロード。
##balenaOSを焼く・起動
焼く
FlashツールであるbalenaEtcherをインストールする。
https://www.balena.io/etcher/
起動するとこのような画面が出る。Select image はダウンロードしたbalenaOS を選択。Select drive で焼きたいSDカードを選び、Flashする。
Flash Completeと出たら完了。一度イジェクトしてまたPCに差し込む。
カスタマイズ
調べるとgpuメモリを多く設定したほうがいいとあった。念の為設定する。ここを参考にした。
“balenaOSをRaspberry Pi3にインストールする方法 – Qiita”
https://qiita.com/ikemura23/items/deedeb2a55ca1f6d0ec5
今回音声メインなためこの設定は不要かもしれない。
Windowsでもrasin-bootからconfig.txtをメモ帳編集でよい。
※ネットワークに関して
固定(静的)IPだとbalenaOSには繋がらない(DashBoadに表示されない)ため、DHCPが無難である。
固定の場合はルータの設定でDHCP有効化しておくと良い。
設定が完了したところでラズパイにSDカードを差して起動。
##balenaOSの起動
起動
ラズパイにSDカードを挿入して電源を投入。
ここで起動状態を確かめたいという方はhdmiでモニター等につなげるとコンソール画面が見れると思う。
→ 画面に大きくbalenaOS
、その下にBooted - Check your balena dashboard.
と出ていれば正常。
balena Cloud上でのデバイスの確認
balena Cloudのダッシュボードを確認すると起動したデバイスがリストに出ているかと思う。
ページより
もし出ていない場合はネットワークに繋がっていない、もしくはラズパイのエラーかと思われる。
(OS作成時にnetwork connection
はEthernet+Wi-Fi を選んでいなくWi-Fiに繋がらない、DHCP設定等)
公式のトラブルシューティング:https://www.balena.io/docs/faq/troubleshooting/troubleshooting/
##balena CLIのインストール
balenaプロジェクトのGithubからインストーラをダウンロードしインストール
https://github.com/balena-io/balena-cli/releases
その後コマンドプロンプトかPowerShellを管理者で起動する。
balena login
と入力 Web authorization (recommended)
を選択
ブラウザが立ち上がるのでサインインしボタンを押せば認証完了
コードをデプロイ
Githubからコードをzipで任意の場所にダウンロード
https://github.com/balena-io-projects/balena-sound
ダウンロードしたzipを解凍、コマンドプロンプトかPowerShellを管理者で起動
cd [解凍したディレクトリ] ~\balena-sound-master
balena push [自分のアプリケーション名]
そしてbalena Cloudのダッシュボードを見るとUpdating
となる。Updating
終了後自動的にRunning
になる。
Serviceとして airplay
bluetooth-audio
spotify
が動く。これで一度rebootし機能するか確認する。
スピーカーをつなげる。
##動作確認
Bluetooth
スマホ・プレイヤー・PC等をペアリングする。デバイス名として "balena Sound ~ "と出るので選択しペア。音源を再生できればOK
ペアするとピンポーンと音がなる。
注:Android端末によっては接続しても接続していない状態(「nullと接続しています」)が設定画面に表示されるが正常である。これでまた接続しなおすと再生できなくなるため注意
Airplay
iPhone・iPod・iPad等のAppleデバイスで利用可能。またiTunesでも可。Bluetoothオン(しなくても大丈夫だった)AirplayでBluetoothと同じデバイス名が出ればOK
Spotify Connect
注:Spotify Premiumに入っていないと使えない
Wi-Fiで繋がる。SpotifyアプリでスピーカーとPCのボタンを選択しBluetoothと同じデバイス名が出ればOK
##デバイス名の変更(オプション)
balena Sound ~はダサいなと思ったらデバイス名を変更できる。
balena Cloudダッシュボード上の Environment variablesを選択
[+Add variable]
からNameにBLUETOOTH_DEVICE_NAME
Valueに任意のデバイス名を入力
これでrebootすればデバイス名が設定した名前に変わる。
※その他のオプション
ページの記載だとDAC HATを用いて音質アップできるらしい。
今回はやらないが、DACを使いたいという方は参考にしてほしい。
また、HDMIでも音声出力はできるので、HDMI対応アンプを持っていれば音質アップできるだろう。
詳細のオプションについてはGithubに書いてある。(ボリュームの固定、PINコードの設定等)
https://github.com/balenalabs/balena-sound#set-output-volumes
##良かった点
・raspbianでbluezインストールするよりはコマンドを打たなくてよいため楽。ほぼguiでOK すぐに構築できる。
・balena Cloudの使い方が分かった。とても簡単。gitだと設定がクソ面倒くさいためすぐbalena CLIが使えるのはホント楽。
・bluezでレシーバ化したのとは全然違う。ほぼ遅延しないし止まらない。またペアが楽にできる。
・Airplayで動画等の音声を飛ばせるため良い。少々遅延があるが
##悪かった点(躓いた点)
・balenaOS作成時にnetwork connection をEthernet only トグルのままで最初OSを作成してしまった。
→ ネットに繋がらない。Bluetoothも使えない。
・balena CLI と Git で最初コードを適用したが変数エラーが出た。
→ ドキュメントにも記述してあるが、Windows上だとこの組み合わせはエラーするらしい。そのため先程のようにzip解凍→balena push
すればきちんと動く。
##まとめ
bluetoothレシーバ化はラズパイだとbluezしか方法が無いのかな?と思っていたが、balena Cloudを用いても簡単にしかも遅延、ノイズ等無しで再生できることが分かった。まだ初期段階であるためもしかしたら今後再生できなくなってしまうといったトラブルがあるかもしれない。あくまでもラズパイbluetoothレシーバ化の一つの手段としておく。
また、balena Cloudを用いてYoutubeのサイネージが構築できるらしいので今後やってみたいと思っている。
##リンク
balena - Home
balenaOS - Getting Started