[Arduino] 13.블루투스




블루투스



이번에는 블루투스 모듈을 이용해서 블루투스 연결을 해보겠습니다!


image




블루투스 모듈은 신호를 받기위한 핀인 RX 핀, 신호를 전송하기 위한 TX핀, GND(Ground), VCC 핀이 있습니다. 모듈의 전원은 3.6V ~ 6V 사이에서 동작하므로 VCC핀은 아두이노의 5V 단자에 연결하면 됩니다. 모듈에 따라 3.3V에서 동작하는 모듈도 있으므로 규격을 꼭 확인하여 전원을 연결해야 합니다.

RX 핀은 3번, TX 핀은 2번에 연결해줍니다!


image




연결했을 때 다음과 같이 불이 깜빡깜빡하면 됩니다~!





#include <SoftwareSerial.h>
int blueRx=2;
int blueTx=3;
SoftwareSerial BTSerial(blueRx,blueTx); //RX, TX  아두이노 꼽을 땐 거꾸로 RX=3, TX=2 

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

void loop(){
   if(BTSerial.available()>0){
      Serial.write(BTSerial.read());
   }
   if(Serial.available()>0){
      BTSerial.write(Serial.read());
   }
}




그리고 Serial 모니터에 AT를 입력했을 때 OK가 나오면 연결이 제대로된 것입니다~!


image




AT + HELP 를 치면 AT에 관련된 명령어가 나옵니다~!


image




그럼 블루트스 이름과 PIN을 변경해 주겠습니다~!


image




그럼 이제 휴대폰으로 블루투스 연결해보겠습니다~!


먼저, 제가 아이폰이기 때문에 블루투스 통신을 위해 LightBlue 어플을 다운받아주겠습니다.


image




어플을 실행시키면 아까 설정한 name KOO 블루투스가 뜨네요!


image




눌러주고 TX & RX-V4.0 을 눌러줍니다!


image



image




Write new value를 눌러주고 한 번 아두이노로 메시지를 보내보겠습니다!


꼭 UTF-8인 것을 확인해주세요~!


image



image




다음과 같이 Serial 모니터에 메시지가 전달되었으면 성공입니다!


image




블루투스로 LED 켜기




이제 블루투스를 이용해서 LED를 켜보겠습니다!


#include <SoftwareSerial.h>
int ledPin =8;
int blueRx=2;
int blueTx=3;
SoftwareSerial BTSerial(blueRx,blueTx); //RX, TX  아두이노 꼽을 땐 거꾸로 RX=3, TX=2 

void setup(){
  Serial.begin(9600);
  BTSerial.begin(9600);
  pinMode(ledPin,OUTPUT);
}

void loop(){
   if(BTSerial.available()){
      char data = (char)BTSerial.read();
      if(data == 'A'){
        digitalWrite(ledPin, HIGH);
      }else if(data == 'B'){
        digitalWrite(ledPin, LOW);
      }
   }
}






다음은 LED 전구 3개를 제어하는 것입니다.


 #include <SoftwareSerial.h>
int ledPin[3] = {8, 9, 10};
int blueRx=2;
int blueTx=3;
SoftwareSerial BTSerial(blueRx,blueTx); //RX, TX  아두이노 꼽을 땐 거꾸로 RX=3, TX=2 

void setup(){
  Serial.begin(9600);
  BTSerial.begin(9600);
  for(int i = 0; i < 3; i++){
    pinMode(ledPin[i],OUTPUT);
  }
}

void loop(){
   if(BTSerial.available()){
      byte data = BTSerial.read();
      Serial.println(data);
      if(data < 0 || data > 7){
        Serial.println("wrong number");
      }else{
        for(int i = 0; i < 3; i++){
          if(data & (1 << i)){
            digitalWrite(ledPin[i], HIGH);
          }else{
            digitalWrite(ledPin[i], LOW);
          }
        }
      }
   }
}




image




image