2011年3月12日土曜日

PyBluezをBT-MicroEDR2X・マイクロソフトスタックで使う

いつも使っているパソコン(acer AOD-150)はBluetooth内蔵でWidcommのスタックなので全然気付かなかった。

内蔵でない他のパソコンでBT-MicroEDR2XをUSBに差し込んで、自動でインストールされるマイクロソフトスタックで使うと、時々IOErrorの例外が発生していた。

当初はアダプタとの接続の問題かと思っていたが、Bluetoothデバイスが全く検出出来なかった時に例外が発生するようだ。

例外発生した時はnearby_devicesを空にして継続実行します。

# -*- coding: utf-8 -*-
# btscan2.py 2011.3.2

import bluetooth # PyBluez
import time
import datetime

old_devices = set()
while True:
    try:
        nearby_devices = bluetooth.discover_devices(lookup_names = True)
    except IOError, err:
        print err
        nearby_devices = []
    else:
        dt = datetime.datetime.now()
        dt_str = dt.strftime("%Y/%m/%d %H:%M:%S")
        new_devices = set(nearby_devices)
        for addr,name in new_devices-old_devices:
            print u"+ %s %s %s" % (dt_str, addr, name.decode('utf-8'))
        for addr,name in old_devices-new_devices:
            print u"- %s %s %s" % (dt_str, addr, name.decode('utf-8'))
        old_devices = new_devices.copy()
        time.sleep(30)

---


0 件のコメント: