블루투스를 이용한 아두이노-안드로이드 채팅

1. 아두이노-안드로이드 BT 채팅

블루투스를 이용한 아두이노와 안드로이드 간 채팅 시스템입니다. 아두이노-PC 간 USB 시리얼 연결로 사용자 입력을 받고 BT를 이용해서 안드로이드 폰으로 쏴줍니다. 안드로이드 폰에서도 사용자가 입력한 데이터를 BT를 이용해서 아두이노로 전달하고 전달된 메시지는 LCD 모듈에 표시됩니다. 소스, 구현이 간단하고 여러가지로 응용하기 좋습니다. 카페 공구를 이용하면 부품들도 저렴하게 구할 수 있습니다.

이미 거의 유사한 프로젝트가 GitHub 에 있으니 소스 참고하세요.

https://github.com/pablobuenaposada/arduino-HC-06/tree/master/Android

2. 구현 순서 

2-1. 아두이노

아두이노에서는 먼저 블루투스 모듈과 LCD 모듈을 연결합니다. 아래 별도로 작성해 둔 글을 참고해서 연결하시면 됩니다. 배선만 참고해서 연결하시고 소스코드는 이 글에 있는 소스를 사용하세요.

연결이 끝나면 아래 소스를 아두이노에 업로드 합니다.

——————————————————————–

//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#include <SoftwareSerial.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display

SoftwareSerial BTSerial(2, 3); //Connect HC-06 TX,RX

void setup()
{
  Serial.begin(9600);
  Serial.println("Hello!");
  BTSerial.begin(9600);  // set the data rate for the BT port

  lcd.init();                      // initialize the lcd

  lcd.backlight();
  lcd.print("Hello, world!"); // Print initial message.
}

/* time */
unsigned long prevReceivedTime = 0;
unsigned long curReceivedTime = 0;
int currentLine = 0;  // Display character at 0 or 1 line

void loop()
{
  // BT --> Data --> Arduino --> LCD
  if (BTSerial.available()) {
    char c = BTSerial.read();

    curReceivedTime = millis();
    if(curReceivedTime - prevReceivedTime > 1000) {  // (1)
      currentLine++;
      if(currentLine > 1) {
        currentLine = 0;
        lcd.clear();
      }
      lcd.setCursor(0, currentLine);
    }

    Serial.print(c);
    lcd.write(c);

    prevReceivedTime = curReceivedTime;
  }

  // PC --> Data --> Arduino --> Data --> BT
  if (Serial.available()) {
    BTSerial.write(Serial.read());  // (2)
  }
}

——————————————————————–

PC에서 전달된 데이터를 안드로이드로 보내는 코드는 간단합니다. (2) 참고. Serial 연결에서 읽은 데이터를 BT로 넘겨주면 됩니다. 아두이노와 BT는 Software Serial 로 연결되기 때문에 SoftwareSerial.h 파일이 include 되어 있습니다.

안드로이드에서 전달해준 데이터를 LCD에 표시할 때는 약간의 처리를 해줘야 합니다. LCD가 16글자 2줄을 표시하기 때문에 적당히 줄넘김을 해줘야 합니다. Line break 를 식별할 수 있도록 안드로이드에서 처리해주지 않았기 때문에, 1초 이상 입력이 없으면 자동으로 줄넘김을 하도록 코딩 했습니다. (1) 참고. 만약 안드로이드에서 16자 이상을 한번에 보내면 16자 이후는 표시되지 않습니다. 구현하시는 분은 이 부분도 구현해보세요.

.

2-2. 안드로이드

안드로이드 앱 구현은 GitHub 프로젝트에 있는 소스를 빌드하시면 됩니다. 귀찮으면 아래에서 다운로드 하세요.

GitHub 소스 : https://github.com/pablobuenaposada/arduino-HC-06/tree/master/Android

[wpdm_file id=13]

안드로이드와 아두이노 BT 연결은 아래 순서대로 하세요.

  1. 먼저 아두이노를 켜서 HC-06 슬레이브 모듈이 페어링 대기상태에 들어가도록 합니다. (LED 깜빡깜빡)
  2. 위 GitHub 에서 받은 소스를 빌드하거나 아래 링크에서 APK 파일을 받아서 폰에 설치합니다.
  3. 폰의 설정 > 블루투스 에서 off 상태이면 BT on 으로 바꿉니다.
  4. BluetoothChat 앱을 실행 – 메뉴키 – Connect a device 선택
  5. Device List 에 HC-06 슬레이브 모듈이 보이는지 확인. 안보이면 Scan 버튼을 눌러서 찾아보고 그래도 안되면 1부터 다시합니다.
  6. HC-06 모듈이 보이면 선택 – 연결이 정상적으로 완료되면 챗팅 가능
  7. 폰으로 글 적으면 PC의 Serial Monitor에서 보이는지 확인합니다. 반대도 확인.

여기까지 완료되면 안드로이드와 아두이노 사이에 채팅이 가능합니다.

참고자료:

You may also like...