Intereting Posts
Можно ли создать новый терминал, который является клоном текущего терминала? Общий объем использования памяти одним процессом Безопасное удаление файла в Рам Как удалить команду из завершения bash? Как разрешить пользователю создавать каталог, но не создавать вспомогательную директорию Место на диске полностью не изменяется после установки папки на другом диске Как перенаправить вывод в файл при создании tar в Solaris? Bash: собрать две серии файлов Считайте уникальные связанные значения в awk (или perl) Как удалить имя из фамилии, когда длина неизвестна? Запустите startx в фоновом режиме, не переключаясь на новый виртуальный терминал AWK – как получить содержимое файла, указанное первым столбцом файла Как добавить репозиторий и установить TMSU в Debian 9? Как добавить собственные демоны в Arch Linux? (Инициализация стиля BSD) Как отключить бесполезные записи журнала аудита в dmesg

Как подключить и отправить данные на последовательный порт bluetooth в Linux?

Я пытаюсь настроить виртуальный последовательный порт через USB-Bluetooth-адаптер на Linux и отправить ему сообщение через устройство Android. Я на ядре 3.6. Я могу успешно подключиться к устройству с помощью gnome-bluetooth, а также отправлять файлы на него.

Чтобы настроить последовательный порт, я сначала добавляю канал с профилем SP к моему адаптеру:

sdptool add --channel=22 SP 

Затем я вызываю «слушать» с помощью rfcomm:

 rfcomm listen /dev/rfcomm0 22 

который блокирует

 Waiting for connection on channel 22 

Очевидно, что rfcomm создаст / dev / rfcomm0 при успешном соединении. Как только это произойдет, я хотел бы использовать что-то вроде cutecom для отправки сообщений туда и обратно на подключенное устройство.

На моем устройстве Android я открываю терминал Bluetooth SPP (там несколько, я пробовал несколько разных) и пытаюсь подключиться. Все они терпят неудачу.

Учитывая, что я могу успешно спариваться и отправлять файлы без каких-либо проблем, я знаю, что bluetooth-соединение и связь работают.

Я не слишком уверен, что еще я могу попробовать. Я использовал 'sdptool browse' на своем локальном устройстве и устройстве Android, чтобы гарантировать отсутствие конфликтов канала RFCOMM.

Кажется, я сейчас работаю. Bluetooth кажется немного утонченным. Я полностью повторяю свои шаги в случае, если кто-то найдет это полезным (хотя в основном это то, что я пытался вначале). Это для Android JB (4.2.2) на Nexus 4 и Arch Linux 3.6.7-1, с bluez 4.101 на Gnome 3.6 (с gnome-bluetooth).

(этот шаг может не принести ничего полезного) Отключите Bluetooth на Android и отсоедините USB / Bluetooth-адаптер от вашего компьютера Linux (или если у вас есть встроенный, сбросьте его с помощью hcitool devname reset)

Подключите / включите адаптер Bluetooth в Linux. Убедитесь, что ваш адаптер виден (может быть установлен в gnome-bluetooth – вы должны увидеть значок в системном трее bluetooth).

Включите bluetooth на Android-устройстве. Используйте Android для подключения к адаптеру (мне не удалось установить соединение с Linux). Появится диалоговое окно с запросом ключа. Вставьте любой PIN-код, который вы хотите. Gnome должен выставить уведомление с запросом ключа; введите тот же PIN-код, который вы ввели ранее. В этот момент ваше Android-устройство и ключ должны быть сопряжены.

В Linux откройте терминал и проверьте, какие услуги Bluetooth доступны, набрав

 sdptool browse local 

Если у вас уже есть служба последовательного порта, обратите внимание на канал. Если вы этого не сделаете, вы можете добавить услугу:

 sdptool add --channel=22 SP 

Теперь послушайте этот канал, используя rfcomm:

 sudo rfcomm listen /dev/rfcomm0 22 

rfcomm блокирует, слушая соединение с сообщением вроде

 Waiting for connection on channel 22 

Вернувшись на Android, я использовал приложение BlueTerm ( http://pymasde.es/blueterm/ , также свободно доступное в магазине Google Play), хотя любое подобное приложение должно работать. Откройте BlueTerm, перейдите к опциям> Connect Device: выберите сопряженный адаптер.

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

 Waiting for connection on channel 22 Connection from 22:22:22:22:22:22 to /dev/rfcomm0 Press CTRL-C for hangup 

Все, что вы вводите в приложение BlueTerm, должно идти в / dev / rfcomm0. Вы можете видеть, как все появляется, когда вы печатаете, открывая новый терминал и делая что-то вроде:

 cat /dev/rfcomm0 

Шаги для меня работали:

Во-первых, вам нужно соединить устройства. Сопряжение относительно легко. Я позвоню клиенту (который начинает говорить) и серверу (который отвечает)

Вы должны настроить сервер до: Server side (от root):

 sdptool add --channel=3 SP mknod -m 666 /dev/rfcomm0 c 216 0 rfcomm watch /dev/rfcomm0 3 /sbin/agetty rfcomm0 115200 linux 

Сторона клиента (с правами root):

 sdptool add --channel=3 SP rfcomm connect /dev/rfcomm0 [SERVER_ADDR] 3 

Теперь, чтобы открыть последовательный терминал на клиенте:

 screen /dev/rfcomm0 115200 

Комментарии:

Когда вы вызываете последнюю команду rfcomm connect … в клиенте, устройство /dev/rfcomm0 будет создано и связано с сервером /dev/recomm0 . Это представляет собой последовательную связь между обоими

Последняя команда сервера: rfcomm watch …. будет «прослушивать» входящие соединения. При утерянной связи команда перезапустит новое состояние «прослушивания».

Я решил это с небольшим изменением командам Приса. Дайте эти снимки, если у кого-то все еще возникают проблемы с настройкой соединения rfcomm.

 sudo service bluetooth restart 

Это гарантирует, что вы начинаете с чистого листа каждый раз, когда пытаетесь установить соединение.

 rfcomm add --channel=<a_channel_#> SP 

Этот номер канала должен отличаться от любого назначенного канала.

(ДОПОЛНИТЕЛЬНО) Для проверки каналов:

 sdptool browse local | grep Channel 

Я не уверен, зачем нужна следующая команда, но это сработало для меня.

 rfcomm release 0 

Затем, чтобы прослушать входящие соединения:

 rfcomm watch 0 <a_channel_#> 

ПРИМЕЧАНИЕ. MAC-адрес bt в файле /etc/bluetooth/rfcomm.conf, но должен быть MAC вашего телефона. Также канал в этом файле должен быть таким же, как тот, который выбран для a_channel_ #.

Как только я сделал все это, я использовал эмулятор терминала bt на своем телефоне, чтобы проверить все это.

Я пробовал разные инструменты bluetooth, и было сложно найти правильную последовательность команд для подключения и обмена данными с модулем Bluetooth. Попробуйте использовать rfcomm и minicom:

Это мой /etc/bluetooth/rfcomm.conf

 rfcomm0 { # Automatically bind the device at startup bind no; # Bluetooth address of the device device 11:22:33:44:55:66; # RFCOMM channel for the connection channel 3; # Description of the connection comment "This is Device 1's serial port."; } 

Сканирование Bluetooth-устройств:

 hcitool scan Scanning ... 20:15:12:08:62:95 HC-06 

Привязать с помощью rfcomm

 sudo rfcomm bind 0 20:15:12:08:62:95 1 

NB: bind 0 относится к номеру устройства 0 (rfcomm0), а 1 – к каналу.

Затем используйте minicom с sudo и сохраните конфигурацию, в которой вы указываете скорость передачи и порт. Здесь вы можете найти более подробную информацию.

Надеюсь, поможет!