Linux에서 블루투스 직렬 포트에 데이터를 연결하고 전송하는 방법은 무엇입니까?

Linux에서 USB-Bluetooth 어댑터를 통해 가상 직렬 포트를 설정하고 Android 기기를 통해 여기에 메시지를 보내려고합니다. 커널 3.6. gnome-bluetooth를 사용하여 장치에 성공적으로 페어링 할 수 있으며 파일을 보낼 수도 있습니다.

직렬 포트를 설정하려면 먼저 SP 프로필이있는 채널을 어댑터에 추가합니다.

sdptool add --channel=22 SP 

그런 다음 rfcomm으로 “listen”을 호출합니다.

rfcomm listen /dev/rfcomm0 22 

어떤 차단을

Waiting for connection on channel 22 

분명히 rfcomm은 성공적으로 연결되면 / dev / rfcomm0을 생성합니다.이 경우 cutecom과 같은 것을 사용하여 메시지를주고 받고 싶습니다. 연결된 장치에 연결합니다.

내 Android 장치에서 Bluetooth SPP 터미널을 열고 (여러 개가 있고 몇 가지 다른 것을 시도했습니다) 연결을 시도합니다. 그들은 모두 실패합니다.

성공적으로 페어링하고 문제없이 파일을 보낼 수 있다는 점을 감안할 때 블루투스 페어링 및 통신이 작동한다는 것을 알고 있습니다.

다른 작업을 시도 할 수 있을지 잘 모르겠습니다. 내 로컬 기기와 Android 기기에서 “sdptool browse”를 통해 RFCOMM 채널 충돌이 없는지 확인하세요.

댓글

답변

지금이 작업을 수행 한 것 같습니다. 블루투스는 약간 까다로운 것 같습니다. 다른 사람이 유용하다고 생각할 경우를 대비하여 내 단계를 모두 요약하고 있습니다 (초기에 시도한 내용은 거의 다했지만). 이것은 Nexus 4 및 Arch Linux 3.6.7-1의 Android JB (4.2.2) 용입니다. Gnome 3.6 (gnome-bluetooth 포함)의 bluez 4.101.

(이 단계는 유용하지 않을 수 있음) Android에서 Bluetooth를 끄고 USB / Bluetooth 어댑터를 연결 해제합니다. Linux 시스템 (또는 내장 된 시스템이있는 경우 hcitool devname reset을 사용하여 재설정)

Linux에서 블루투스 어댑터를 연결 / 켜기. 어댑터가 보이는지 확인합니다 (gnome-bluetooth에서 설정할 수 있음- -블루투스 시스템 트레이 아이콘이 표시됩니다.

Android 기기에서 블루투스를 켜세요. Android를 사용하여 어댑터에 페어링하세요 (Linux에서 다른 방법으로 페어링 할 수 없음). 대화 상자가 표시됩니다. 키를 요청합니다. 원하는 PIN을 입력하세요. Gnome은 키를 요청하는 알림을 표시해야합니다. 이전에 입력 한 것과 동일한 PIN을 입력하세요. Android 기기와 키는이 시점에서 페어링되어야합니다.

Linux에서 터미널을 열고 입력하여 사용할 수있는 블루투스 서비스를 확인합니다.

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을 열고 다음으로 이동하십시오. options> 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 

댓글

답변

다음 단계는 저에게 효과적이었습니다.

먼저 장치를 페어링해야합니다. 페어링은 비교적 쉽습니다. 나는 클라이언트 (말하기 시작하는 사람)와 서버 (응답하는 사람)에게 전화 할 것입니다.

이전에 서버를 설정해야합니다. 서버 측 (루트 권한) :

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

클라이언트 측 (루트) :

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

이제 클라이언트에서 직렬 터미널을 엽니 다.

screen /dev/rfcomm0 115200 

설명 :

클라이언트에서 마지막 명령 rfcomm connect …를 호출하면 장치 /dev/rfcomm0가 생성되어 서버 /dev/recomm0에 연결됩니다. 이것은 둘 사이의 직렬 링크를 나타냅니다.

마지막 서버 명령 : rfcomm watch ….은 들어오는 연결을 “수신”합니다. 연결이 끊어지면 명령이 새로운 “듣기”상태를 다시 시작합니다.

댓글

  • 이스 마이 아가 제공 한 답변이 거의 도착합니다.최신 bluez 스택에는 특별한 --compat 옵션이 필요하지만 그렇지 않으면 SP 추가가 실패 할 수 있음을 기억해야합니다. 여기 를 참조하세요. 따라서 --compat가 있도록 systemd / initd 시작 스크립트를 조정 / 수정하십시오.

답변

Pris의 명령을 약간 변경하여이 문제를 해결했습니다. rfcomm 연결 설정에 여전히 문제가있는 사람이 있으면 시도해보세요.

sudo service bluetooth restart 

이 ^는 연결을 설정하려고 할 때마다 깨끗한 상태로 시작하도록합니다.

rfcomm add --channel=<a_channel_#> SP 

이 채널 번호는 현재 할당 된 채널과 다릅니다.

(선택 사항) 채널을 확인하려면 :

sdptool browse local | grep Channel 

다음 명령이 왜 실행되는지 잘 모르겠습니다. 필요했지만 효과가있었습니다.

rfcomm release 0 

그런 다음 들어오는 연결을 수신합니다.

rfcomm watch 0 <a_channel_#> 

참고 : /etc/bluetooth/rfcomm.conf의 bt MAC 주소는 휴대 전화의 bt MAC입니다. 또한이 파일의 채널은 a_channel_ #에 대해 선택한 채널과 동일해야합니다.

이 모든 작업을 수행하면 da bt terminal emulator on my phone to check it all.

Answer

다른 블루투스 도구를 사용해 보았지만 힘들었습니다. 블루투스 모듈을 연결하고 데이터를 교환하기위한 올바른 명령 순서를 찾습니다. 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."; } 

블루투스 장치 검색 :

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

rfcomm을 사용하여 바인딩

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

주의 : 바인딩 0은 장치 번호 0을 나타냅니다 (rfcomm0 ) 및 1은 채널입니다.

그런 다음 sudo와 함께 minicom을 사용하고 전송 속도와 포트를 지정하는 구성을 저장하십시오. 자세한 정보는 여기 에서 찾을 수 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다