아두이노-안드로이드 BT Chat 앱 (IoT 기능 추가)
아두이노와 안드로이드를 블루투스로 연결해서 채팅을 할 수 있도록 지원하는 앱입니다.
기존에 Bluetooth chat 이라는 해외에서 제작한 소스코드가 이미 있어서 블루투스 관련 부분은 이 코드를 기반으로 합니다. 다만 사용상에 불편한 점들이 있어서 앱의 구조를 대거 수정하고 간단한 IoT 기능을 추가하였습니다.
- 메시지가 짧게 끊어지는 문제 수정 : 1초 이내에 수신된 메시지들은 하나로 이어서 보여줍니다
- 백그라운드 서비스 지원 : 백그라운드로 서비스가 돌아가도록 수정해서(setting 탭에서 선택가능) 앱 종료 후에도 블루투스 연결이 끊어지지 않습니다. 다만 앱을 재시작하면 채팅창은 초기화 됩니다.
- 블루투스 장치 기억 및 재연결 시도 : 연결이 끊어지면 자동으로 재연결을 시도합니다.
- IoT 기능 추가 : 아두이노에서 특정 메시지를 보내면 HTTP request를 자동으로 보내줍니다. 현재는 thingspeak 서버만 지원. 백그라운드로 돌아가도록 설정해두면 IoT를 위한 wifi 모듈처럼 쓰실 수 있습니다.
연결은 간단합니다. 아두이노에 블루투스 모듈만 연결하면 됩니다. 보통 SoftwareSerial로 연결하시겠지요.
아두이노에는 아래 코드만 올려주면 됩니다.
#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()); } }
채팅 입력 및 확인은 아두이노 IDE 에서 Serial Monitor를 이용하면 됩니다.
IoT 기능 사용법
WiFi 모듈을 몇 가지 테스트 해봤는데 연결이 불안정하거나 기능이 미약하고, 아니면 비싼 단점이 있어서 골치가 아팠습니다. 그래서 아예 IoT 기능을 지원할 수 있도록 앱에 기능을 추가했습니다. 아두이노에서 아래와 같은 형식의 메시지를 앱으로 보내면 앱에서 메시지를 인식하고 자동으로 외부 서버로 HTTP Request를 보내줍니다.
인식하는 문자열 형식 : thingspeak:key=xxx&field1=xxx[*]
HTTP Request 변환 : http://184.106.153.149/update?key=xxx&field1=xxx
(thingspeak: ~ [*] 사이에 있는 문자열을 그대로 request parameter 로 이용합니다.)
집에 안쓰시는 폰 하나쯤 있으실겁니다. 이 기능을 이용하시면 별도의 WiFi 모듈없이 휴대폰을 WiFi 모듈처럼 사용하실 수 있습니다. 싸고 다루기 쉬운 블루투스 모듈만 갖추시면 됩니다.
현재는 ThingSpeak 서버만 지원합니다. http://www.thingspeak.com 에서 회원 가입 후 채널을 하나 생성하세요. 채널마다 할당되는 key 를 이용해서 주기적으로 request를 보내주면, 서버상에 시간대별 로그를 남길 수 있습니다.
# 앱 다운로드(Google Play) : https://play.google.com/store/apps/details?id=com.hardcopy.btchat
# 앱 소스 다운로드 : https://github.com/godstale/BTChat
소스를 개선하신 분은 제게도 알려주세요. 업데이트 해서 공유될 수 있도록 하겠습니다. (godstale@hotmail.com)