Lab-09: 안드로이드-아두이노 블루투스 통신

 

앱인벤터로 아두이노와 블루투스로 연결하여 센서 확인하기

 

(1) 아두이노 회로도

 - DHT11 : 온도, 습도 센서,    - HC-06 : 블루투스 모듈

 

 

소스코드 오픈소스 사용

 

#include "DHT.h"       // 온도습도를 센서를 위한 DHT.h 라이브러리를 포함한다

#include <SoftwareSerial.h>                            //SoftwareSerial 통해 블루투스와 데이터 전송

 

SoftwareSerial BTserial(4,5); //Rx, Tx

#define DHTPIN 2      // DHT핀을 6번으로 정의한다(DATA)

#define DHTTYPE DHT11  // DHT타입을 DHT11 정의한다

DHT dht(DHTPIN, DHTTYPE);  // DHT설정 - dht (디지털2, dht11)

 

void setup()

Serial.begin(9600);    // 9600 속도로 시리얼 통신을 시작한다

BTserial.begin(9600);          // 9600 속도로 블루투스시리얼(소프트웨어시리얼) 통신을 시작한다

 

 

void loop()

int h = dht.readHumidity();  // 변수 h 습도 값을 저장

int t = dht.readTemperature();  // 변수 t 온도 값을 저장

BTserial.print("습도: ");

BTserial.print(h);

BTserial.print("% ");

BTserial.print("온도: ");

BTserial.print(t);

BTserial.print(" C");                           // 블루투스시리얼을 통해 문자열 전송

delay(1000);

 

(2) 인벤터를 통해 어플리케이션 만들기

1. 목록 선택(ListPicker) 컴포넌트 추가.

2. 목록 선택 이름 변경과 너비 변경

3. 텍스트 변경

 

블루투스의 연결의 경우 아두이노와 연결된 HC-06 신호 하나만 잡히지 않고 다른 여러신호가 잡힐 있기 때문에 목록을 만들어 원하는 연결을 선택할 있도록 하여야 한다.

1. 레이블(Lable) 컴포넌트 추가

2. 글꼴 크기 변경

3. 텍스트 란의 레이블1 텍스트를 공백으로 변경

1. 센서 탭의 시계(clock) 컴포넌트 추가 (단위 ms)

 

C언어의 delay 비슷한 동작을 .여기서는 1 간격으로 블루투스의 전송된 값을 읽기 위해 사용.

1. 연결 탭의 블루투스 클라이언트(Bluetooth client) 추가

 

어플리케이션을 블루투스 클라이언트로 사용 해야 추가하는 컴포넌트이다. 여기서는 아두이노의 HC-06 블루투스 서버가 되고 안드로이드가 클라이언트가 된다.


위의 블록과 같이 블록도 생성.

 

1. 번째 블록

   - 블루투스 목록을 선택하기 전에 블루투스 클라이언트에서 받는 서버의 주소와 이름들을 블루투스 목록으로 지정한다.

2. 번째 블록

   - 블루투스 목록에서 블루투스를 선택하게 되면 선택된 항목의 주소로 안드로이드에서 블루투스 클라이언트로 연결한다.

3. 번째 블록

   - 1 간격 마다 블루투스 연결 상태를 확인한다. 블루투스가 연결이 되어 있다면 다시 블루투스를 통해 받는 데이터를 바이트 크기로 받게 된다. 만약 바이트의 크기가 0보다 크다면 (데이터가 전송 된다면) 레이블1 블루투스 클라이언트를 통해 받은 바이트를 텍스트로 변경해 입력하게 된다.

 

 

(3) 결과

- 어플리케이션 화면

 

메인화면, 블루투스 연결 목록 버튼을 누른 화면, 연결 화면 순이다.

레이블 컴포넌트에 블루투스에서 전송한 데이터가 출력되는 것을 확인 있다.

 

 

- 아두이노와 어플리케이션 실행 화면

 

 

 

추가

1. 버튼을 통한 온도, 습도값 전송 받기.

2. 음성 변환 기능을 사용하여 온도 습도 텍스트 음성 변환.