반응형

지난 글 (http://deneb21.tistory.com/550) 에서는 IoT-MODLINK 에 대해서 개괄적인 내용을 알아보았다. 지난 글 에서도 말했지만 내가 가지고 있는 무선관련 링크는 2개 인데 블루투스 링크와 와이파이 링크를 가지고 있다. 먼저 블루투스 링크를 연결하여 사용하는 방법에 대해서 알아보려고 한다. 다들 알다시피 블루투스 통신은 2.4Ghz 대역의 주파수로 통신을 하며 주로 10미터 이내의 근거리 통신에 이용 된다. 간혹 안테나 등을 개조해서 수 백 미터 거리의 통신을 하는 경우도 있기는 하지만... 아무튼 블루투스는 근거리 무선통신으로 각종 사물의 제어를 하는데 유용하다. 그리고 스마트폰과도 블루투스를 이용해서 쉽게 연결이 가능하므로 전용 앱을 이용하면 손 쉽게 사물의 제어가 가능하다. 이번 글에서는 스마트폰과 IoT-MODLINK (+블루투스 링크, LED 링크) 를 연결해서 어떻게 사물을 제어할 수 있는지 알아보려고 한다.



블루투스 링크이다. CSR BC417 (블루투스 V2.0) 칩을 이용했으며 Reset 스위치가 달려 있다.



매뉴얼에 나오는 블루투스 링크 구성도이다. 그냥 아두이노에 연결한다면 핀배열, 연결, 전원까지 신경을 써야 하겠지만 IoT-MODLINK 에서는 베이스 보드에 그냥 꼽으면 된다. 좋은 점이다.



위와 같은 위치에 링크를 꼽아 주었다. LED 링크는 D4, D5 핀을 이용하고 블루투스 링크는 D2, D3 핀을 이용 한다. 물론 링크는 자신이 원하는 곳에 꼽으면 된다.


예전에 썼던 블루투스 모듈 관련 글인 http://deneb21.tistory.com/267 를 참고하면 손쉽게 블루투스 링크의 설정이 가능하지만 다시 한 번 적어본다. 블루투스 기기는 각각의 고유한 이름과 접속을 위한 비밀번호를 가지고 있다. 이를 초기 상태에서 사용자가 원하는대로 설정할 필요성이 있다.


■블루투스 링크 설정 (AT Command)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <SoftwareSerial.h> //시리얼통신 라이브러리 호출
 
int blueTx=2;   //Tx (보내는핀 설정)at
int blueRx=3;   //Rx (받는핀 설정)
SoftwareSerial mySerial(blueTx, blueRx);  //시리얼 통신을 위한 객체선언
 
void setup() 
{
  Serial.begin(9600);   //시리얼모니터
  mySerial.begin(9600); //블루투스 시리얼
}
void loop()
{
  if (mySerial.available()) {       
    Serial.write(mySerial.read());  //블루투스측 내용을 시리얼모니터에 출력
  }
  if (Serial.available()) {         
    mySerial.write(Serial.read());  //시리얼 모니터 내용을 블루추스 측에 WRITE
  }
}
cs

위의 소스를 업로드 한다. 
업로드 후 시리얼 모니터를 연다.



전송칸에 AT 라고 입력하고 엔터를 누르면 시리얼 모니터에 OK 라고 나온다. 블루투스와 시리얼 모니터가 제대로 통신하고 있다는 뜻이다. 



블루투스 링크에 이름을 부여한다. AT+NAMEIOT-BTL 으로 했다. OKsetname 이라고 나오면서 이름이 정해졌다. AT+NAME 다음에 바로 세팅할 이름을 붙여 쓰면 된다. 즉, 이 블루투스 링크의 이름은 IOT-BTL 이 된다.



아무나 링크에 접속할 수 없도록 PIN (비밀번호)를 정해준다. NAME 세팅과 비슷하게 AT+PIN 뒤에 설정할 PIN을 적어주면 된다. 1234로 설정했다.


혹시 위의 설명이 이해가 안간다면 더 자세한 설명은 http://deneb21.tistory.com/267 에 있다.


이제 블루투스 링크에 새 이름도 생겼고 보안을 위한 비밀번호도 생겼다. 제어를 위한 어떠한 스케치도 없지만 한 번 무작정 스마트폰에서 연결을 해 본다. 설정한 이름과 핀으로 등록이 될 것이다. 블루투스 앱 이용을 위해서라도 한 번은 스마트폰에 블루투스 링크를 등록해 주어야 한다.


이제 스마트폰에 블루투스 앱을 설치해서 LED 링크의 LED를 블루투스 링크를 통해서 무선으로 ON/OFF 하는 예제를 하나 만들어 보려고 한다.


■ 스마트폰

스마트폰에서는 'Bluetooth Controller' 라는 앱을 설치했다. 이 앱이 아니라도 블루투스 링크로 문자열을 보낼 수 있는 어떠한 앱이라도 가능하다.


구글 플레이에서 위의 앱을 검색해서 설치했다. 버튼들의 이름과 속성값을 마음대로 설정할 수 있고 복잡하지 않아서 애용한다.


버튼들의 설정은 위와 같이 했다. 좌측은 보여지는 버튼의 이름이고 오른쪽은 눌렀을때 블루투스 링크로 전송하는 문자열이다.  이 문자열을 아두이노에서 받아서 LED를 제어한다.


설정이 완료된 버튼들의 모습이다. 말 그대로 LED 링크의 2개의 LED를 켜거나 끌 수 있도록 설정하였다.



■ 소스

소스는 간단하다. 스마트폰 블루투스 앱에서 블루투스 링크로 보내는 문자열을 판단하여 LED 링크의 LED1 또는 LED2를 켜거나 끄는 것이다. 간단한 예제이지만 이것을 기반으로 응용하면 전자제품 등의 제어도 쉽게 할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출
 
int blueTx=2;   //Tx (보내는핀 설정)
int blueRx=3;   //Rx (받는핀 설정)
SoftwareSerial mySerial(blueTx, blueRx);  //시리얼 통신을 위한 객체선언
String myString=""//받는 문자열
 
void setup() {
  Serial.begin(9600);   //시리얼모니터 
  mySerial.begin(9600); //블루투스 시리얼 개방
  pinMode(4, OUTPUT);  //D4을 OUTPUT으로 설정 (LED ON/OFF)
  pinMode(5, OUTPUT);  //D5을 OUTPUT으로 설정 (LED ON/OFF)
}
 
void loop() {
  while(mySerial.available())  //mySerial (블루투스 수신 문자열) 값이 있으면
  {
    char myChar = (char)mySerial.read();  //mySerial int형식의 값을 char형식으로 변환
    myString+=myChar;   //수신되는 문자열을 myString에 모두 붙임 (1바이트씩 전송되는 것을 모두 붙임)
    delay(5);           //수신 문자열 끊김 방지
  }
  
  if(!myString.equals(""))  //myString 값이 있다면
  {
    Serial.println("input value: "+myString); //시리얼모니터에 myString값 출력
      if(myString=="d4on") {
        digitalWrite(4, HIGH); //D4 LED ON
      } else if(myString=="d4off") {
        digitalWrite(4, LOW);  //D4 LED OFF
      } else if(myString=="d5on") {
        digitalWrite(5, HIGH);  //D5 LED ON
      } else if(myString=="d5off") {
        digitalWrite(5, LOW);  //D5 LED OFF
      } else {
        
      }            
    myString="";  //myString 변수값 초기화
  }
}
cs

 


결과 동영상이다. 스마트폰과 페어링이 되면 블루투스 링크의 LED가 깜빡이지 않게 되고 문자열 수신을 받을 수 있는 상태가 된다. 각 버튼을 누를때마다 LED 링크에 있는 2개의 LED가 켜지거나 꺼지는 것을 확인할 수 있다.



본 리뷰는 (주)빛컨으로부터 제품만을 제공받아 사용 후 작성한 리뷰입니다.

반응형

+ Recent posts