컴퓨터/아두이노 라즈베리파이

[아두이노] 안드로이드와 BLE(Bluetooth4) 통신2 - 회로도/코드

우유식빵 2021. 11. 30. 18:22

   0. 준비                                                   

앞서 아래 글을 통해 통신할 안드로이드를 개발하고

https://waytocse.tistory.com/73

 

[아두이노] 안드로이드와 BLE(Bluetooth4) 통신1 - 안드로이드 개발

  0. 준비 안드로이드에서 BLE통신을 구현하는 것은 매우 어렵고 복잡하다. 그래서 reference문서를 보거나 서칭해가면서 ble를 직접 앱상에 구현해보려고했는데 너무 어려워서 일단 중단하고 프로

waytocse.tistory.com

그 다음 이 글의 과정을 진행해야한다.

 

그리고 이 글은 아두이노 우노를 기준으로 작성됐다.

아두이노 메가에서 작동하는 것은 아래 링크의 문제해결3번을 참고하면서 이 글을 따라하면 된다.

https://waytocse.tistory.com/77

 

아두이노 메가와 OLED, BLE(HM-10) 연동 오류 해결

전에 아두이노 우노에서 oled와 블루투스 모듈을 한번에 사용하려고 했다가 메모리 문제로 인해 동시 사용을 못하게 된 후 (바로 그 문제를 직면했던 날 게시글) https://waytocse.tistory.com/76 [아두이

waytocse.tistory.com


 

   1. 아두이노 블루투스 통신 회로도

RX를 5번, TX를 4번핀에 연결한다. 

GND를 연결하고 VCC를 3.3V에 연결한다. 

 

 

 

   2. 아두이노 블루투스 통신 코드

각 코드에 대한 설명은 주석으로 달아놨다.

앞서 안드로이드 개발에서 값을 전송할때 값 앞에 "JACKPOT"을

꼭 붙여서 전송했던 것을 기억하면 코드를 이해하는 것이 쉬울 것이다.

#include <SoftwareSerial.h>
SoftwareSerial BTSerial(4,5); //TX, RX 
String byteToString = "";
int inputValue[3] = {1,2,3};
bool commandActive = false;
int inputCount = 0;

void setup() {
  Serial.begin(9600);
  BTSerial.begin(9600); 
}

void loop() {
 while(BTSerial.available()) {//안드로이드 앱에서 아두이노로 데이터 전송
    byte data = BTSerial.read();//바이트 단위로 읽힘
    
    //JACKPOT의 J가 들어오면 byteToString 값 초기화
    if(data == 'J'){ 
      byteToString = "";
    }
    
    byteToString += char(data); //char로 형변환 안하면 숫자만 저장됨

    //커맨드 들어옴
    if(byteToString == "JACKPOT"){
      Serial.println(byteToString);
      commandActive = true;
      byteToString = "";
      continue;
    }

    //JACKPOT 커맨드 받고 뒤 값 3개 받는 과정
    if(commandActive){
      inputValue[inputCount] = data - 48;//어차피 숫자라 형변환 필요 없음, 아스키코드 형태라서 -48이나 -'0'해야함
      inputCount += 1;
    }

    //값 3개 다 받았으면 출력
    if(inputCount == 3){
      inputCount = 0;
      commandActive = false;
      for(int i=0; i<3; i++){
        Serial.println(inputValue[i]);
      }
    }
  }
}

 

   3. 결과

안드로이드에서 블루투스 모듈을 scan하고 연결한 후 작동시켜

시리얼 모니터로 출력되는 결과를 보면

다음과 같이 통신된 값이 출력이 잘 되는 것을 확인 할 수 있다.