RaspberryPiでPechatを使用してみる
(注)今回のエントリーは失敗の記録になります。ただ、デバイスとしては使用できています。最後の方だけみてもらえればいいかなと思います。
以前のエントリーにも書いたダブルドライバーをRaspberryPiでの実現に向けた企画の第2段です。前回はUSBを挿入すると音がなるところまでを実現しました。しかし、RaspberryPiをバックルに入れて更にスピーカーを接続するとなるとかなり本体のサイズが大きくなることが予想されます。また、スピーカーの電源まで考えるとかなり苦労しそうな感じです。 そこで音声デバイスはBluetoothスピーカーの使用を考えてみることにしました。
ネットを調べてみると
サイズも小さく電源が内蔵されているのがかなり助かりそうなデバイスです。
【 主な仕様 】
通信方式:Bluetooth 見通し送信距離:約10m(使用環境による) 電源:3.7V リチウムイオンポリマー二次電池 充電時間:約3時間 連続使用時間:約1.2時間 外形寸法:直径45mm 奥行き21mm(取り付け部含む) 重量:20g 付属品:充電ケーブル 対応OS:iOS9.0以上/Android5.0以上
対応OSはiOS9.0以上/Android5.0以上となっていますが、基本的にはBluetoothスピーカーなので使えないことはないでしょうw。
RaspberryPiでBluetoothスピーカーを使う
参考にしたのは下記になります。 qiita.com
まずはBluetoothドングルをRaspberryPiに接続します。 使用したドングルは以下になります。
ドングルをさしてlsusb
コマンドを実行すると
【ドングルを挿す前】
$ lsusb Bus 001 Device 005: ID 045e:075d Microsoft Corp. LifeCam Cinema Bus 001 Device 004: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070] Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
【ドングルを挿した後】
$ lsusb Bus 001 Device 006: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) Bus 001 Device 005: ID 045e:075d Microsoft Corp. LifeCam Cinema Bus 001 Device 004: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070] Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 006: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
が認識されたドングルになります。
ソフトウエアの確認
音声の出力に関してはPulseAudio
を使用します。
正確にはPulseAudioからBluetoothを経由して音声の出力を行うことになりますのでpulseaudio-module-bluetooth
もインストールします。
ただ、最近のRasbianにはインストール済みであることが多いです。今回のバージョン情報は以下のような感じです。
$ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 8.0 (jessie) Release: 8.0 Codename: jessie
念のためパッケージの確認すると
$ dpkg -l | grep pulse ii libpulse0:armhf 5.0-13 armhf PulseAudio client libraries ii libpulsedsp:armhf 5.0-13 armhf PulseAudio OSS pre-load library ii pulseaudio 5.0-13 armhf PulseAudio sound server ii pulseaudio-module-bluetooth 5.0-13 armhf Bluetooth module for PulseAudio sound server ii pulseaudio-module-x11 5.0-13 armhf X11 module for PulseAudio sound server ii pulseaudio-utils 5.0-13
インストールが必要なパッケージはほぼ入っています。この状態のインストール作業をすると
$ sudo apt-get install pulseaudio-module-bluetooth パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 pulseaudio-module-bluetooth はすでに最新版です。 以下のパッケージが自動でインストールされましたが、もう必要とされていません: ax25-node libax25 libllvm3.7 openbsd-inetd これを削除するには 'apt-get autoremove' を利用してください。 アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 161 個。
最新の状態なのでインストールのやり直しはありません。(心配ならapt-get upgrade
するのがいいと思います。)
Bluetoothの状態を確認する
bluetoothctl
コマンドを使用すればBluetoothのペアリングなどを操作する事ができますので、設定の前に確認してみます。
$ sudo bluetoothctl -a [NEW] Controller 00:1B:DC:06:XX:XX raspberrypi [default] [NEW] Device CC:30:80:00:XX:XX Pechat-00F8A1 Agent registered [bluetooth]# scan on Discovery started Discovery started [CHG] Controller 00:1B:DC:06:XX:XX Discovering: yes [NEW] Device CC:30:80:00:XX:XX Pechat-00F8A1 [CHG] Device 75:66:AC:C7:XX:XX RSSI: -75 [CHG] Device CC:30:80:00:XX:XX RSSI: -57 [DEL] Device 75:66:AC:C7:XX:XX 75-66-AC-C7-90-25 [DEL] Device CC:30:80:00:XX:XX Pechat-00F8A1 [NEW] Device 75:66:AC:C7:XX:XX 75-66-AC-C7-90-25 [CHG] Device 3C:77:E6:03:54:C9 UUIDs: 00001200-0000-1000-8000-00805f9b34fb [NEW] Device CC:30:80:00:XX:XX Pechat-00F8A1 [bluetooth]# pair 00:1B:DC:06:XX:XX Device 00:1B:DC:06:XX:XX not available [bluetooth]# connect 00:1B:DC:06:XX:XX Device 00:1B:DC:06:XX:XX not available [bluetooth]# quit Agent unregistered [DEL] Controller 00:1B:DC:06:XX:XX raspberrypi [default]
あれ?うまくペアリングができないようです。
正常であれば、pair
とconnect
のコマンドでデバイスのMAC指定すれば行けるようなんですが…不吉な予感です。
念のためにsyslogを確認すると
$ tail /var/log/syslog (略) May 4 14:57:55 raspberrypi bluetoothd[435]: a2dp-sink profile connect failed for CC:30:80:00:XX:XX: Protocol not available
となっていました。プロファイルが違うということのようです。 設定をちゃんと行えればいいのかなと思いましたのでそのまま作業は続行します。
ソフトウエアの設定
あとは参考にしたブログの通り作業を行っていきます。
/etc/systemd/system/pulseaudio.service
ファイルを作成
$ sudo vim /etc/systemd/system/pulseaudio.service
【/etc/systemd/system/pulseaudio.service】
[Unit] Description=Pulse Audio [Service] Type=simple ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm [Install] WantedBy=multi-user.target
/etc/dbus-1/system.d/pulseaudio-bluetooth.conf
ファイルを作成
$ sudo vim /etc/dbus-1/system.d/pulseaudio-bluetooth.conf
【/etc/dbus-1/system.d/pulseaudio-bluetooth.conf】
<busconfig> <policy user="pulse"> <allow send_destination="org.bluez"/> </policy> </busconfig>
pulseaudioサービスの設定
サービスのスタートと自動起動の設定を行います。
$ sudo systemctl start pulseaudio.service $ sudo systemctl enable pulseaudio.service
これで完了です。 あとは先程と同じくBluetoothの状態の確認をします。
再度、Bluetoothの状態を確認する
今度はうまくconnect
$ sudo bluetoothctl -a [NEW] Controller 00:1B:DC:06:XX:XX raspberrypi [default] Agent registered [bluetooth]# scan on Discovery started [CHG] Controller 00:1B:DC:06:XX:XX Discovering: yes [NEW] Device CC:30:80:00:XX:XX Pechat-00F8A1 [bluetooth]# pair CC:30:80:00:XX:XX Attempting to pair with CC:30:80:00:XX:XX [CHG] Device CC:30:80:00:F8:A1 Connected: yes [CHG] Device CC:30:80:00:F8:A1 UUIDs: 00001101-0000-1000-8000-00805f9b34XX 0000110b-0000-1000-8000-00805f9b34XX 0000111e-0000-1000-8000-00805f9b34XX 00001200-0000-1000-8000-00805f9b34XX [CHG] Device CC:30:80:00:XX:XX Paired: yes Pairing successful [CHG] Device CC:30:80:00:XX:XX Connected: no [bluetooth]# scan off [CHG] Device CC:30:80:00:XX:XX RSSI is nil Discovery stopped [CHG] Controller 00:1B:DC:06:XX:XX Discovering: no [bluetooth]# connect CC:30:80:00:XX:XX Attempting to connect to CC:30:80:00:XX:XX [CHG] Device CC:30:80:00:XX:XX Connected: yes Connection successful [bluetooth]# quit Agent unregistered [DEL] Controller 00:1B:DC:06:XX:XX raspberrypi [default]
一応、うまく認識ができたようです。
音声を出力してみる
$ aplay ./sample.wav ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: アクセス拒否 aplay: main:722: audio open error: 接続を拒否されました
オゥフ…
そういえば?
Xの画面上にもBluetoothの設定のアプリケーションがあったよな気がしますのでそれも確認してみます。
Xの画面上の右上の部分にそれはあります。
このBTのマークがそれになります。
マウスで左クリックをすると接続されているBluetoothデバイスが表示されます。この表示ではPechatも認識されている様です。
続いて、その2つ隣の音声アイコンを右クリックし音声出力の状況を確認します。
正常ならばこの状態で出力するデバイスにチェックが入っているのですが、チェックがありません。これが原因ということなのでしょうか。一応Pechatのところでクリックしてみると、一瞬ダイアログが表示されているようです。
$ aplay sample.wav 再生中 WAVE 'sample.wav' : Signed 16 bit Little Endian, レート 44100 Hz, ステレオ
音声はなりませんが、エラーはなくなりました。うーん…。
どうしようもないので今回は設定を元に戻してみます。
$ sudo systemctl stop pulseaudio.service
$ sudo systemctl disable pulseaudio.service
気を取り直してX側から設定を行います。
まずはBTのアイコンをマウスで左クリックしてメニューを開きます。
その中から【Add Device】を選択します。すると認識されているデバイス一覧のダイアログが開きます。
一覧の中から【Pechat】のデバイスを選択し【Pair】ボタンをクリックします。
うまく行けば、ペアリング成功の旨を表すダイアログが表示されます。(ここでaudioメニューから出力するデバイスを選んでねというメッセージがでます。BTの設定ではないのが謎です。)
もう一度BTアイコンを左クリックしてみるとPechatがメニュー上に現れます。選択してみると
【connect】がでてくるのですが、選択してもコネクションが失敗するメッセージダイアログが表示されるだけです。
次はオーディオメニューを確認してみると、ちゃんとメニューには出力対象のデバイスにチェックがついています。また、こちらにもPechatが表示されています。
先程のメッセージにもあった通りこちらでデバイス選択をしてみます。
接続処理を行い…
接続に成功した様です。
処理がうまく行ったら、音声を鳴らしてみます。
$ aplay sample.wav 再生中 WAVE 'sample.wav' : Signed 16 bit Little Endian, レート 44100 Hz, ステレオ
文字だけではわかりませんが、うまく出力できました。コマンドラインではうまくできませんでしたがXからの設定ではうまく行ったようです。
終わりに
一応、デバイスとしては使用できるようにはなりました。現時点での難点はコマンドラインでの設定変更ができない点です。とはいえ、Pechatは非常にコンパクトで音声を鳴らすことのできるデバイスなので、今後比較的に利用ができそうなスピーカーデバイスではないでしょうか。