라즈파이와 BlueTooth로 통신 할 때까지의 이야기
6226 단어 RaspberryPi블루투스
1. 라즈파이와 페어링
1) 라즈파이의 Bluetooth를 ON
SSH에서 다음 명령을 두드려 페어링할 수 있는 상태로 한다.
sudo bluetoothctl
[bluetooth] power on
[bluetooth] discoverable on
[bluetooth] agent on
[bluetooth] default-agent
2) PC와 페어링
여기 Windows10. 액션 센터 → 연결을 선택하고 표시되는 라즈파이를 선택하여 페어링합니다.
페어링 완료 상태
2. SDP 서버 준비
통신 테스트는 직렬 통신으로 수행됩니다. 이를 위해 직렬 포트를 추가 한 상태에서 SDP 서버를 시작합니다.
서버 사용 가능 여부 확인
Raspberry Pi에서 SDP 서버를 사용할 수 있는지 확인합니다.
pi@rapi:~ $ sdptool browse local
Failed to connect to SDP server on FF:FF:FF:00:00:00: No such file or directory
위의 오류가 표시되면,
/etc/systemd/system/dbus-org.bluez.service 설정을 변경합니다.
변경 전
ExecStart=/usr/lib/bluetooth/bluetoothd
변경 후
ExecStart=/usr/lib/bluetooth/bluetoothd --compat
변경 후 bluetoothd를 다시 시작합니다.
pi@rapi:~ $ sudo systemctl daemon-reload
pi@rapi:~ $ sudo systemctl restart bluetooth
일단 bluetooth 서비스를 중지합니다.
pi@rapi:~ $ sudo systemctl stop bluetooth
bluetooth를 데몬으로 올린다.
pi@rapi:~ $ sudo bluetoothd -C &
SDP 서비스가 이용 가능하면 다음과 같은 응답이 돌아온다.
pi@rapi:~ $ sdptool browse local
Browsing FF:FF:FF:00:00:00 ...
Service RecHandle: 0x10000
Service Class ID List:
"PnP Information" (0x1200)
Profile Descriptor List:
"PnP Information" (0x1200)
Version: 0x0103
Browsing FF:FF:FF:00:00:00 ...
Service Search failed: Invalid argument
Service Name: Generic Access Profile
Service Provider: BlueZ
Service RecHandle: 0x10001
Service Class ID List:
"Generic Access" (0x1800)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 31
"ATT" (0x0007)
uint16: 0x0001
uint16: 0x0008
Service Name: Generic Attribute Profile
Service Provider: BlueZ
Service RecHandle: 0x10002
Service Class ID List:
"Generic Attribute" (0x1801)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 31
"ATT" (0x0007)
uint16: 0x0010
uint16: 0x0010
Service Name: AVRCP CT
Service RecHandle: 0x10003
Service Class ID List:
"AV Remote" (0x110e)
"AV Remote Controller" (0x110f)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 23
"AVCTP" (0x0017)
uint16: 0x0103
Profile Descriptor List:
"AV Remote" (0x110e)
Version: 0x0105
Service Name: AVRCP TG
Service RecHandle: 0x10004
Service Class ID List:
"AV Remote Target" (0x110c)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 23
"AVCTP" (0x0017)
uint16: 0x0103
Profile Descriptor List:
"AV Remote" (0x110e)
Version: 0x0104
어쩌면 Service Name: Serial Port라는 서비스가 없기 때문에 추가한다.
pi@rapi:~ $ sudo sdptool add --channel=22 SP
Serial Port service registered
다시 확인하면 Service Name: Serial Port가 추가되었다고 생각합니다.
pi@rapi:~ $ sdptool browse local
(省略)
Service Name: Serial Port
Service Description: COM Port
Service Provider: BlueZ
Service RecHandle: 0x10005
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 22
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Serial Port" (0x1101)
Version: 0x0100
백그라운드에서 실행하고 있던 bluetooth 데몬을 중지하고 bluetooth 서비스를 시작합니다.
같은 명령을 사용하여 SerialPort를 추가합니다.
3. 통신하자
1) RFCOMM 설정
다음 명령으로 rfcomm을 청취 상태로 만듭니다.
pi@rapi:~ $ sudo rfcomm listen /dev/rfcomm0 22
Waiting for connection on channel 22
이것으로 시리얼 통신의 청취 대기 상태가 된다. 시리얼 통신이 확립되면,/dev/rfcomm0 디바이스로 데이터 송수신을 할 수 있게 된다.
2) 시리얼 통신 접속
페어링한 Windows 7의 PC와 시리얼 통신해 본다.
Windows 측의 준비로서, 페어링한 상태로 이하를 연다.
제어판 > 하드웨어 및 사운드 > 장치 및 프린터
장치에서 페어링된 Raspberry Pi 장치의 속성을 엽니다.
서비스 탭의 시리얼 포트 (SPP) 'Serial Port'를 체크하면 가상 포트가 할당됩니다.
할당 된 포트 (여기서 COM5)는 때때로 변동한다.
Tera Term을 열고 "직렬"연결합니다. 포트는 상기의 「COM5」를 선택할 수 있으므로, 그것을 지정한다.
의 시점에서 Rasbperry Pi의 청취 상태였던 rfcomm에 Connection이라고 표시되어 정상적으로 접속할 수 있었던 것을 확인할 수 있다.
pi@rapi:~ $ sudo rfcomm listen /dev/rfcomm0 22
Waiting for connection on channel 22
Connection from28:C2:DD:XX:XX:XX to /dev/rfcomm0
Press CTRL-C for hangup
3) Windows PC에서 Raspberry Pi로 데이터 전송
Tera Term에서 적당히 문자열을 입력해 본다.
시리얼 통신은 한 문자씩의 송신이므로 특히 Enter라든지하지 않고도 메시지는 송신된다.
Raspberry Pi 측에서 메시지를 확인하기 위해/dev/rfcomm0을 cat한다.
pi@rapi:~ $ sudo cat /dev/rfcomm0
1234
Tera Term에서 입력한 문자가 출력됩니다.
4) Raspberry Pi에서 Windows PC로 데이터 전송
이번에는 Raspberry Pi에서/dev/rfcomm0 장치에 메시지를 echo 해보자.
pi@rapi:~ $ sudo echo abcd > /dev/rfcomm0
그러면 Tera Term 화면에 echo 된 문자열이 표시됩니다.
이상입니다! 다음은 스마트 폰과 블루투스로 통신하고 싶습니다.
Reference
이 문제에 관하여(라즈파이와 BlueTooth로 통신 할 때까지의 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/oko1977/items/9f53f3b11a1b033219ea
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
sudo bluetoothctl
[bluetooth] power on
[bluetooth] discoverable on
[bluetooth] agent on
[bluetooth] default-agent
통신 테스트는 직렬 통신으로 수행됩니다. 이를 위해 직렬 포트를 추가 한 상태에서 SDP 서버를 시작합니다.
서버 사용 가능 여부 확인
Raspberry Pi에서 SDP 서버를 사용할 수 있는지 확인합니다.
pi@rapi:~ $ sdptool browse local
Failed to connect to SDP server on FF:FF:FF:00:00:00: No such file or directory
위의 오류가 표시되면,
/etc/systemd/system/dbus-org.bluez.service 설정을 변경합니다.
변경 전
ExecStart=/usr/lib/bluetooth/bluetoothd
변경 후
ExecStart=/usr/lib/bluetooth/bluetoothd --compat
변경 후 bluetoothd를 다시 시작합니다.
pi@rapi:~ $ sudo systemctl daemon-reload
pi@rapi:~ $ sudo systemctl restart bluetooth
일단 bluetooth 서비스를 중지합니다.
pi@rapi:~ $ sudo systemctl stop bluetooth
bluetooth를 데몬으로 올린다.
pi@rapi:~ $ sudo bluetoothd -C &
SDP 서비스가 이용 가능하면 다음과 같은 응답이 돌아온다.
pi@rapi:~ $ sdptool browse local
Browsing FF:FF:FF:00:00:00 ...
Service RecHandle: 0x10000
Service Class ID List:
"PnP Information" (0x1200)
Profile Descriptor List:
"PnP Information" (0x1200)
Version: 0x0103
Browsing FF:FF:FF:00:00:00 ...
Service Search failed: Invalid argument
Service Name: Generic Access Profile
Service Provider: BlueZ
Service RecHandle: 0x10001
Service Class ID List:
"Generic Access" (0x1800)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 31
"ATT" (0x0007)
uint16: 0x0001
uint16: 0x0008
Service Name: Generic Attribute Profile
Service Provider: BlueZ
Service RecHandle: 0x10002
Service Class ID List:
"Generic Attribute" (0x1801)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 31
"ATT" (0x0007)
uint16: 0x0010
uint16: 0x0010
Service Name: AVRCP CT
Service RecHandle: 0x10003
Service Class ID List:
"AV Remote" (0x110e)
"AV Remote Controller" (0x110f)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 23
"AVCTP" (0x0017)
uint16: 0x0103
Profile Descriptor List:
"AV Remote" (0x110e)
Version: 0x0105
Service Name: AVRCP TG
Service RecHandle: 0x10004
Service Class ID List:
"AV Remote Target" (0x110c)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 23
"AVCTP" (0x0017)
uint16: 0x0103
Profile Descriptor List:
"AV Remote" (0x110e)
Version: 0x0104
어쩌면 Service Name: Serial Port라는 서비스가 없기 때문에 추가한다.
pi@rapi:~ $ sudo sdptool add --channel=22 SP
Serial Port service registered
다시 확인하면 Service Name: Serial Port가 추가되었다고 생각합니다.
pi@rapi:~ $ sdptool browse local
(省略)
Service Name: Serial Port
Service Description: COM Port
Service Provider: BlueZ
Service RecHandle: 0x10005
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 22
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Serial Port" (0x1101)
Version: 0x0100
백그라운드에서 실행하고 있던 bluetooth 데몬을 중지하고 bluetooth 서비스를 시작합니다.
같은 명령을 사용하여 SerialPort를 추가합니다.
3. 통신하자
1) RFCOMM 설정
다음 명령으로 rfcomm을 청취 상태로 만듭니다.
pi@rapi:~ $ sudo rfcomm listen /dev/rfcomm0 22
Waiting for connection on channel 22
이것으로 시리얼 통신의 청취 대기 상태가 된다. 시리얼 통신이 확립되면,/dev/rfcomm0 디바이스로 데이터 송수신을 할 수 있게 된다.
2) 시리얼 통신 접속
페어링한 Windows 7의 PC와 시리얼 통신해 본다.
Windows 측의 준비로서, 페어링한 상태로 이하를 연다.
제어판 > 하드웨어 및 사운드 > 장치 및 프린터
장치에서 페어링된 Raspberry Pi 장치의 속성을 엽니다.
서비스 탭의 시리얼 포트 (SPP) 'Serial Port'를 체크하면 가상 포트가 할당됩니다.
할당 된 포트 (여기서 COM5)는 때때로 변동한다.
Tera Term을 열고 "직렬"연결합니다. 포트는 상기의 「COM5」를 선택할 수 있으므로, 그것을 지정한다.
의 시점에서 Rasbperry Pi의 청취 상태였던 rfcomm에 Connection이라고 표시되어 정상적으로 접속할 수 있었던 것을 확인할 수 있다.
pi@rapi:~ $ sudo rfcomm listen /dev/rfcomm0 22
Waiting for connection on channel 22
Connection from28:C2:DD:XX:XX:XX to /dev/rfcomm0
Press CTRL-C for hangup
3) Windows PC에서 Raspberry Pi로 데이터 전송
Tera Term에서 적당히 문자열을 입력해 본다.
시리얼 통신은 한 문자씩의 송신이므로 특히 Enter라든지하지 않고도 메시지는 송신된다.
Raspberry Pi 측에서 메시지를 확인하기 위해/dev/rfcomm0을 cat한다.
pi@rapi:~ $ sudo cat /dev/rfcomm0
1234
Tera Term에서 입력한 문자가 출력됩니다.
4) Raspberry Pi에서 Windows PC로 데이터 전송
이번에는 Raspberry Pi에서/dev/rfcomm0 장치에 메시지를 echo 해보자.
pi@rapi:~ $ sudo echo abcd > /dev/rfcomm0
그러면 Tera Term 화면에 echo 된 문자열이 표시됩니다.
이상입니다! 다음은 스마트 폰과 블루투스로 통신하고 싶습니다.
Reference
이 문제에 관하여(라즈파이와 BlueTooth로 통신 할 때까지의 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/oko1977/items/9f53f3b11a1b033219ea
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
pi@rapi:~ $ sudo rfcomm listen /dev/rfcomm0 22
Waiting for connection on channel 22
pi@rapi:~ $ sudo rfcomm listen /dev/rfcomm0 22
Waiting for connection on channel 22
Connection from28:C2:DD:XX:XX:XX to /dev/rfcomm0
Press CTRL-C for hangup
pi@rapi:~ $ sudo cat /dev/rfcomm0
1234
pi@rapi:~ $ sudo echo abcd > /dev/rfcomm0
Reference
이 문제에 관하여(라즈파이와 BlueTooth로 통신 할 때까지의 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/oko1977/items/9f53f3b11a1b033219ea텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)