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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

2回答

584閲覧

RSSI IF文でエラー再発

DMC

総合スコア18

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2020/02/04 14:56

編集2020/02/06 13:34

以前hcitool conとhcitool rssiを含めたIF分岐コードでエラーが発生し皆様からアドバイスをいただき解決に至った者です。

その際はbluetooth接続切(if文trueでない)状態でなぜかelseに飛んでくれなくてsleepを入れたらエラーが消えました。

やりたい事はiphonを持った状態で車に近づいたらLEDを点灯(OFFタイマー付)させることなのですがraspberry pi zero whを車に載せて離れたら
<Read RSSI failed: Input/output error>
が出てしまいます。

実は他にもエラーが出ており
try except:passを使って無視してますがRSSIのエラーだけは無視できません。
何か良い例外処理方法がありますでしょうか?

よろしくお願いします。

以下、コードです。

#coding: utf-8 import subprocess import csv import datetime import re import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(23,GPIO.OUT) from time import sleep record_file_name = 'blt_detect.csv' bltcount = 0 try: while True: record_datetime = datetime.datetime.now() record_time = record_datetime.strftime('%Y%m%d-%X') sleep(5) cmd = 'hcitool con' res = subprocess.check_output(cmd.split()) print(res) bd = 'B4:8B:11:11:11:11' if(bd in res.decode()): cmd = 'hcitool rssi B4:8B:11:11:11:11' res = subprocess.check_output(cmd.split()) print(res) res = res.decode() m = re.search( r'([+-]?\d+)', res) if m: n = int(m.group(1)) print(n) if n >= -10: bltcount += 1 if(bltcount <= 10): print('LED on') GPIO.output(23, GPIO.LOW) else: print('LED off') GPIO.output(23, GPIO.HIGH) else: bltcount = 0 GPIO.output(23, GPIO.HIGH) else: pass else: p1 = subprocess.Popen(["echo","connect",bd], stdout=subprocess.PIPE) p2 = subprocess.Popen(["bluetoothctl"], stdin=p1.stdout, stdout=subprocess.PIPE) p1.stdout.close() outs,errs = p2.communicate() print('Attempt to connect...') bltcount = 0 GPIO.output(23, GPIO.HIGH) except: pass

エラー

b'Connections:\n\t< ACL B4:8B:11:11:11:11 handle 0 state 5 lm MASTER \n' Read RSSI failed: Input/output error

hcitool conで指定アドレスの接続は認識できるがRSSIが読み取れない微妙なラズパイとiPhoneの位置関係の時にこのエラーが発生していると思いますので是非passしたいのです。

ご教授よろしくお願いします。

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

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

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

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

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

guest

回答2

0

まえに追記依頼で書きましたけど、

なぜtrue(Bluetooth接続)でないのに

trueでないことをどのように「確認したか」を追記してください。(trueでない「はず」ではダメです)

デバッグにおいては「思い込み」は大敵です。

Python

1 res = subprocess.check_output(cmd.split()) #A 2 3 if(bd in res.decode()): 4 5 res = subprocess.check_output(cmd.split())#B

Aの時点で繋がっていたということが、なんでBの時点でも繋がっているという保証になるのでしょう? ほんのちょっとの間だから「大丈夫なはず」? そういい切れるのですか?

現物持っていないので実験は出来ないのですが、IOErrorになるのはhcitoolを連続して呼び出しているせい(リソースの開放が間に合わないとか?)ということは考えられないでしょうか。だとすれば、AとBとの間にも適宜間を置くべきなのかも知れません(そうすると一層Aで繋がっていたからといってBで繋がっているかどうかがあやしくなりますが)。

投稿2020/02/08 04:34

thkana

総合スコア7610

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

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

0

ベストアンサー

コマンドがエラー終了したので例外でてるって話なので、
エラーチェックを切る、か、例外をtryで捕捉してしまえばいいんでは

投稿2020/02/04 15:20

y_waiwai

総合スコア87719

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

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

DMC

2020/02/04 21:26

ご回答ありがとうございます。 素人質問で恐縮ですがこの場合tryで現在except KeyboardInterrupt:としてますが追加でexcept Read RSSI failed:で良いのでしょうか? よろしくお願いします。
y_waiwai

2020/02/04 23:15

subprocess.CalledProcessError でどうでしょう
DMC

2020/02/05 08:50

ご回答ありがとうございます。 お陰様でエラーは減ったのですが Read RSSI Failed: Input/output errorだけが残りプログラムが停止してしまいます。 except Input/output error except Read RSSI failed: Input/output error 等々、いろいろ試したのですが構文エラーでプログラム起動すらしません。 申し訳ございませんが再度アドバイス頂けますでしょか? よろしくお願いします。
DMC

2020/02/08 07:04

いろいろご教授ありがとうございました。 while trueとtryの位置関係を入れ替えたら思い通りに動く様になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問