앱 인벤터 appinventor

앱인벤터와 아두이노 HC-06 블루투스에 의한 DHT22 온습도 모니터링

coding art 2018. 2. 12. 17:05
728x90
이미 1권의 초보자를 위한 아두이노 와이피이 코딩에서 시작하여 라즈베리 파이 나 앱인벤터를 포함하는 다양한 코딩이 이루어져 왔으나 본서에서는 마지막 남은 전인 미답의 관문이라 생각되는 데스크 탑이나 노트북에서 사용하는 Processing을 클라이언트로 하여 아두이노와 인터페이스하기 위한 코딩에 주력하였다.

물론 지금까지 다루어 오던 아두이노 엘렉트로닉스류의 코딩이 안드로이드 OS의 지원을 받는 스마트 폰에서 앱 코딩을 지원하는 앱인벤터와 조우하는 경우 아두이노 코딩이 보다 강력한 시너지를 받을 수 있었지만 한편 PCProcessing에서 시리얼/이더넷 인터페이스나 무선 와이파이에 의한 아두이노 인터페이스 코딩이 가능하다면 아두이노 사물인터넷 코딩의 끝판을 볼 수 있을 듯하다.

 

교보문고에서 판매 중입니다. 342 페이지 가격 15800원 개인출판(POD)이므로 주문 배송기간이 일주일 정도 소요됩니다.

 

 
 

아두이노 우노 블루투스 배선

 

 

HC-06의 2개의 블루투스 데이터 선은 RX 와 TX 이다. 아두이노 보드의 0, 1번 핀은 USB 케이블에 의해 코드를 시리얼 방식으로 업로딩할 때 사용하기 때문에 블루투스의 RX, TX  데이터 전송 점퍼 선을 뺏다 끼웠다 하기 대단히 불편하므로 SoftwareSerial.h  라이브러리에 의해 2, 3번 핀을 사용하기로 한다. Adafruit 사의 모터 쉴드를 사용하는 블루투스 방식의 RC카  코딩에서는 디지털 핀들의 대부분이 모터 쉴드에 의해서 점유되어 사용되기 때문에 위와 같이 2번과 3번 핀을 대상으로 SoftwareSerial을 선언하여 사용할 여유가 없기 때문에 0, 1번 핀을 뺏다 끼웠다 할 수밖에 없는 점을 이해하자.

 

 

클라스 선언을 통해 BTSerial (2,3)으로 선언한다. 블루투스 센서 보드의 TX 가 아두이노 우노에서는 RX 인 2번으로 매칭된다. 마찬가지로 블루투스 센서 보드의 RX는아두이노 우노에서 TX 인 3번으로 매칭된다. 즉 블루투스 보드의 표기와 아두이노에서의 표기가 서로 반대되는 점에 유의한다.

DHT22 온습도 센서 라이브러리 DHT.h를 헤더파일에 설치하고 디

 

지털 데이터 핀은 5번에 설치하기로 한다.

USB 케이블에 의한 PC와의 통신은 9600, 블루투스 통신속도 또한 9600 으로 설정한다. 아울러 DHT22 도 비슷한 방식으로 통신속도를 설정하는데 DHT11 의 경우는 굳이 이러한 설정이 필요 없다는 점을 지적한다. 시간지연 delay(2000)은 DHT22 온습도 센서의 최소 샘플링 시간을 의미한다.

 

 

DHT22 온습도 센서의 데잍 읽기는 클라스  명령 dht를 사용하여 readTemperature() 와 readHumidity() 명령을 사용한다.

읽어 들인 데이터는 막바로 블루투스 채널 즉 BTSerial을 사용하여 스마트폰 앱 인벤터에 송신 출력한다.
굳이 PC 화면에 시리얼 모니터 기능을 사용하고 싶으면 Serial.print(0 명령을 추가하면 된다. 특히 주의할 점은 DHT22 온습도 센서는 DHT11 온습도 센서에 비하여 소숫점 1자리까지 정밀한 측정 결과를 제공한다. 따라서 출력 시에 소수 이하 자릿수를 반드시 명시하도록 한다. 온도의 경우 소수이하 첫째자리까지 출력하도록 하며 반면에 상대 습도의 경우는 기상청의 사례에서처럼 소수이하가 필요 없는 듯하므로 정수 값까지만 취하도록 한다.

 

 

스마트폰에서 앱인벤터 코딩에 의해 블루투스 통신을 하려면 스마트폰 환경 설정에서 블루투스 보드 HC-06 이 등록되어 있어야 한다.

 

앱인벤터 코딩은 DHT11 앱인벤터 인터페이스와 거의 동일하다. 코딩을 위한 콤포넌트로서 블루투스 통신을 위한 ListPicker 1개, 수평 배열 속에 라벨 1개를 설정한다, temp & Humidity 텍스트로 명명된 이 라벨 데이터는 아두이노 우노에서 보내는 온습도 데이터를 디스플레이 하는 자리이다.

 

 

아울러 블루투스 크라이언트 1개와 Clock 1개가 필요하다. 클락의 시간간격은 DHT22 의 샘플링 타임 2초를 고려하여 2000 으로 설정한다.

 

편집된 블록은 아래와 같다. DHT11 온습도 센서를 사용할 때와 동일한 형식이다.

 

 

앱인벤터 편집기에서 MIT AI2 Companion을 선택 클릭하여 실행하고 스마트 폰으로 QR 코드를 스캔해주면 DHT22 스크린이 생성된다. 스크린에서 DHT22를 터치하면 그림과 같이 이미 사용했던 블루투스 ID를 포함하여 여러 개의 블루투스 ID 가 나타난다.

이중 가장 윗부분의 ID 가 최근에 등록된 ID 이므로 선택 터치하면 스크린에 Connected with DHT22 메시지와 함께 블루투스에 의해 송신된 온습도 데이터 디스플레이 결과를 아래와 같이 받아 볼 수 있다.

 

 

appinventor_BT_DHT22_01

 

#include <SoftwareSerial.h>
#include <DHT.h>;
#define DHTPIN 5     // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE);
SoftwareSerial BTSerial(2,3); //(RX,TX)

float hum;  //Stores humidity value
float temp; //Stores temperature value

void setup()  { 
  Serial.begin(9600);
  BTSerial.begin(9600);
  dht.begin();
  delay(2000);
}

void loop()  {
  hum = dht.readHumidity();//온도 읽기
  temp= dht.readTemperature();//습도 읽기
 
  BTSerial.print("Humidity: ");
  BTSerial.print(hum,0);// 소수 이하 자리 없음
  BTSerial.print(" %, Temp: ");
  BTSerial.print(temp, 1);//소수 이하 1자리 허용
  BTSerial.println(" Celsius");
  delay(2000);// 샘플링 간격 2초 부여
}//끝