2015-11-11 2 views
2

У меня есть Bluetooth-совместимое устройство с удобным названием «Sensor1». Это устройство использует профиль SPP. Для того, чтобы задать устройство для запуска потоковой передачи данных через Bluetooth, я должен написать «10111011» на COM порт, соответствующий это устройство следующим образом:Имя устройства Bluetooth и соответствующее имя последовательного порта в python

ser = serial.Serial('COM5') 
ser.write('10111011')  

Проблема заключается в том, что я не знаю, какой из COM-порты соответствуют «Sensor1». Итак, я прочитал реестра Windows, чтобы получить имя устройства:

import _winreg as reg 
from itertools import count 

key = reg.OpenKey(reg.HKEY_LOCAL_MACHINE, 'HARDWARE\\DEVICEMAP\\SERIALCOMM') 
for i in count(): 
    device, port = reg.EnumValue(key, i)[:2] 
    print "Device name \"%s\" found at %s" % (device, port) 

Все, что я получаю:

Device name \Device\Serial0 found at COM3 
Device name \Device\BthModem16 found at COM4 
Device name \Device\BthModem17 found at COM5 

Как я могу получить имя устройства, как в:

service = bluetooth.find_service() 
print service["name"] 

ответ

0
import bluetooth 
decices = bluetooth.discover_devices() 

Использование следующей библиотеки: https://pypi.python.org/pypi/PyBluez/
Вот несколько хороших примеров использования: https://people.csail.mit.edu/albert/bluez-intro/c212.html

Если вы не заинтересованы в использовании дополнительной библиотеки, вы всегда можете попытаться извлечь функцию обнаружить связанную с Windows, найти здесь: https://github.com/karulis/pybluez/blob/2a22e61fb21c27b47898c2674662de65162b485f/bluetooth/widcomm.py#L109

+0

Ну, я уже используется библиотека Bluetooth. Тем не менее, в: 'service = bluetooth.find_service()', а затем 'port = service [" port "]', у меня есть 2, что не имеет никакого отношения к COM5 в моем примере. – QuestionMark

+0

@QuestionMark Правильно. Я посмотрел мимо двух линий, которые были глупыми. В настоящее время у меня нет устройств BlueTooth рядом с (на worK), но я предполагаю, что каждый объект в 'devices' будет иметь ключ, называемый' port'. вы используете 'find_service' вместо обнаружения, если я не ошибаюсь, что даст вам уже подключенное устройство и номер локального порта, используемый для доступа к этому устройству (для потоковой передачи данных). Вы ищете физический порт, который можно найти в 'discover_devices', но опять же, я не могу подтвердить свои предположения, так как у меня нет каких-либо устройств bluetooth. – Torxed

+0

Я думаю, что нет ключа 'port' для устройств в' discover_devices'. – QuestionMark