RaspberryPiでPechatを使用してみる【失敗?】

RaspberryPiでPechatを使用してみる

pechat.jp

(注)今回のエントリーは失敗の記録になります。ただ、デバイスとしては使用できています。最後の方だけみてもらえればいいかなと思います。

以前のエントリーにも書いたダブルドライバーを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

正確には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]

あれ?うまくペアリングができないようです。 正常であれば、pairconnectのコマンドでデバイス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の画面上の右上の部分にそれはあります。

f:id:ueponx:20170504153005j:plain

このBTのマークがそれになります。

f:id:ueponx:20170504153037j:plain

マウスで左クリックをすると接続されているBluetoothバイスが表示されます。この表示ではPechatも認識されている様です。

続いて、その2つ隣の音声アイコンを右クリックし音声出力の状況を確認します。

f:id:ueponx:20170504153521j:plain

正常ならばこの状態で出力するデバイスにチェックが入っているのですが、チェックがありません。これが原因ということなのでしょうか。一応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のアイコンをマウスで左クリックしてメニューを開きます。

f:id:ueponx:20170504192450j:plain

その中から【Add Device】を選択します。すると認識されているデバイス一覧のダイアログが開きます。

f:id:ueponx:20170504191552j:plain

一覧の中から【Pechat】のデバイスを選択し【Pair】ボタンをクリックします。

f:id:ueponx:20170504191553j:plain

うまく行けば、ペアリング成功の旨を表すダイアログが表示されます。(ここでaudioメニューから出力するデバイスを選んでねというメッセージがでます。BTの設定ではないのが謎です。)

f:id:ueponx:20170504191554j:plain

もう一度BTアイコンを左クリックしてみるとPechatがメニュー上に現れます。選択してみると

f:id:ueponx:20170504191555j:plain

【connect】がでてくるのですが、選択してもコネクションが失敗するメッセージダイアログが表示されるだけです。

f:id:ueponx:20170504191556j:plain

次はオーディオメニューを確認してみると、ちゃんとメニューには出力対象のデバイスにチェックがついています。また、こちらにもPechatが表示されています。

f:id:ueponx:20170504191557j:plain

先程のメッセージにもあった通りこちらでデバイス選択をしてみます。

f:id:ueponx:20170504191558j:plain

接続処理を行い…

f:id:ueponx:20170504191559j:plain

接続に成功した様です。

f:id:ueponx:20170504191600j:plain

処理がうまく行ったら、音声を鳴らしてみます。

$ aplay sample.wav
再生中 WAVE 'sample.wav' : Signed 16 bit Little Endian, レート 44100 Hz, ステレオ

文字だけではわかりませんが、うまく出力できました。コマンドラインではうまくできませんでしたがXからの設定ではうまく行ったようです。

終わりに

一応、デバイスとしては使用できるようにはなりました。現時点での難点はコマンドラインでの設定変更ができない点です。とはいえ、Pechatは非常にコンパクトで音声を鳴らすことのできるデバイスなので、今後比較的に利用ができそうなスピーカーデバイスではないでしょうか。

/* -----codeの行番号----- */