質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

4760閲覧

Python Bluetooth デバイスの探索 hcitoolコマンドについて

raspypy

総合スコア247

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/02 05:47

編集2021/04/05 01:05

##やろうとそていること

アクティブなBluetoothデバイスを探索するプログラムを作成しています.

接続先デバイスのBluetoothをONにした状態で,次のコマンドを実行すると,
hcitool con
次の結果が表示されます.

text

1Connections: 2 < ACL xx:xx:xx:xx:xx:xx handle 12 state 1 lm MASTER AUTH ENCRYPT

続いて,接続先デバイスのBluetoothをOFFにした状態で,次のコマンドを実行すると,
hcitool con
次の結果が表示されます.当たり前ですが,デバイスは表示されません.

text

1Connections:

このコマンドを使用して,次のプログラムを作成しましたが,
接続先デバイスのBluetoothをOFFにした状態でも,接続先デバイスが表示されてしまいます,なぜでしょうか?
hcitool conコマンドの応答に,登録デバイス(bd)のアドレスが含まれていたら,10行目のLED点灯を行うようにしています.

このプログラムを実行したときの結果は,

text

1Connections: 2 < ACL xx:xx:xx:xx:xx:xx handle 0 state 5 lm MASTER

handle 0およびstate 5という結果が出ます.
アドレスが含まれているため,LEDが点灯してしまうのですが,handle 0 と state5というのはどういう意味なのでしょうか?

接続先デバイスのbluetoothがoffの状態のままなので,LEDは点灯しないはずなのですが,
点灯してしまうのは,なぜでしょうか?

python

1 while True: 2 cmd = 'hcitool con' 3 res = subprocess.check_output(cmd.split()) 4 print(res.decode()) 5 bd = 'xx:xx:xx:xx:xx:xx' 6 7 if(bd in res.decode()): 8 bltcount += 1 9 #LED点灯 10 GPIO.setup(4, GPIO.OUT) 11 if(bltcount == 5): 12 print(record_time + '\n'+ bd) 13 bltcount = 0 14 else: 15 pass 16 17 else: 18 p1 = subprocess.Popen(["echo","connect",bd], stdout=subprocess.PIPE) 19 p2 = subprocess.Popen(["bluetoothctl"], stdin=p1.stdout, stdout=subprocess.PIPE) 20 p1.stdout.close() 21 outs,errs = p2.communicate() 22 bltcount = 0 23 time.sleep(5)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2021/04/02 06:51

問題は何ですか? - BTをOFFにしても hcitool conの結果にデバイスが現れる? print(res.decode()) の結果に含まれている - hcitool con の結果にデバイスが無いのに、LEDが店頭する? print(res.decode()) の結果デバイスが無い
raspypy

2021/04/02 07:28

コメントありがとうございます。 BTをOFFにしているのに,なぜLEDが点灯してしまうのかが理解できなくて困っています. hcitool conを実行すると,確かにデバイスは表示されないのですが, なぜ点灯するのかが分からないため,教えていただけると助かります
TakaiY

2021/04/02 08:11

プログラム実行時の、 print(res.decode()) の出力結果に、「Connections:」だけが含まれていて、デバイスが検出された文字列が無いってことですね?
raspypy

2021/04/02 11:06

① hcitool conコマンドを実行すると,デバイスが検出された文字列はないのですが、 ②プログラムを実行すると、print(res.decode()) の出力結果にデバイスが表示されます。 デバイスはoffにしているので、②のプログラム実行時もデバイスが表示されないはずなのですが、表示される理由が分かりません。
TakaiY

2021/04/02 13:01

なるほど。 であれば、LEDが付くのが問題というより、subprocessでhcitool conを動かしたときに、デバイスが表示されてしまうことが問題だということなので、質問の内容をそのように変更したほうがアドバイスもらいやすいと思います。 残念ながら、僕にはそこはちょっとわかりません。
guest

回答2

0

自己解決

handle 0を検出するようにしました.

投稿2021/04/05 05:22

raspypy

総合スコア247

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

接続先デバイスのBluetoothをOFFにした状態でも,接続先デバイスが表示されてしまいます,なぜでしょうか?

hcitoolは使ったことがないですが、つまるところスキャン結果を出すときに「キャッシュを読みだしているから古い結果を出されて困っている」ように見えてきました。

hcitool scan --flush
をしてから一連の操作をしてはいかがでしょうか?

投稿2021/04/03 03:26

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2021/04/04 23:46

回答ありがとうございます。 hcitool scan --flush コマンドを実行した後試してみましたが,状況は変わりませんでした. 接続先デバイスはOFFにした状態なのですが,どうすれば古い結果をリセットできるのでしょうか.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問