고급 예제

다양한 도구들을 가지고 마음껏 응용해보세요.

(1)안드로이드XBLE 블루투스 통신-LED 깜박이기

2015-09-01 10:44:29

개요

 

 

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

우선 간단하게 스마트폰에 버튼을 하나 띄워서 그 버튼을 누를시 오렌지 보드에 내장 LED(13번 LED)를 깜박여 보겠습니다.

 

 

미리보기 동영상

 

 

 

부품 목록

 

NO 부품명 수량 상세설명
1 오렌지 BLE 보드 1 블루투스 4.0 내장 보드

 

부품명 오렌지 BLE 보드
파트

 

 

하드웨어 Making

 

 

오렌지 BLE보드는 기본적으로 블루투스 4.0버전이 내장되어있고, 이번 컨텐츠에서 테스트할 LED는 내장 LED(13번 LED)이기 때문에 따로 다른 연결을 안하셔도 됩니다.

 

다만 위의 사진과 같이 블루투스 기능을 사용하실려면 스위치를 위로(해당 이미지상으로) 올려주시면 됩니다.

* 해당 스위치를 위로 올려주시면 디지털 4, 5번 핀을 블루투스로 사용하실 수 있습니다. 자세한 내용은 소프트웨어 설명 부분에서 하겠습니다.

 

 

소프트웨어 Coding

// 블루투스 통신을 위한 SoftwareSerial 라이브러리를 불러온다.
#include <SoftwareSerial.h> 

// BLE보드는 4번, 5번 핀을 사용합니다.
SoftwareSerial BTSerial(4, 5); 
// 데이터를 수신 받을 버퍼
byte buffer[1024]; 
// 버퍼에 데이타를 저장할 때 기록할 위치
int bufferPosition; 
boolean temp = 0;

void setup() {
	BTSerial.begin(9600); 
	Serial.begin(9600); 
	// 내장 LED를 OUTPUT으로 설정합니다.
	pinMode(13, OUTPUT);
	// 버퍼 위치 초기화
	bufferPosition = 0; 
}

void loop() {
	// 블루투스로 데이터 수신
	if (BTSerial.available()) { 
		// 수신 받은 데이터 저장
		byte data = BTSerial.read(); 
		// 수신된 데이터 시리얼 모니터로 출력
		Serial.write(data); 
		// 수신 받은 데이터를 버퍼에 저장
		buffer[bufferPosition++] = data; 
		
		// 블루투스를 통해 'F'가 들어오면
		if (data == 'F') {  
			// LED가 꺼있을 경우 LED를 켭니다.
			if (temp == 0) {  
				digitalWrite(13, HIGH);
				temp = 1;
			// LED가 켜져있을 경우 LED를 끕니다.
			} else {          
				digitalWrite(13, LOW);
				temp = 0;
			}
		}
		// 문자열 종료 표시
		if (data == '\n') { 
			buffer[bufferPosition] = '\0';
			// BufferPosition을 초기화 합니다.
			bufferPosition = 0; 
		}  
	}
}

 

 

소프트웨어 설명

 

블루투스 2.0과는 다르게 스마트폰에서 블루투스 기기를 먼저 페어링 할 필요가 없습니다.

 

우선 오렌지 BLE보드를 제어할 안드로이드 어플(kocoaBLE_1.apk) 을 받으시고, 어플을 설치 해 줍니다.

 

어플을 실행하면 밑의 첫번째 화면과 같이 어플 화면이 나오는데, 여기서 위에 있는 Connect버튼을 눌러주면 가운데 화면과 같이 주변 블루투스 목록이 나옵니다. 

 

연결할 블루투스를 선택해 주시면 마지막 사진의 맨 밑의 부분과 같이 연결된 Device가 준비되었다고 뜨면서 가운데 버튼이 활성화 됩니다.(참고로 블루투스 연결이 안되있을 시 버튼이 활성화 되지 않습니다.)

 

 

 

어플을 실행하신 후 기기와 연결하셧으면 가운데 버튼을 이용하여 오렌지 BLE보드의 내장 LED를 제어하실 수 있습니다.

 

 

// 블루투스 통신을 위한 SoftwareSerial 라이브러리를 불러온다.
#include <SoftwareSerial.h> 

// BLE보드는 4번, 5번 핀을 사용합니다.
SoftwareSerial BTSerial(4, 5); 

 

오렌지 BLE보드의 블루투스는 디지털 4, 5번 핀에 연결되어 있습니다. 위에서 설명했던것과 같이 오렌지 BLE보드에 있는 스위치를 위로 올리고, 소스 코드에서 SoftwareSerial BTSerial(4, 5)번 핀을 설정해 주시면 됩니다.

 

기존에 HC-05를 사용하셧을 때(블루투스 2.0버전 블루투스 모듈)는 직접 연결한 핀에 맞게 세팅을 해주었다면 오렌지 BLE보드는 디지털 4, 5번 핀에 미리 연결을 해 둔 상태이기 때문에 블루투스를 이용하실 경우 디지털 4, 5번 핀을 이용하시면 됩니다.

(블루투스를 사용하실 때는 디지털 4, 5번 핀은 사용하실 수 없습니다.)

 

블루투스를 사용하시지 않을 경우 스위치를 내리시면 일반 디지털 핀처럼 사용하실 수 있습니다.

 

 

	// 블루투스로 데이터 수신
	if (BTSerial.available()) { 
		// 수신 받은 데이터 저장
		byte data = BTSerial.read(); 
		// 수신된 데이터 시리얼 모니터로 출력
		Serial.write(data); 
		// 수신 받은 데이터를 버퍼에 저장
		buffer[bufferPosition++] = data; 
		
		// 블루투스를 통해 'F'가 들어오면
		if (data == 'F') {  
			// LED가 꺼있을 경우 LED를 켭니다.
			if (temp == 0) {  
				digitalWrite(13, HIGH);
				temp = 1;
			// LED가 켜져있을 경우 LED를 끕니다.
			} else {          
				digitalWrite(13, LOW);
				temp = 0;
			}
		}
		// 문자열 종료 표시
		if (data == '\n') { 
			buffer[bufferPosition] = '\0';
			// BufferPosition을 초기화 합니다.
			bufferPosition = 0; 
		}  
	}

 

기본적으로 오렌지보드에서 블루투스 4.0도 블루투스 2.0버전과 사용법은 같습니다.(어플은 다르지만요) SoftWareSerial을 이용하여 4,5번 핀을 연결하셧으면 해당 핀에 데이터가 들어올 때까지 대기했다가, 데이터가 들어오면 해당 데이터를 read()함수를 이용하여 data라는 변수에 저장합니다.

 

이 때 들어온 데이터가 'F' 일 경우 해당 LED의 상태에 따라 LED를 키고 끄게 됩니다.(temp 값을 기준으로 LED가 꺼져있을 때 0, 켜져있을 때 1입니다.)

 

지난번 컨텐츠에서(안드로이드와 아두이노 간 블루투스 통신 기초 - 1. LED 깜박이기) 설명했던 것과 같이 어플에서 버튼을 누르면 'F'가 넘어가니 이를 이용하여 다른 프로젝트에서도 사용하실 수 있습니다.

* 다음 컨텐츠는 오렌지 BLE보드를 이용하여 아두이노 3색 LED를 각각 제어해 보겠습니다.

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

안드로이드, 아두이노, 오렌지보드, BLE

쿨리오76 2015-09-01 11:22:21

신기합니다. 무선으로 오렌지 보드를 제어할 수 있다니...

탱구 2015-09-01 16:11:54

주문해놨는데 어서 받아서 사용해보고 싶네요.

김상근 2015-09-27 12:44:49


avrdude: ser_open(): can't open device "\\.\COM3": 지정된 파일을 찾을 수 없습니다.


보드에 업로딩중에 문제 발생. 다음을 참고하세요.http://www.arduino.cc/en/Guide/Troubleshooting#upload

이런 오류가 발생하면 어떻게 해야하나요?

Requiem 2015-09-30 16:54:55

아두이노 IDE 프로그램에서 도구 - 포트:"COM3"이 활성화 되어 선택되어있는지 확인 부탁드립니다.
또한 Orange BLE보드를 USB에 접속 하신 후, 제어판-장치관리자에서 포트(COM&LPT) USB Serial Port(COM3)로 USB드라이버로 인식 되어있는지 확인 해보십시오.

김상근 2015-10-03 00:13:36

감사합니다 제대로 동작하네요~!~! 저 그리고 저 어플리케이션이 어떻게 구성되어있는지는혹시 알 방법이 없을까요? ㅎㅎ

김상근 2015-10-13 21:07:43

블루투스 연결을 하고 싶은데 그냥 일반연결으로는 연결이 거부되었습니다 라고 나옵니다. 이건 왜 그런건가요?

코딩적으로 연결하는 건 BTSerial.begin(9600)만 해주면 되는게 아닌가요?

kocoafabeditor 2015-10-14 08:55:27

BLE를 이용하실 경우 안드로이드 설정탭에서 일반 연결하는것은 안됩니다. 따로 어플에서 연결해주셔야 합니다.

아두이노에서 연결하는것은 SoftwareSerial.h 라이브러리를 호출후 SoftwareSerial.BTSerial(4,5); 를 이용하여 4, 5번핀을 연결하신후 BTSerial.begin(9600); 로 하신후 Serial을 사용하시면 됩니다.

kocoafabeditor 2015-10-14 08:55:44

위 경우는 오렌지 BLE 보드를 이용하실 경우 입니다.(4, 5번핀에 BLE 연결)

김상근 2015-10-20 21:05:29

감사합니다~!~!

변한빈 2015-11-06 11:12:21

정말 죄송하지만, 안드로이드 어플 소스 좀 얻을 수 있을까요??ㅠㅠㅠ
byh2674@naver.com
오렌지 보드도 사서 집에 있는데 ㅠㅠ

이상선 2015-11-12 10:35:56

혹시 관련 소스좀 받아 볼 수 있을까요? lsszz210@naver.com

최준환 2015-12-01 11:40:23

관련 소스 얻고싶습니다.. BLE3개나 샀는데 아무것도 못하고있어요.. ㅜㅜ 도와주십시오..
paul911014@naver.com
부탁드립니다..

정정균 2015-12-11 01:17:20

오렌지BLE "확인" 누르면 아래 와 같이 컴파일 오류가 발생하네요.
C:\Users\?젙洹?\Documents\Arduino\sketch_dec09a___\sketch_dec10a_BLE_masseage\sketch_dec11a_BLE_LED\sketch_dec11a_BLE_LED.ino:1:109: fatal error: SoftwareSerial.h: No such file or directory

compilation terminated.

exit status 1
컴파일 오류 발생.

**** 헤더가 잘못 되었나요? 스케치 버전1.6.7 입니다

구본휘 2016-02-11 18:43:58

안드로이드 어플 소스를 얻을수 있을까요??
이걸로 여러가지 공부를 더 해보고 싶습니다.
qhsgnl91@naver.com 부탁드립니다 ^^

kocoafabeditor 2016-02-12 08:57:42

죄송합니다. 여기에서 사용한 어플은 기본적으로 공개하지 않습니다. 학습-> 다운로드 탭에 공개하고 있는 소스 코드가 공용 소스 코드이니 이 소스 코드를 확인해주시기 바랍니다.

구본휘 2016-02-15 23:14:08

혹시 궁금해서 그러는데 여기서 만든 어플이 아니면 블루투스 연결이 안되는건가요?
qhsgnl91@naver.com 입니다

kocoafabeditor 2016-02-16 08:19:09

이 어플이 아니더라도 BLE 관련 어플이면 상관없습니다. 중요한 것은 BLE를 사용하는 것과 버튼을 누를경우 신호 F 가 전송되는 것만 확인하면 됩니다.

간단하게 테스트 해보실려면 구글 플레이스토어에서 nrf UART 2.0 어플을 받으셔서 실행 하신 다음 디바이스 연결 하시고 F를 전송해 보시면 테스트 해보실 수 있습니다.(F는 무조건 대문자여야 합니다.)

구본휘 2016-02-19 23:36:33

계속 질문드려서 죄송한데 제가 개인적으로 만든 어플이어도 되는건가요??

그리고 "Bluetooth Controller" 라는 어플로는 블루투스가 잡히지 않더라구요.. 그런 경우는 어떤 경우인가요??

kocoafab 2016-02-20 14:55:35

어플에 대한 제약사항은 없습니다.

해당 Bluetooth Controller 어플이 블루투스 4.0을 지원하는지 확인해주세요.

자윤 2016-03-01 17:15:26

올려주신 Sample을 가지고 처음으로 연결을 해서 깜박이는것을 테스트 해보았습니다.
안드로이드쪽에서 command를 변경하면서 공부를 하고 싶은데요. 안드로이드 소스 좀 공유 부탁드리고 싶습니다.
airjany@naver.com

윤영현 2016-04-20 15:35:06

저도 비슷한 프로젝트를 해야해서 안드로이드쪽 소스 공유가능하시면
ggolang11@naver.com 으로 공유해주시면 감사하겠습니다. 그럼...

이재환 2016-05-27 01:07:22

많은 도움되었습니다! 감사합니다!

이영민 2016-07-24 13:26:46

안녕하십니까? 블루투스와 BLE보드로 프로젝트를 준비중인 한 학생입니다. 혹시 안드로이드 소스 코드 공유가 가능하시다면 leeym8094@naver.com 으로 보내주시면 감사하겠습니다.

정유성 2016-08-29 18:41:40

프로젝트 준비중인데 참고하겠습니다. 감사합니다.

GloNet 2017-09-05 11:42:05

혹시 안드로이드 소스좀 받아 볼 수 있을까요? nyh9000@naver.com

좋은사람 2019-05-10 19:58:19

안드로이드 블루투스 소스좀 메일 보내주시면 감사하겠습니다..^^ . lanking@naver.com 안드로이드 공부중이라 절실히.. 필요해서요..

일과후T타임 2020-07-27 11:08:57

오렌지보드BLE를 위에 소스코드로 해서 연결했는데 영상처럼 블루투스 연결이 나타나지 않습니다.
휴대폰 기종이 리얼미X2인데 nRF toolbox어플을 받아서 연결할때는 연결이 잘됩니다.
소스코드가 문제일까요?(복사 붙여넣기 했어요) 어떻게 해결하면 좋을까요?

dalek 2020-09-03 10:08:42

감사합니다~

심룡이 2020-11-24 20:34:16

안녕하세요~ 안드로이드 앱 소스 좀 받아볼수 있나요?
메일 주소는 sung-j2@hanmail.net 아두이노 공부중인데 꼭~~ 부탁드립니다~~~

영혼지기 2021-11-05 03:32:44

저두 nRF toolbox어플을 받아서 연결할때는 연결이 잘됩니다.
그런데 nrf UART2.0에서도 잡히지 않고 예시로 준 앱을 실행하면 가운데 화면처럼 안되고 scanning devices... 상태가 계속되고 장치가 잡히지 않습니다.