2017-02-16 71 views
3

私の現在のプロジェクトでは、WindowsコンピュータからアンドロイドデバイスにファイルをBluetooth経由で送信する必要がありますブルートゥース接続。私はpybluezを見てきました。クライアントとサーバーのアーキテクチャの間でファイルを送信するだけのシンプルなようでしたが(実際には、私のラップトップとデスクトップの間でかなり高速に送信されています)、私の人生にとっては、接続が確立されたら、コンピュータからアンドロイドにファイルを送信します。私の試みはとてもPython Bluetoothファイルを電話に送信する方法

nearby_devices = bluetooth.discover_devices(
    duration=8, lookup_names=True, flush_cache=True, lookup_class=False) 

し、後でpybluezによって与えられたスクリプトの例でもちろんそう

port = 1 
for addr, name in nearby_devices: 
    bd_addr = addr 
sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM) 
sock.connect((bd_addr, port)) 

sock.send("download-app") 
sock.close() 

などのファイルを送信しようとしているようなデバイスからのことのようにbluetoothのMACアドレスをつかんされていますドキュメント私はシームレスにクライアントとサーバーの間でファイルを送信できますが、選択したアンドロイドデバイスにファイルを送信する方法がなくても(私はそのアドレスを指定していても範囲内であることを知っていますが)、まだ固執しています

答えて

1

...

は、あなたのBluetooth接続のもう一方の端に話をする何かを必要としています。カスタムサーバーをよく知られているサービス(通常はthese optionsのいずれか)で置き換えるだけで済みます。

私の電話機は「OBEX Object Push」サービスをサポートしているので、適切なクライアントとの通信が必要です。幸運なことに、PyOBEXとPyBluezの組み合わせがここでのトリックです!

次のコード(PyOBEXサンプルとPyBluezサンプルから簡単にパッチを当てる)は、Windows 10、Python 2.7インストールで実行され、電話で簡単なテキストファイルが作成されます。

from bluetooth import * 
from PyOBEX.client import Client 
import sys 

addr = sys.argv[1] 
print("Searching for OBEX service on %s" % addr) 

service_matches = find_service(name=b'OBEX Object Push\x00', address = addr) 
if len(service_matches) == 0: 
    print("Couldn't find the service.") 
    sys.exit(0) 

first_match = service_matches[0] 
port = first_match["port"] 
name = first_match["name"] 
host = first_match["host"] 

print("Connecting to \"%s\" on %s" % (name, host)) 
client = Client(host, port) 
client.connect() 
client.put("test.txt", "Hello world\n") 
client.disconnect() 

PyOBEXはしかし、かなり最小限のパッケージで、互換性のPython 3ではないので、それは必要条件だ場合、あなたがやるには少しポーティングを有していても良いように見えます。

+0

仲間...ありがとう。本当にありがとうございます。これは「本当に私のプロジェクトに必要な」タイプの取引の1つです。あなたはおそらく私だけでなく、この正確な状況で他の多くの人を助けるでしょう。 –

+0

私は、Python 3のサポートに加えて、nOBEXと呼ばれるPyOBEXのフォークをいくつかの改良点、新機能、バグ修正とともに作りました。こちらをご覧ください:https://github.com/nccgroup/nOBEX – Sultan

2

私はそれを個人的に探検したが、チェクこのブログをk個 -

http://recolog.blogspot.com/2013/07/transferring-files-via-bluetooth-using.html

著者は、OBEXプロトコルのためのAPIとして水色のパッケージを使用し、接続を介してファイルを送信します。今、lightblueパッケージは維持されていないようです。 PyObexのような他のパッケージがありますが(私は何らかの理由でインポートできませんでした)、あなたも代替品として探索することができますが、lightblueは行く方法のようです。ご存知のようにあなたがそこに道のほとんどだ

+0

私はこの正確なページをおそらく約10回見たことを意味します。問題はlightblueが* nixベースであり、このプロジェクトに使用するためのターゲットOSはWindowsベースであることがあります。これまでの私の考えは、これを達成するためには必然的に私自身のライブラリをC言語で書かなくてはならないことになります。 –

+1

私はそれを手に入れました。問題は、ウィンドウがopenOBEXをサポートしていないということです。これは、これがすべてベースになっているものです。しかし、私はちょっとした工夫をして働くという珍しい考えがありました。 pybluezモジュールをFTPを使って送信するようにカスタマイズできますか?あなたがobexftp、openobexなどを必要とするかどうかは確かではありませんが、アンドロイドデバイスのインストールは簡単です。申し訳ありませんが、私はより多くの助けができませんでした。 –

+0

正直言って私は壁に頭を打つ日の後にobexライブラリを見つけることになったが、何らかの理由でそれはまだ私の電話でブロックされていた。それは私のためにCにオフのように見える –

関連する問題