[사물 인터넷 네트워크와 서비스 구축 강좌] #3-3 서버-센서장치 classic BT 통신
강좌 전체보기
.
.
이전 파트에서 클래식 블루투스를 이용해 센서장치와 모바일간 통신을 구현했습니다. 이번에는 홈서버 역할을 하는 라즈베리파이가 클래식 블루투스 통신을 할 수 있도록 만들어 볼 것입니다. 이 기능을 구현하면 라즈베리파이가 손쉽게 센서장치나 모바일 폰과 연동되도록 만들 수 있습니다.
단, 이 기능은 WiFi-Bluetooth 칩을 내장하고 있는 라즈베리파이 3 버전에서만 사용할 수 있습니다.
.
라즈베리파이 블루투스 환경 설정
먼저 라즈베리파이 3 에서 블루투스를 사용할 수 있도록 bluez 드라이버를 설치할 것입니다. 그리고 파이썬에서 블루투스 제어가 가능하도록 라이브러리도 설치하겠습니다. 아래 링크에 있는 내용을 참고해서 라즈베리파이를 설정해주세요. (링크 내용 1~6 까지 실행하세요.)
.
라즈베리파이와 HC-06 모듈 연동
라즈베리파이가 Master 기기로 동작하고 아두이노에 달려있는 HC-06 모듈이 Slave 로 동작하도록 만들어서 둘 사이에 데이터가 오가도록 해보겠습니다. 이전 파트에서 사용했던 아두이노 – HC06 모듈 연결 방법을 그대로 사용하면 됩니다. 아두이노에 올릴 스케치(코드)도 그대로 사용하면 됩니다. (GitHub 소스 링크)
Bluetooth HC-06 | Arduino |
VCC | 3.3V |
GND | GND |
TX | D2 |
RX | D3 |
#include <SoftwareSerial.h> SoftwareSerial BTSerial(2, 3); //Connect HC-06. Use your (TX, RX) settings void setup() { Serial.begin(9600); Serial.println("Hello!"); BTSerial.begin(9600); // set the data rate for the BT port } void loop() { // BT –> Data –> Serial if (BTSerial.available()) { Serial.write(BTSerial.read()); } // Serial –> Data –> BT if (Serial.available()) { BTSerial.write(Serial.read()); } }
.
소스코드를 올리고 시리얼 모니터 창을 켜세요. 그럼 아래처럼 PC <-> 아두이노 <-> HC-06 모듈이 서로 데이터를 주고 받을 수 있습니다. 이 상태에서 라즈베리파이를 페어링 하면 PC 부터 라즈베리파이까지 데이터를 주고받게 됩니다.
라즈베리파이는 아두이노에서 데이터를 받으면 그대로 다시 보내주도록 만들겠습니다. 이 기능을 구현하기 위한 파이썬 코드가 GitHub에 업로드 되어 있습니다.
파이썬 코드를 실행하기 전에, 아래 링크에 있는 내용을 참고해서 라즈베리파이를 설정해주세요. (링크 내용 7 을 해보세요.)
GitHub 에서 받은 파이썬 코드에서 아래 부분을 HC-06 모듈에 설정한 이름으로 바꿔주세요. 그래야 이 이름과 같은 모듈을 찾아서 자동으로 연결합니다.
- target_name = “iot_test” # target device name
수정한 파이썬 코드를 라즈베리파이 적당한 곳에 올려두고 실행해보세요.
- sudo python3 BtChat_master.py
이제 PC 에 켜둔 시리얼 모니터 창으로 메시지를 입력하면, 그 메시지가 라즈베리파이에 뜰겁니다. 그리고 아두이노가 전송한 메시지 그대로 아두이노가 전달받기 때문에, 시리얼 모니터에 입력한 메시지가 그대로 출력될겁니다.
.
.
라즈베리파이와 모바일 폰 연동
앞선 예제에서는 라즈베리파이가 Bluetooth – Master 로 동작했습니다. 이번에는 반대로 라즈베리파이가 slave 로 동작해서 핸드폰과 통신하는 예제입니다.
라즈베리파이가 Slave 로 동작하도록 만든 Python 소스를 아래에서 다운로드 받으세요.
- GitHub – 라즈베리파이 BT slave 코드
- 소스코드에서 uuid 값은 필요에 따라 바꿔서 써도 됩니다.
소스코드를 라즈베리파이 적당한 위치에 올려두고 실행합니다.
- sudo python3 BtChat_slave.py
만약 핸드폰에서 라즈베리파이 BT 검색이 안된다면, discoverable 설정이 안되어 있기 때문입니다. 외부에서 라즈베리파이 BT 가 검색될 수 있도록 해줘야 합니다.
- sudo bluetoothctl
- [bluetooth]# discoverable on
Changing discoverable on succeeded - quit
테스트를 위해 제작한 안드로이드 앱 소스는 GitHub 에 업로드 되어 있습니다. 아래 링크에서 참고하세요.
BTChat 안드로이드 앱을 실행해보세요. 그리고 라즈베리파이를 찾아서 연결해보세요. (제 경우에는 raspberrypi 로 검색됨)
정상적으로 연결이 되면, 내가 보낸 메시지가 순서가 바뀌어서 다시 수신됩니다. 내가 보낸 메시지는 라즈베리파이에서도 보일겁니다.
.
활용
이로서 우리가 홈 서버로 사용할 라즈베리파이에서도 클래식 블루투스 통신을 테스트 해봤습니다. 라즈베리파이에 아두이노를 무선 통신으로 연결하거나 움직이는 장치위에 라즈베리파이를 탑재하는 경우, 또는 안드로이드 폰으로 홈 서버를 제어하는 경우 등 다양한 상황에서 클래식 블루투스 통신을 이용할 수 있습니다. 또한 제작 난이도가 BLE 에 비해서는 간단한 편입니다.
.
주의!!! [사물 인터넷 네트워크와 서비스 구축 강좌] 시리즈 관련 문서들은 무단으로 내용의 일부 또는 전체를 게시하여서는 안됩니다. 계속 내용이 업데이트 되는 문서이며, 문서에 인용된 자료의 경우 원작자의 라이센스 문제가 있을 수 있습니다.
.
강좌 전체보기
.