Я пытаюсь создать двунаправленный беспроводной поток данных по Bluetooth между двумя устройствами, Raspberry Pi (без головы) и рабочей станцией Linux.
Я добился успеха, выполнив следующие шаги:
1) На стороне Pi я создал и активировал службу с именем rfcomm0.service:
[Unit]
Description=RFCOMM0 service
After=bluetooth.service
Requires=bluetooth.service
[Service]
ExecStart=/usr/bin/rfcomm watch hci0 22 setsid getty rfcomm0 115200 vt100 -a pi
[Install]
WantedBy=multi-user.target
2) На настольном компьютере Linux (клиент) я подключаюсь с помощью команд rfcomm в терминале:
sudo rfcomm -i hci0 bind /dev/rfcomm0 PI:AD:DR:ES:S1:11 22
sudo rfcomm connect /dev/rfcomm0 PI:AD:DR:ES:S1:11 22
, что приведет меня на страницу входа getty
, где я могу войти Пи. Это была хорошая отправная точка, но я тогда хотел
- Устранить необходимость входа
- Чтение и запись напрямую из последовательного порта
Для этого для этого я просто удалил команду getty
со стороны моего сервера (поэтому rfcomm
должен наблюдать за соединениями, но ему нечего выполнять, когда он их находит) и вместо этого использовал stty
на стороне клиента для настройки порта:
stty -F /dev/rfcomm0 raw 115200
Теперь я могу все еще успешно подключиться, но только за несколько секунд до того, как сторона сервера прервет соединение, вот последний бит моего btmon
вывода (сторона сервера):
> HCI Event: Number of Completed Packets (0x13) plen 5 [hci0] 2391.844059
Num handles: 1
Handle: 12
Count: 1
> HCI Event: Disconnect Complete (0x05) plen 4 [hci0] 2391.845053
Status: Success (0x00)
Handle: 12
Reason: Remote User Terminated Connection (0x13)
* Unknown packet (code 17 len 14) [hci0] 2391.845118
02 00 00 00 0c 00 f8 ee 04 eb 27 b8 00 03 ..........'...
* Unknown packet (code 17 len 14) [hci0] 2391.845118
01 00 00 00 0c 00 f8 ee 04 eb 27 b8 00 03 ..........'...
@ Device Disconnected: B8:27:EB:04:EE:F8 (0) reason 3
Есть ли какой-то этап инициализации, который getty
и аналогичные программы (мне также удалось использовать minicom
и screen
) выполняют, что мне не хватает? Нужно ли как-то немедленно получить доступ к последовательному соединению, чтобы оно не закрывалось, как это? Если да, то какую команду можно использовать для немедленного открытия порта и перенаправления ввода в ExecStart
, который не позволит завершить процесс?
Любая помощь приветствуется, спасибо заранее!