DHT11 온습도 센서를 이용하여 온도와 습도를 측정해 보자 (2)

image

이전에 DHT11 온습도 센서를 이용하여 시리얼을 통해 온도와 습도 값을 전달 받는 것을 해보았습니다.

이번에는 그때 해보았던 것을 조금 응용하여

시리얼을 통해 요청이 있을때만 온도와 습도 조건을 라즈베리파이로 전송하는 코드를 만들어 보겠습니다.

방법은 간단합니다.

시리얼 포트로 값이 들어오는지 계속 확인하다가 값이 들어오면 문자열로 읽어

명령어인지 확인하고 명령어 이면 그 명령어에 해다하는 행동을 하는 것입니다.

이 코드에서는 Serial.available()로 시리얼에 들어오는 신호를 계속 확인하다가 시리얼로 어떤 값이 들어오게 되면

ch 변수로 한 문자식 읽어 input 문자열 함수를 얻습니다. 이 input변수의 문자열과 이미 정의해둔 cmd변수의 문자열과 비교하여

두 문자열이 일치 한다면 cmd에 저장된 temp에 해당하는 행동인 시리얼을 통해 라즈베리파이로 온도와 습도의 값을 보내는 코드 입니다.

아래와 같이 시리얼 모니터에 temp라고 입력하면 습도와 온도 값을 알려줍니다.

image

현재 습도는 15% 온도는 섭씨 29도로 나오는데 아무래도 습도를 계측하는 부분에 문제가 있는 것 같습니다.

정확한 습도는 주문해둔 DHT22가 오는 대로 다시 확인해 봐야 겠습니다.

이 내용을 잘 응용하면 아두이노는 독립적으로 구동하고

라즈베리파이가 필요할때만 원하는 값을 전송 받아 서버에서 처리할 수 있을 것 같습니다.

아마 이보다 더 좋고 합리적인 방법이 분명히 있겠지만 일단은 이정도로 기능을 구현해 보았습니다.

코드는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <dht11.h>


dht11 DHT11;

#define DHT11PIN 2
String input = "";
String cmd = "temp";
char ch;
void setup() {
  Serial.begin(9600);
 

}

void loop() {
 
  while(Serial.available()>0) {
    ch = Serial.read();
    input.concat(ch);
  }
  delay(10);
  if ((cmd.compareTo(input)  == 0) && (Serial.available() == 0) ) {
    DHT11.read(DHT11PIN);
    Serial.print("Humidity (%): ");
    Serial.println((float)DHT11.humidity, 2);
    Serial.print("Temperature (oC): ");
    Serial.println((float)DHT11.temperature, 2);
    input = "";
  } else if((cmd.compareTo(input)  != 0) && (Serial.available() == 0) ) {
    input = ""
  }
 
}
cs
Previous
Next Post »