[スイッチ] PyBluezはUbuntuのブルートゥースブルートゥースシリアル識別およびテストを実現

システム:Ubuntuの14.04

ブルートゥース:USB2.0 Bluetoothアダプタと緑(モデル:CM109;チップ:CSR8510)

まず、Bluetoothの識別:

  図1に示すように、ハードウェアは、デバイスが検出されたかどうかを確認するために、端末を開くために、挿入されています。

$ lsusbBus 001デバイス003:ID 0a12:0001ケンブリッジ・シリコン・ラジオ、株式会社Bluetoothドングル(HCIモード)

  2、Bluetoothモジュールとして認識かどうかを確認するには:

$ hciconfig -ahci0:タイプ:BR / EDRバス:USB ...

  3、Bluetoothモジュールのアドレスを参照してください。Bluetoothモジュールそれらのアドレスが表示されていない場合、あなたはhci0はのRFKill listコマンドによってブロックされたかどうかを確認する必要があり、使用することは、Bluetoothモジュール(hci0)を有効にする(のRFKillリストはhci0のシリアル番号を表示)0のブロックを解除rfkillが。

$ Hcitool devDevices:hci0 00:1A:7D:DA:71:11

  図4は、Bluetoothモジュールをアクティブにします。

$ sudoをhciconfig hci0アップ

  Bluetoothモジュールをアクティブにした後は、通常のBluetooth経由で携帯電話を接続することができます。電話がBluetoothモジュールを検索することができない場合はUbuntuのデフォルトが表示されていないので、Bluetoothモジュールが低くなる場合があり、あなたが目に見える日を設定することができ、Ubuntuの上のツールバーにあるBluetoothアイコンをクリックする必要があります(一時的にUbuntuの下のBluetoothの可視性を設定何らターミナルコマンドが見つかりませんでした) 。

  5、サーバーへのテスト・セットアップBluetoothモジュールとコードをペアリングする必要はありません。

$ hciconfig hci0 NOAUTH

  6、hciconfigとhcitoolは(のbluezツールを提供、のbluezは、そのほとんどのLinuxディストリビューションのデフォルトのBluetoothプロトコルスタックである)の検索、接続機能を実現することができ、これは一時的な下ではありませんので、ここでの主な希望は、プログラム、Bluetoothモジュールを制御します。

二、PyBluezのインストール:

  1、ダウンロードおよび抽出PyBluez-0.22、PyBluez-0.22ディレクトリに入る;(https://github.com/karulis/pybluez)

  図2に示すように、取付PyBluez-0.22:

$ sudoをのpython setup.pyインストール

    問題:

20:0:のbluez / btmodule.cからインクルードファイル内のbluez / btmode.h:5:33:致命的なエラー:ブルートゥース/ bluetooth.h:そのようなファイルまたはディレクトリの#include <ブルートゥース/ bluetooth.h>

    この問題を解決するために:libbluetooth-devのをインストールします。

$須藤はapt-getをインストールlibbluetooth-devの

三、PyBluezテスト(達成するためにPyBluez自身の例を参照してください):

  1、クエリのデバイスリスト:

輸入bluetoothnearby_devices = bluetooth.discover_devices(lookup_names = 真)のためのaddr、名前nearby_devices:     印刷"   %sの- %sの"%(ADDR、名前))

  2、クエリデバイスサービス:

輸入bluetoothnearby_devices = bluetooth.discover_devices(lookup_names = 真)のためのaddr、名前nearby_devices:     印刷"   %sの- %sの"(ADDR、名前))サービス = bluetooth.find_service(アドレス= ADDR)     のための SVC でのサービス:         印刷" サービス名:%sの"     %のSVC [ " 名前" ])         印刷"     ホスト:%sの"%のSVC [ " ホスト"])        印刷"     説明:%S "%のSVC [ " 説明" ])         印刷"     によって提供されています:%S "%のSVC [ " プロバイダ" ])         プリント"     プロトコル:%S "%のSVC [ " プロトコル" ] )         プリント"     チャネル/ PSM:%S "%のSVC [ " ポート" ])         プリント    SVCクラス:%sの"%のSVC [ " サービスクラス" ])         印刷"     プロファイル:%S "%のSVC [ " プロファイル" ])         プリント"     サービスID:%S "%のSVC [ " サービスID " ])         印刷"" 

  3、RFCOMM:

    Bluetoothのシリアルポートサーバー:

輸入ブルートゥース場合 __name__ == " __main__ " 印刷" 近くのデバイスを探してい... " )nearby_devices = bluetooth.discover_devices(lookup_names = 真)     のためのaddr、名前nearby_devices:         印刷" %S%S "(ADDR 、名前))server_sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)server_sock.bind(("" 、bluetooth.PORT_ANY))server_sock.listen( 1 )ポート = server_sock.getsockname()[1] UUID = " 00001101-0000-1000-8000-00805f9b34fb "     bluetooth.advertise_service(server_sock、" SampleServerの"、のservice_id = UUID)         プリント" RFCOMMチャネル%Dの接続を待っている"%のポート)client_sock、CLIENT_INFO = server_sock.accept ()     印刷(CLIENT_INFO)         してみてくださいしばらく真:データ = client_sock.recv(1024 場合でlen(データ)== 0:                 ブレーク            プリント"[%s]を受け取った"%のデータ)     を除き、例外IOError:         パス        client_sock.close()server_sock.close()     印刷" このテストが行われています!

    :問題(参照rfcomm-server.py advertise_service方法6パラメータを与えられる)セグメンテーションフォルト

    問題を解決するには:まず、エラーの原因を理解する - メモリアクセス違反を、いくつかのバグがありますPyBluezパッケージのbluezを示す;そして、エラー位置を測位:advertise_serviceを、このビュー後PyBluezソース--bluetoothフォルダbluez.pyファイルadvertise_service実装は、このメソッドが正常に実行過剰なパラメータ、を除去した後、することができ最初の3つのパラメータの最低限を要することがわかりました。

    問題を要約したものです。このバグは、余分なパラメータは通常追加/一般的なテストプロセスでは通常、めったに、必要なパラメータのために拡張しない処理/補助パラメータを犠牲にし、プロセスの早い段階で実現し、非常に典型的な状況を表示されますこの問題を検出することができパラメータ、したがって、実用的なアプリケーションでは、冗長なパラメータを減らすバグ非常に実用的な方法の周りにあります。

 

  最後に、BluetoothのシリアルポートサーバーのシリアルポートBluetoothのアプリケーション、情報伝達の確実な実施を経由して携帯電話を接続してください。(^_^)


---------------------
著者:xjEzekiel
出典:CNBLOGS
オリジナルます。https://www.cnblogs.com/Ezekiel/p/8547817.html
免責事項:この記事作者オリジナルの記事は、再現し、ボーエンのリンクを添付してください!

おすすめ

転載: www.cnblogs.com/vilogy/p/12511878.html