아두이노프로세싱 프로그래밍

4.3 안드로이드 블루투스에 의한 request 및 아두이노로부터 온습도 데이터 수신

coding art 2020. 5. 16. 19:57
728x90

파이선 코딩 초보자를 위한 텐서플로우∙OpenCV 머신 러닝 2차 개정판 발행

https://blog.daum.net/ejleep1/1175

 

파이선 코딩 초보자를 위한 텐서플로우∙OpenCV 머신 러닝 2차 개정판 하이퍼링크 목차 pdf 파일

본서는 10월 26일 교보문고 퍼플 POD 출판 신청하였습니다. 일정 기간 검토 후 출판 결정이 될 것이며 11월 초부터 주문 구입이 가능합니다. 참고로 책 목차에 따른 내용별 학습을 위한 코드는 이미

blog.daum.net

_________________________________________________________________________________________________

 

안드로이드 블루투스 BT를 사용하여 HC-06 블루투스 보드를 설치한 아두이노 우노 보드의 붙박이 LED 13ON.OFF 제어와 더불어 5번 디지털 핀에 추가로 설치한 DHT11 센서로부터의 온습도 데이터를 수신해 보도록 하자.

4.2 안드로이드 스튜디오 블루투스 아두이노 LED on OFF 예제

http://blog.daum.net/ejleep1/986

이 작업을 위해서는 이미 작성된 안드로이드 블루투스 코드 BT는 더 이상 아무런 수정이 필요치 않다. 대신에 아두이노 보드에서 안드로이드 BT로부터의 request를 이벤트로 접수하고 아두이노에서 지정한 붙박이 LEDON/OFF 토글링 하고 연 이어 DHT11 센서로부터 읽은 온도와 습도 데이터를 전송하도록 하자. 안드로이드 BT에서는 Read Buffer를 이용하여 아두이노로부터 전송된 온도와 습도 값을 그대로 출력하도록 한다.

 

 

상대적으로 어려운 안드로이드 코드 작성이 가능하드라도 아주 쉬운 아두이노 배선 및 C 코딩이 배우기 무지 쉽지만 해보지 않은 경우 더 어력ㅂ게 느낄 수도 있으므로 그림에 정확히 배선을 설명하였다.아두이노 우노 보드에느 ㄴ파워가 5V 와 3V3 즉 3.3V가 연이어 위치해 있다.  3.3V 나 5V 에 다 동작하는 온습도 센서 DHT11의 데이터 즉 시그날 핀을 5번에 설치한다.

한편 블루투스 보드 HC-06 의 사용법은  RX 0번과 TX 1번애 연결된 핀을 뽑아 둔 상태에서 아두이노 코드 업로딩 하도록 하고 끝난 후 2개의 핀을 다시 설치한다. 그 이유는 2번 이상의 핀을 사용하기 위한 SoftwareSerial 기법이 있지만 HC-06 보드 보호를 위해 별도의 저항 배선을 해야 하므로 복잡해지기 때문에 피하도록 하자. 한편 아두이노에 전원이 공급되는 경우에는 HC-06 의 빨간색 LED 가 블루투스 Pairing 이 되기 전까지는 1초에 2회 이상 점멸하는 상태이다.

한편 안드로이드 코딩이 어려운 사용자는 BT.zip을 다운 받아 압축을 해제한 후에 바탕화면 사용자 폴더 안에 있는 AndroidStudioProjects폴더에 넣고 안드로이드 스튜디오에서 File≻Open에서 불러 오도록 한다. 이때에 아두이노로 치면 Build 과정 및 업로딩에 해당하는 Graddle build 작업이 이루어지는데 꽤 시간이 소요된다. Graddle Buil 작업이 완료되면 스마트폰과 안드로이드 스튜디오가 설치되어 있는 PC와 USB 케이블 연결 후 아래 그림에서처럼 실행 버튼을 클릭하도록 한다.
물론 제대로 안드로이드 스튜디오를 사용하려면 아두이노 C/C++ 코드를 다루는 이상으로 연습이 필요할 수 있을 것이다.

 

 

업로딩이 완료되면 다음과 같은 블루투스 화면을 볼 수 있다. BLUETOOTH IOBON 버튼을 누르면 승인 요청이 나타나며 예를 누르도록 한다.

 

 

 

 

SHOW PAIRED DEVICES 버튼을 누르면 ListView 형으로 블루투스 소스들이 출련된다. 자신이 알고 있는 블루투스 소스를 선택 클릳한다. 이때에 블루투스 비밀번호 입력이 요구되기도 한다. HC-06 의 비밀번호는 0000 Ehsms 1234 이다.

<ReadBuffer> 의 값을 관찰하자. 실내 온도는 25도 근방이며 비오거나 흐린 낭이면 습도는 40% 또는 그 이상이다. 온습도 측정 값 변화를 보려면 DHT11 센서를 손가락으로 꼭 집으면 상당히 빨리 변화 되는 값을 관찰할 수 있다.

 

 

 

온습도 측정을 위해서는 DHT11.h 라이브러리가 필요하다. 스마트폰 BT request 에 따라 ON/OFF LED 는 아두이노 사용자가 특정 핀에 LED 배선을 꾸밀 수도 있으며 간단하게는 13번 붙박이 LED를 이용하는 것이다.

 

 

 

 

Loop()에서 브룰투스 시리얼 버퍼 체크가 이루어진다. “1” 이 입력되면 그 전 LED 상태의 반대 상태를 만들도록 하고 3초 지연을 준다.

 

 

 

아두이노에서의 온습도 측정 주기는 사용자 임의로 조정할 수 있으나 최소 2초의 샘플링 시간이 필요하다. 하지만 이마저도 실내 온습도가 2초 동안에 거의 변화가 없으므로 ThingSpeak에서처럼 최소 15초 간격을 추천한다. 하지만 안드로이드 BT 코드의 성능을 quick으로 테스트 하려면 3~5초 정도의 측정 간격을 부여하는 것이 편리하다.

 

 

 

 

//DHT11_ANDROID_01.INO

#include <DHT11.h>      //라이브러리 부르기
int pin = 5;             //DHT11  데이타 핀 아두이노 연결
int led = 13;            //붙박이 LED 핀 번호
DHT11 dht11(pin);        // DHT11 클라스 명령     
unsigned long previousMillis = 0;
const long interval = 3000;
static uint32_t cnt=1;

void setup()  {
   Serial.begin(9600);    //통신속도 설정
   pinMode(led, OUTPUT);
   pinMode(pin, INPUT);
}
 
void loop()  {

  if(Serial.available()) {
    if(Serial.read() == '1')  {
      digitalWrite(led, !digitalRead(led));
    }
  }

  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    Serial.print("Count: ");
    Serial.print(cnt++);
  }
  delay(3000);
 
  int err;
  float temp, humi;
  if((err=dht11.read(humi, temp))==0) { //온습도 읽기
    Serial.print("temperature:");Serial.print(temp);
    delay(5000);
    Serial.print(" humidity:");Serial.print(humi);
    delay(5000);
    Serial.println();
  }
  else     { //에러 출력                           
    Serial.println();
    Serial.print("Error No :");
    Serial.print(err);
    Serial.println();   
  }
  delay(100);     //2초마다 측정
}//끝