Linux (Ubuntu12.04) Blueooth Serial Port Connection :: Horizontal Grays S2

현재 하고 있는 작업 중

Server PC(Windows 7) 에서 명령을 보내면 Client PC(Linux) 에서 명령을 받아 해석하고 수행 그리고 결과를 넘겨주어야 하는데 이를 블루투스를 통해서 한다.

이를 위하여 Server PC와 Client PC는 블루투스 시리얼포트를 이용하여 통신을 하게 된다.


일단 Server는 윈도우 환경에서 BlueSoleil을 이용하니까 별문제가 없다. 

리눅스 PC에 NEXT-BT104라는 블루투스 동글을 설치하였는데 

이게 윈도우 상에서는 Serial Port Service가 보이는 걸로보아  (아마 SPP Protocol 아니면 RFCOMM protocol 이겠지) 시리얼 포트를 지원하는 것 같은데

리눅스에 꽂아두면 Server PC에서 사용가능한 서비스에 Serial Port가 나타나지 않는다.


 우분투/설정/블루투스 에서도 Serial Port 해당 서비스 안보임 T.T

이를 해결하기 위해 역시 검색 

http://robotbaram.tistory.com/entry/%EB%B8%94%EB%A3%A8%ED%88%AC%EC%8A%A4-%EC%8B%9C%EB%A6%AC%EC%96%BC-%ED%8F%AC%ED%8A%B8-%EC%84%A4%EC%A0%95 

위 링크에 가장 쉬운 방법이 있었다.


* Blueman 설치

$sudo apt-get install blueman



으로 설치하고 프로그램(이름이 "블루투스 관라지", 참고로 우분투/설정/블루투스는 이름이 "블루투스")을 실행하면



메뉴의 설정을 누르면 서비스에 Serial Port가 보임 이를 이용하여 연결하면 나의 경우 /dev/rfcomm0 로 연결됨 


자.. 이건 GUI환경에서이고 Terminal 환경에서 접속을 시도해 보자.

(이유는 C 프로그램 안에서 위의 작업들이 수행되어야 해서 T.T)


참고한 사이트는 아래와 같다.

http://stackoverflow.com/questions/15464475/how-to-setup-serial-communication-in-processing-to-dev-rfcomm0


위와 같이 터미널에서 hcitool scan 하면 주변의 블루투스 장치들이 검색된다.


연결은 rfcomm 을 이용한다.


$sudo nano /etc/bluetooth/rfcomm.conf

우선 위 명령어를 이용하여 rfcomm.conf 파일을 수정해주자.


# RFCOMM configuration file.

#


rfcomm0 {

#       # Automatically bind the device at startup

        bind yes;

#

#       # Bluetooth address of the device

        device 00:15:83:6B:FA:C1;

#

#       # RFCOMM channel for the connection

       channel 1;

#

#       # Description of the connection

        comment "Jslee-laptop-bluetooth";

}



기본적으로는 모두 #으로 주석처리 되어있는데 필요한 부분은 #을 지워 활성화 시켜준다.

bind no -> bind yes

device XX:XX:XX:XX:XX:XX: 연결하고자 하는 PC의 Bluetooth Address 

channel 1

그리고 혹시 몰라 comment도 ^^;



위 그림과 같이

$sudo rfcomm connect 0


를 입력하면


접속 성공!!!


Server PC의 BlueSoreil 에서도 연결이 되었슴이 나타난다.



그리고 작성한 시리얼통신 프로그램 예제를 실행하니

/dev/rfcomm0: Permission denied


메시지가 뜨고 실행이 종료된다.


즉 /dev/rfcomm0에 대한 권한이 없다는 것인데 이는 권한을 부여하면 된다.




위 그림과 같이


$ls -al /dev/rfcomm0 

하면 현재 /dev/rfcomm0 의 권한이 root 에게만 read ,write 가능한 것을 볼 수 있다.

이를

$chmod a+rw /dev/rfcomm0 

해주고 다시

$ls -al /dev/rfcomm0 

확인하면

read, write 권한이 모두에게 주어진 것을 볼 수 있다.



그리고 다시 실행하니 성공!!! 


자 이제 위의 쉘 명령들을 C프로그램 안에서 구현해봐야겠다.


+ Recent posts