Запуск функций по запросу пары Bluetooth - PullRequest
0 голосов
/ 24 января 2020

Недавно я изучал электрическую c схему с использованием arduino и собираюсь внести некоторые изменения в мое приложение Raspberry Pi.

Я использовал это устаревшее руководство несколько лет go для создания своего Пи Bluetooth приемник, который работает хорошо в данный момент (https://www.instructables.com/id/Turn-your-Raspberry-Pi-into-a-Portable-Bluetooth-A/), но один недостаток этого устаревшего учебника заключается в том, что Bluetooth-соединения должны приниматься через экран (который отключен, потому что Bluetooth-динамики не есть экраны).

Мой план: используйте кнопку, чтобы принимать соединения Bluetooth, и используйте мигающий зеленый светодиод, чтобы указать запрос на подключение.

Как создать скрипт что «слушает» запросы на соединение Bluetooth и запускает код python соответственно при его прослушивании? При этом, как я могу подключиться к Bluetooth для приема запроса на пару?

Я не слишком знаком с размещением скриптов Raspberry Pi, но знаком с Python и знаю, как я могу подключиться к GPIO.

Спасибо :)

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

То, что вы ищете, называется агентом Bluetooth. Вам необходимо использовать официальный linux стек протоколов Bluetooth BlueZ . Есть документация с описанием Агента API ссылка . Он использует DBus для общения. Вам необходимо выполнить следующие шаги:

  1. Создать агент Bluetooth, написанный на python, и опубликовать его sh по определенному пути объекта DBus. Ваш агент должен реализовать интерфейс org.bluez.Agent1, как описано в разделе Агент API, выполните команду c.
  2. . Затем необходимо зарегистрировать этого агента, вызвав метод RegisterAgent из API агента. Здесь вы укажете путь DBus, в котором расположен ваш агент, а также предоставите возможность в вашем случае "DisplayYesNo" (индикатор в качестве дисплея для запроса на сопряжение и кнопка с некоторым таймаутом для реализации Да / Нет ).
  3. Также зарегистрируйте своего агента в качестве агента по умолчанию, позвонив по номеру RequestDefaultAgent

  4. Теперь, если вы попытаетесь выполнить сопряжение с вашим устройством, будет вызвана соответствующая функция в вашем агенте (я думаю, что для вашего случая использования это будет RequestAuthorization ). Если вы хотите принять сопряжение, вы просто вернетесь из этой функции, если вы хотите отклонить сопряжение, вы должны выбросить ошибку DBus внутри этой функции.

В качестве отправной точки для вас я бы посоветовал вам взглянуть на этого простого python агента: https://github.com/pauloborges/bluez/blob/master/test/simple-agent It реализует все необходимые функции, поэтому просто обновите его в соответствии с вашими потребностями.

Получайте удовольствие:)

1 голос
/ 27 января 2020

Вы пытались использовать эту Python библиотеку ? В нем указана поддержка Raspberry Pi

Кроме того, приведена некоторая информация о прослушивании входящих подключений Bluetooth:

Программирование Bluetooth в Python соответствует модели программирования сокетов. Эта концепция должна быть знакома почти всем сетевым программистам и значительно упрощает переход от программирования Inte rnet к программированию Bluetooth. В примерах 3-2 и 3-3 показано, как установить sh соединение с использованием гнезда RFCOMM, передать некоторые данные и отключиться.

import bluetooth

server_sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )

port = 1
server_sock.bind(("",port))
server_sock.listen(1)

client_sock,address = server_sock.accept()
print "Accepted connection from ",address

data = client_sock.recv(1024)
print "received [%s]" % data

client_sock.close()
server_sock.close()

RFCOMM BluetoothSocket, используемый для принимать входящие соединения должны быть подключены к ресурсам операционной системы с помощью метода связывания bind принимает кортеж с указанием адреса используемого локального адаптера Bluetooth и номера порта для прослушивания. Обычно есть только один локальный адаптер Bluetooth или не имеет значения, какой использовать, поэтому пустая строка указывает, что любой локальный адаптер Bluetooth приемлем. Как только сокет связан, вызов для прослушивания переводит сокет в режим прослушивания, и затем он готов принимать входящие соединения.

...

Источник

...