Код Python для Bluetooth выдает ошибку после сброса адаптера
Я пробовал Программирование bluetooth на python. До вчерашнего дня все шло нормально. Сегодня утром произошло отключение питания, и по какой-то причине модуль bluetooth отключился, и его нельзя было включить. Итак, я сделал sudo hciconfig hci0 reset
и затем включил его. С этого момента простейшие программы не выполняются. Взять этот например. Он застревает в advertise_service
на bluetooth
module и выдает следующую ошибку (FYI: virtualenv не был проблемой здесь. Общесистемный Python также делает то же самое).
Traceback (most recent call last):
File "bt.py", line 17, in <module>
advertise_service( server_sock, "SampleServer", service_id = uuid, service_classes = [ uuid, SERIAL_PORT_CLASS ], profiles = [ SERIAL_PORT_PROFILE ])
File "/home/machinename/.virtualenvs/py27/local/lib/python2.7/site-packages/bluetooth/bluez.py", line 242, in advertise_service
raise BluetoothError (str (e))
bluetooth.btcommon.BluetoothError: (2, 'No such file or directory')
иногда я получал другую ошибку при компиляции и переустановке Bluez
водитель:
Traceback (most recent call last):
File "build/bdist.linux-x86_64/egg/bluetooth/bluez.py", line 268, in advertise_service
bluetooth.btcommon.BluetoothError: error no advertisable device.
но все это работало как шарм раньше на этой машине; на самом деле вся программа отлично работает с моей другой машиной ubuntu (14.04 LTS), когда я пишу это. Я проверил исходный код и проследил до _bluetooth.so
file-это скомпилированный код, поэтому я больше не мог понять, что делать.
любой указатель будет высоко оценен.
3 ответов
эта ошибка вызвана проблемами несовместимости с BlueZ 5 и SDP с bluetoothd
исправить для 15.10 и BlueZ 5
убедитесь, что работает sdptool browse local
выдает следующую ошибку:
Failed to connect to SDP server on FF:FF:FF:00:00:00: No such file or directory
как выясняется, виновником является bluetoothd
, демон Bluetooth. Использование SDP с bluetoothd
требует устаревших функций по какой-то глупой причине, поэтому, чтобы исправить это, демон должен быть запущен в режиме совместимости с bluetoothd -C
(или bluetooth --compat
).
найти местоположение bluetooth.service
by:
systemctl status bluetooth.service
затем измените bluetooth.service
искать
ExecStart=/usr/libexec/bluetooth/bluetoothd
добавить --compat
в конце этой строки, сохраните, а затем запустите
service bluetooth start
если все пойдет хорошо, вы должны быть в состоянии успешно работать
sudo sdptool browse local
наконец, сбросьте адаптер:
sudo hciconfig -a hci0 reset
теперь все должно работать нормально
ответ
просто, чтобы люди знали, я верить последним BlueZ
сборка была каким-то образом нарушена в моей системе. Я загрузил, скомпилировал и установил 5.35 версия, и ничего не работает. Я набрал номер 5.34, все-таки одинаковые. Я также заметил, что адаптер bluetooth автоматически отключается через 3-4 минуты после его включения,
sudo hciconfig hci0 up # hci0 is the bt adapter
я использовал один USB-ключ bluetooth для тестирования. Он не пошел вниз автоматически, как встроенный адаптер, но проблемы упорствовавший. Тогда я использовал apt-get
переустановить bluez
,
apt-get install --reinstall bluez
опять же, как упомянул сидмайстер, Убедитесь, что запуск sdptool browse local дает следующую ошибку:
не удалось подключиться к серверу SDP на FF:FF:FF:00:00:00:
нет такого файла или каталога
но для тех, кто использует initd system manager, трудно найти решение, если вы хотите выполнить sdp_rfcomm_server/client
модель и терминал будут продолжать показывать одну и ту же ошибку снова и снова.
Так для init.d
выполните следующие действия:
-
остановить bluetooth первый
$ / etc / init.д/остановку Bluetooth
-
проверить статус
$ / etc / init.D / состояние bluetooth
-
запустите bluetooth в режиме совместимости (не забудьте амперсанд,иначе приглашение не появится )
$ / usr / libexec / bluetooth / bluetoothd --compat&
-
снова запустите bluetooth
$ / etc / init.D / bluetooth пуск
-
еще раз попробуйте sdpbrowse
$ sdptool просмотр локального
вещи должны работать для вас сейчас.
исправления:
bluetooth.btcommon.BluetoothError: (2, 'нет такого файла или каталога')
вам нужно:
sudo nano /lib/systemd/system/bluetooth.service
- изменить с:
ExecStart=/usr/lib/bluetooth/bluetoothd
- в:
ExecStart=/usr/lib/bluetooth/bluetoothd --compat
sudo systemctl daemon-reload