LoginSignup
12

More than 5 years have passed since last update.

Raspberry Pi3とbluetooth接続したスマホの音楽再生をAVRCPで制御する

Posted at

はじめに

Raspberry piとBluetooth接続したスマホの音楽再生をAVRCPで制御する方法のメモ

環境

  • Raspberry Pi3(Raspbian Jessie Lite)
  • Python 2.7.9
  • bluez5
  • スマホ(androidでもiPhoneでも)

前準備

https://gist.github.com/oleq/24e09112b07464acbda1
http://blog.bnikka.com/raspberrypi/raspberrypibluetooth.html
上記URLを参考に、RaspberryPiをBluetoothオーディオ(A2DP)レシーバ化し、スマホから音楽再生できる状態にしておく
(※A2DPで接続しないとAVRCPが使えないみたいだが、もしかするとAVRCPのみで使う方法もあるかも?)

AVRCPで制御してみる

dbus-pythonを使ったデモ

BT_MediaPlayer.py
#!/usr/bin/python

import dbus

SERVICE_NAME = "org.bluez"
ADAPTER_INTERFACE = SERVICE_NAME + ".MediaPlayer1"
bus = dbus.SystemBus()
manager = dbus.Interface(bus.get_object(SERVICE_NAME, "/"),
                    "org.freedesktop.DBus.ObjectManager")
objects = manager.GetManagedObjects()

if __name__ == '__main__':
    for path, ifaces in objects.iteritems():
        adapter = ifaces.get(ADAPTER_INTERFACE)
        if adapter is None:
            continue
        print path
        player = bus.get_object('org.bluez',path)
        BT_Media_iface = dbus.Interface(player, dbus_interface=ADAPTER_INTERFACE)
        break

    while 1:
        s = raw_input()
        if s == 'quit': 
            break
        if s == 'play':
            BT_Media_iface.Play()
        if s == 'pause':
            BT_Media_iface.Pause()
        if s == 'stop':
            BT_Media_iface.Stop()
        if s == 'next':
            BT_Media_iface.Next()
        if s == 'pre':
            BT_Media_iface.Previous()
        if s == 'show':
            track =  adapter.get('Track')
            print 'Title: ' + track.get('Title') 
            print 'Artist: ' + track.get('Artist')
            print 'Album: ' + track.get('Album')
            print 'Genre: ' + track.get('Genre')
            print 'NumberOfTracks: ' + str(track.get('NumberOfTracks'))
            print 'TrackNumber: ' + str(track.get('TrackNumber'))
            print 'Duration: ' + str(track.get('Duration'))

上記のコードを実行すると入力待ち状態となるので、コマンドを入力する
使用可能なコマンドは以下の通り

  • quit : プログラム終了
  • show : 曲情報の表示
  • play : 再生
  • pause : 一時停止
  • stop : 停止
  • next : 次の曲
  • pre : 前の曲

うまくいけば接続したスマホのパスが表示され、各種コマンドで音楽再生を制御できる
下記はshowコマンドを実行した例
BT_MediaPlayer_show.png

参考

http://qiita.com/eggman/items/339a9c9b338634ac27a5
https://www.raspberrypi.org/forums/viewtopic.php?t=111486&p=766936

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12