Вот мой способ подключения к Bluetooth-устройству HC-05, подключенному к моему arduino. Не нужно писать файл, как в ответе Брайана, но идея похожа. Я протестировал его с настройкой скорости 9600 бод на устройстве HC-05.
Первый шаг: подключите устройство и введите PIN-код
Я попытался настроить сопряжение, используя GUI, но оно не работало. Вот способ командной строки, который работал для меня. Во-первых, давайте подключим устройство из командной строки. Пробег :
sudo bluetoothctl
Убедитесь, что устройство Bluetooth запущено:
# power on
Теперь мы запустим агент, который будет «помнить булавку» для rfcomm
:
# agent on
Теперь мы включаем режим сканирования, чтобы найти наше устройство и иметь возможность его сопряжения:
# scan on
Через несколько секунд должен появиться MAC-адрес вашего устройства. Мы будем обозначать это как после. Затем вам просто нужно выполнить сопряжение устройства следующим образом:
# pair <MAC>
Вам будет предложено ввести PIN-код, по умолчанию он 1234
на моем устройстве HC-05. Вы можете заметить, что ваше устройство может подключиться, а затем отключиться с помощью такого сообщения:
[CHG] Device 20:16:10:24:29:77 UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[CHG] Device 20:16:10:24:29:77 ServicesResolved: yes
[CHG] Device 20:16:10:24:29:77 Paired: yes
Pairing successful
[CHG] Device 20:16:10:24:29:77 ServicesResolved: no
[CHG] Device 20:16:10:24:29:77 Connected: no
но это не проблема. Вам не нужно подключаться, поэтому вы можете выйти bluetoothctl
, набрав Ctrl + D
.
Предоставить полезный файл /dev/rfcomm0
Во-первых, убедитесь, что вы ранее не выполняли команду rfcomm. Действительно, даже если вы закроете Ctrl+C
программу, она все равно будет работать в фоновом режиме.
sudo killall rfcomm
Теперь вы можете запустить
sudo rfcomm connect /dev/rfcomm0 20:16:10:24:29:77 1 &
Обратите внимание, что если вы попытаетесь написать на входе rfcom, ничего не произойдет. Вам нужно использовать другую программу.
Третий и последний шаг: напишите в /dev/rfcomm0
Есть несколько способов записи в файл, но обратите внимание, что для продолжения необходимо использовать root. Я опишу здесь несколько программ, которые могут это сделать (так что вы можете выбрать в зависимости от ваших потребностей или от того, что установлено в вашей системе, например). Если вы забудете запустить программу от имени пользователя root, у вас может быть ошибка:
stty: /dev/rfcomm0: Device or resource busy
Первый вариант: подключиться с помощью screen
Экран очень мощный инструмент. Вы можете установить его (это всегда полезно), используя:
sudo apt-get install screen
а потом беги
sudo screen /dev/rfcomm0
Если вы забудете запустить его как root, вы получите сообщение об ошибке, похожее на то, что получил Александр:
[screen is terminating]
Чтобы выйти, введите «(CTRL + A) +: quit»
Второй вариант: подключиться с помощью minicom
Установить его
sudo apt-get install minicom
а потом беги
sudo minicom -D /dev/rfcomm0
Если вы забудете запустить его как root, у вас будет ошибка, такая как
minicom: cannot open /dev/rfcomm0: Device or resource busy
Чтобы выйти, введите «Ctrl + A X».
Третий вариант: скрипт Python miniterm
Скачайте этот скрипт и запустите:
chmod +x miniterm.py
sudo ./miniterm.py /dev/rfcomm0
Пишите прямо в файл
Сначала выполните следующую команду (9600 - скорость передачи данных):
sudo stty -F /dev/rfcomm0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts
Теперь вы можете написать в этом файле, как в классическом файле:
sudo su -c "echo 'message' > /dev/rfcomm0"
и в теории читать из него с помощью
sudo tail -f /dev/rfcomm0
Но я не знаю, что чтение не работает, если у кого-то из вас есть идея ...