프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

안드로이드XBLE 블루투스 통신-무드램프 만들기

2018-12-27 10:50:03

개요

 

본 튜토리얼에서는 블루투스 4.0 모듈이 내장된 오렌지보드 BLE를 사용합니다.

 

(2)안드로이드XBLE 블루투스 통신-LED 제어를 참고하여 주시기 바랍니다.

 

 

 

 

부품 목록

 

NO 부품명 수량 상세설명
1 오렌지 BLE보드 1 블루투스 4.0(BLE) 내장 보드
2 Neopixel Strip LED 1  
3 9V 건전지 1 커넥터 포함
4 점퍼케이블 5  

 

부품명 오렌지 BLE보드 Neopixel LED 9V 건전지 점퍼케이블
파트

 

 

 

하드웨어 Making

 

브레드보드 레이아웃

 

회로도

 

 

외형

 

여기에선 3D프린터로 외형을 출력하고 안에 빈공간에 밑의 사진과 같이 BLE보드와 9V 건전지, LED Strip을 넣어주었습니다.

 

 

 

소프트웨어 Coding

#include <Adafruit_NeoPixel.h>
#include <SoftwareSerial.h>
#define PIN 6

// 오렌지 BLE보드는 4, 5번 핀에 BLE칩이 연결되어 있습니다.
SoftwareSerial BTSerial(4, 5);

// 각 색깔별로 기본값 0을 지정해 줍니다.
int redTemp = 0;
int blueTemp = 0;
int greenTemp = 0;

// 네오픽셀 LED 셋팅(여기선 12개의 Pixel을 사용했는데 연결한 Pixel 수에 맞게 숫자를 바꿔주세요)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(12, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
        strip.begin();
        // 모든 LED Pixel을 Off로 셋팅해줍니다.
        strip.show(); 
        Serial.begin(9600);
        BTSerial.begin(9600);
}

void loop() {

        // 블루투스를 통해 데이터가 들어오면
        if (BTSerial.available()) {
                
                // 받은 데이터를 각 색깔별로 맞게 셋팅해줍니다.
                if (BTSerial.find("R")) {
                        redTemp = BTSerial.parseInt();
                }
                if (BTSerial.find("G")) {
                        greenTemp = BTSerial.parseInt();
                }
                if (BTSerial.find("B")) {
                        blueTemp = BTSerial.parseInt();
                }
                
                // 각 색깔별로 제대로 된 수치가 들어왔는지 시리얼모니터로 확인
                Serial.print("R : ");
                Serial.println(redTemp);
                Serial.print("G : ");
                Serial.println(greenTemp);
                Serial.print("B : ");
                Serial.println(blueTemp);
                
                // 각 색깔별로 셋팅된 값을 이용하여 NeoPixel LED의 색깔을 밝혀줍니다.
                colorWipe(strip.Color(redTemp, greenTemp, blueTemp), 50);
                
                // NeoPixel LED 색깔이 모두 켜졌으면 각 색깔값들을 초기화 해줍니다.
                if (BTSerial.read() == 13) {
                        redTemp = 0;
                        greenTemp = 0;
                        blueTemp = 0;
                        Serial.println("Reset");
                }
        }
}


// Neopixel의 색깔을 정해주는 함수
void colorWipe(uint32_t c, uint8_t wait) {
        for (uint16_t i = 0 ; i<strip.numPixels() ; i++) {
                strip.setPixelColor(i, c);
                strip.show();
                delay(wait); 
        }
}

 

 

 

소프트웨어 설명

오렌지 BLE보드에 블루투스 기능을 사용하는 방법은 아두이노 안드로이드 블루투스(BLE) 통신 기초 (1). LED 깜박이기를 통해 확인하시기 바랍니다. (이 컨텐츠를 통해 BLE보드 스위치 사용하는 법과 사용하는 핀에 대해 알아두시면 문제없이 진행 할 수 있습니다.)

 * 이전 컨텐츠에서 설명했듯이 오렌지 BLE보드에서 블루투스 기능을 사용하게 되면 디지털 4, 5번 핀을 사용하실 수 없습니다.

 

우선 이번 컨텐츠에서 사용할 오렌지 BLE보드에 연결된 RGB LED를 제어하는 어플(kocoafab-smartlight.apk) 파일을 받으시고 설치하신 후 실행하면 밑의 왼쪽 사진과 같이 화면이 나옵니다. 

(이 어플은 이전 컨텐츠 오렌지 BLE보드를 이용하여 아두이노 안드로이드 블루투스(BLE) 통신 기초 (2). RGB LED 제어하기에서 사용한 어플과 같은 어플입니다.)

(밑에 설명은 이전 컨텐츠와 동일한 내용입니다. 이전 컨텐츠를 보셧으면 설명 부분은 넘기셔도 됩니다.)

 

우선 왼쪽 사진을 보시면 오른쪽 상단에 연결 버튼이 있습니다. 이 버튼을 누르면 오른쪽 사진과 같이 주변의 블루투스 기기들이 검색이 되는데, 해당 기기를 선택해 주면 사진과 같이 연결이 됩니다.

 


 

연결이 된 후 다시 메인 화면으로 돌아가면 화면에 방금 연결한 기기가 나옵니다. 해당 기기를 선택하면 마지막 사진과 같이 색띠와 종료버튼이 나오는데 자신이 원하는 색을 선택하면 BLE보드에 연결된 RGB LED의 색깔도 바뀌게 됩니다.

(종료버튼을 누를시 LED가 꺼지게 됩니다.)

 

 

 if(BTSerial.available()){
    // 블루투스를 통해 데이터가 들어오면

    // 받은 데이터를 각 색깔별로 맞게 정리합니다.
    if(BTSerial.find("R")){
      redTemp = BTSerial.parseInt();
    }
    if(BTSerial.find("G")){
      greenTemp = BTSerial.parseInt();
    }
    if(BTSerial.find("B")){
      blueTemp = BTSerial.parseInt();
    }
    Serial.print("R : ");
    Serial.println(redTemp);
    Serial.print("G : ");
    Serial.println(greenTemp);
    Serial.print("B : ");
    Serial.println(blueTemp);
    // 정리한 데이터 확인    


    colorWipe(strip.Color(redTemp, greenTemp, blueTemp), 50);
    // 각 색깔별로 정리한 값을 이용하여 NeoPixel Led의 색깔을 밝혀줍니다.
    
    if(BTSerial.read() == 13){
    // 데이터가 모두 들어왔으면 각 수치들을 초기화 해줍니다.
      redTemp = 0;
      greenTemp = 0;
      blueTemp = 0;
      Serial.println("Reset");
    }
  }

 

블루투스로 전송된 데이터를 필요에 맞게 수정하는 소스 코드입니다. 안드로이드에서 색띠의 색깔 값을 R, G, B 값으로 가지고 있습니다.(범위는 0 ~ 255 까지 입니다.) 

 

안드로이드 어플을 통해 색깔이 선택이 되면 해당 R, G, B 값을 R000G000B000의 형태로 오렌지 BLE보드에 전송하게 됩니다.(000 은 임의의 숫자 값입니다.)

 

이렇게 전송된 값을 Serial.find() 함수를 통해 R, G, B 문자를 기준으로 값을 나눠 주고, 나눈 값을 parseInt() 함수를 통해 각각 Int값으로 저장해 줍니다.

(* 참고 : Serial 함수의 명령어에 대해 자세하게 알아봅시다.)

 

Neopixel LED 사용법은 NeoPixel 사용하기 컨텐츠를 참고하시기 바랍니다.

 

* 다음 컨텐츠는 블루투스를 이용하여 센서 데이터를 전송해보도록 하겠습니다.

kocoafab

Neopixel LED, 아두이노, 오렌지보드, BLE
profile

zapdong 2023-11-27 14:50:08

아두이노 나노 + HM-10 + 네오픽셀(8LED) 로 구성된 아두이노 키트를 활용하여 네오픽셀을 제어하고 싶습니다.

위 구성에 맞게 블루투스 및 핀번호, led수 등을 바꾸어 코딩을 적용시켜보았더니 업로드 완료되었고, 제공해주신 앱 핸드폰에 깔고 실행시켜 블루투스까지 잡아 연결되었습니다. 그런데 색상표를 터치해도 전혀 반응하지 않는데, 이유가 무엇일까요?
위에 구성에 맞게 코딩을 수정해서 짜주실 수 있나요?