한 걸음 두 걸음

android - arduino bluetooth 통신으로 앱에서 LED 제어하기 && 앱에서 LED 상태값 실시간 확인하기 본문

Arduino

android - arduino bluetooth 통신으로 앱에서 LED 제어하기 && 앱에서 LED 상태값 실시간 확인하기

언제나 변함없이 2019. 7. 9. 19:05
반응형

이전에 블루투스 통신을 하는 안드로이드 앱을 만드는 포스팅을 남겼었는데

모든 분들이 안드로이드 스튜디오를 사용하는 것이 아니므로,

플레이스토어에서 손쉽게 다운받을 수 있는 앱 'arduino bluetooth controller'를 활용하여

LED를 제어해보겠습니다.

(tip : HC-06이 깜박이고 있는 것은 아직 페어링 되지 않았다는 뜻, 계속 켜져있는 것은 페어링이 된 상태라는 뜻)

01. 앱에서 LED 제어하기

이렇게 생겼으니 다운받아서 들어가주세요. 그러면 HC-06이 잡혀있는 것을 보실 수 있는데, 연결시켜서 Terminal mode로 들어가겠습니다.

그러면 블루투스로 다음과 같이 데이터를 전달할 수 있는데

이번엔 LED제어만 할 것이므로, 간단하게 a, b만 써서 on/off 해주겠습니다.

스케치는 아래 코드를 업로드해주시고,

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  pinMode(2,OUTPUT);
}

void loop() {
  if (Serial1.available()) {
    byte readDate = Serial1.read();
    Serial.write(readDate);

    if(readDate == 'a')
      digitalWrite(2,HIGH);

    if(readDate == 'b')
      digitalWrite(2,LOW);
  }
}

HC-06연결과 LED(2번핀)연결 해주세요~

그러면 이렇게

 

LED제어가 되는 모습을 확인하실 수 있습니다.

02. 앱에서 LED 상태값 확인하기

이제는 LED상태값(0 =off / 1 = on)을 핸드폰에서 읽어오도록 하겠습니다.

앱은 터미널 기능이 있는 위의 앱을 사용했습니다.

<결과>

앱으로 들어가서 블루투스 모듈과 페어링해준 후, 터미널 모드에서 들어오는 값 0, 1을 확인할 수 있고, a,b를 입력하여 LED를 제어한 결과까지 확인할 수 있었습니다.

<방법>

저는 android mega 2560을 사용하고 있기 때문에 다음과 같이 코드를 짰습니다.

#include <SoftwareSerial.h>

SoftwareSerial BTserial(19, 18); // RX | TX

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  pinMode(2,OUTPUT);
}

void loop() {
  if (Serial1.available()) {
    //앱에서 받아온 값 가지고 제어하기
    byte readDate = Serial1.read();
    Serial.write(readDate);
    Serial.println();

    if(readDate == 'a')
      digitalWrite(2,HIGH);

    if(readDate == 'b')
      digitalWrite(2,LOW);
    }

    //빵판에서 읽은 값 앱으로 보내기
    int LedState = digitalRead(2);
      Serial1.print(LedState);
      Serial1.print(";");

 delay(2000);
}

mega 2560의 경우 UART가 3개(Serial, Serial1, Serial2) 있습니다.

저는 rx1, tx1(19, 18)을 사용하였기 때문에 Serial1을 사용했고 다른 분들은 어떤 핀을 사용하시느냐에 따라 달라질 수 있습니다.

우노의 경우 UART는 1개(BTSerial) (rx, tx (0,1)) 로 쓰입니다. 참고부탁드립니다.

블루투스의 기본 Baudrate(보드레이트, 통신속도)는 9600을 사용합니다.

참고 : https://www.instructables.com/id/How-to-Receive-Arduino-Sensor-Data-on-Your-Android/

반응형