Отправка сообщений или данных через Bluetooth через Python - PullRequest
10 голосов
/ 20 сентября 2011

Как я могу отправлять сообщения через bluetooth через python без ключевой аутентификации, такой как номера типов?

Я использовал pybluez, но у меня появилась эта ошибка:

File "./send", line 12, in <module>
    connect()
File "./send", line 8, in connect
    sock.connect((bd_addr, port))
File "<string>", line 5, in connect
    bluetooth.btcommon.BluetoothError: (111, 'Connection refused')

Вот код

#!/usr/bin/python

import bluetooth

def connect ():
    bd_addr = "x:x:x:x:x:x"
    port = 1
    sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM)
    sock.connect((bd_addr, port))
    sock.send("hello!!")
    sock.close()

connect()

Ответы [ 3 ]

8 голосов
/ 10 апреля 2013

Как сказал @TJD, вам нужно убедиться, что вы привязываете правильный порт для нужной вам услуги.

>>> from bluetooth import *
>>> from pprint import pprint
>>>
>>> devices = discover_devices()
>>> devices
['xx:yy:tt:zz:44:BD', '00:yy:72:zz:bb:aa']

Затем в качестве второго шага попытайтесь найти службу на устройстве, к которому хотите подключиться.

>>> service = find_service(address='00:yy:72:zz:bb:aa')
>>> pprint(service)
[{'description': None,
  'host': '00:yy:72:zz:bb:aa',
  'name': 'Headset Audio Gateway',
  'port': 12,
  'profiles': [('1108', 258)],
  ...},
 {'description': None,
  'host': '00:yy:72:zz:bb:aa',
  'name': 'Dial-Up Networking',
  'port': 1,
  'profiles': [('1103', 256)],
  'protocol': 'RFCOMM',
  ...}]

На основании этой информации вы можете подключиться к службе, работающей на устройстве. В соответствии со спецификацией сервиса / профиля вы отправляете сервисные команды и получаете информацию с устройства. Например. в приведенном выше списке вы видите «Audio Gateway Headset» и список профилей с номером «1108», который является сокращенным UUID для услуги. Теперь вы можете искать команды для этого профиля, и он должен работать.

3 голосов
/ 19 марта 2013

У меня была такая же ошибка.После привязки адреса ошибка исчезла.

rfcomm bind 0 <address> 1

0 обозначает ваше устройство Bluetooth.1 относится к номеру порта.Если вы используете Linux, вы можете запустить hciconfig для номера устройства.

0 голосов
/ 20 сентября 2011

Вы пробовали начать с базового примера кода rfcomm-client и rfcomm-server от pybluez?

http://code.google.com/p/pybluez/source/browse/trunk/examples/simple/rfcomm-client.py

Это в основном то, что делает ваш код, но использует обнаружение службычтобы обеспечить подключение к соответствующему порту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...