以前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したいのです。
ご教授よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。