반응형

지난번 글에서는 LM35를 이용해서 간단하게 IoT 클라우드 서비스인 ThingSpeak.com 에 온도값을 올려 보았습니다. 이번에는 정밀한 측정이 가능한 DHT22(AM2302) 센서의 측정값을 ThingSpeak 에 올려보기로 합니다. DHT22 센서에 대해서는 [정밀한 온습도 센서 DHT22 (AM2302) 의 사용] 이라는 글에서 이미 다루어 본 적이 있습니다. 저가형 온습도 센서인 DHT11 의 상위 제품으로서 측정값의 범위가 넓고 오차가 적습니다. 대신 값은 좀 비싸죠. DHT11과 DHT22 의 특성은 다음과 같습니다.

 

 

 

  DHT11 DHT22
 온도 측정범위  0 ~ 50℃  -40 ~ 80
 온도 측정오차  2  0.5
 습도 측정범위  20 ~ 80%  0 ~ 100%
 습도 측정오차  5%  2%
측정 간격  1초  2초

 


 

 

 

 

 

 

▲ DHT11 과 DHT22 (AM2302) 의 비교표

 

이를 이용해서 ThingSpeak.com 에 올려서 우리집의 온도와 습도의 정확한 값을 장소에 구애 없이 모니터링 해 보겠습니다.

 

먼저 아래의 내용을 구현 하려면 아래의 링크를 참조하여 ThingSpeak.com 에 온도와 습도를 저장할 field 2개 짜리 채널이 설정되어 있어야 하며 ESP8266 모듈에 AT Command 펌웨어가 올라가 있어야 합니다. 물론 와이파이도 필요 합니다.

 

■ 사전 참고 글

 

[아두이노] - ESP8266 와이파이 모듈 펌웨어 업데이트 (USB To TTL 모듈 이용)

[아두이노] - [아두이노] 와이파이 모듈 ESP8266 펌웨어 업데이트

[아두이노] - [아두이노] 와이파이 모듈(ESP8266) 공유기 연결

[아두이노] - IoT 센서 데이터를 전용 클라우드에 올려보고 활용해보기 - IoT 클라우드 Thingspeak.com

[아두이노] - [아두이노] 정밀한 온습도 센서 DHT22 (AM2302) 의 사용

USB to TTL 모듈이 있으면 첫번째 글을 참고해서 ESP8266 모듈의 펌웨어 업그레이드를 해 주시면 되고 아니라면 두번째 글을 참고, ThingSpeak 채널 설정은 4번째 글을 참고 하시면 됩니다. 쉽습니다. 물론 다 되어 있으면 아래 와이파이 설정 과정은 생략하셔도 됩니다.

 

ESP8266에 펌웨어 설치가 끝났으면 ESP8266을 와이파이에 연결을 해 주어야 합니다. 아래와 같이 해 주시면 됩니다.

 

ESP8266 와이파이 연결

 

아두이노와 ESP8266(ESP-01)의 연결은 위와 같이 합니다. 펌웨어 업데이트 시의 연결과 다른 점은 GPIO0 단자의 연결을 없앤 것입니다.

 

일단 시리얼 모니터를 열고 9600 보드레이트로 설정합니다.

 

1. 펌웨어 정상작동 확인

시리얼 모니터에 'AT' 를 입력합니다. 

'OK' 가 나오면 펌웨어가 정상적으로 설치된 것입니다.

 

2. ESP8266 모드 세팅

'AT+CWMODE=1' 을 입력해서 ESP8266 을 Station (Client) 로 세팅 합니다.

 

3. 연결할 와이파이 찾기

'AT+CWLAP' 명령을 입력해서 연결 가능한 와이파이를 찾습니다. 자신이 연결하고자 하는 와이파이가 목록에 나오는지 확인 합니다.

 

4. 와이파이 연결

AT+CWJAP="연결할 와이파이 이름","패스워드" 를 입력해서 와이파이에 연결 합니다.

 

5. 와이파이 연결 확인

'AT+CIFSR' 명령을 이용해서 ESP8266에 할당된 IP 가 정상적으로 나오면 연결이 잘 된 것입니다.

 

※ 한 번 설정된 와이파이 연결 정보는 설정을 바꾸기 전 까지는 ESP8266의 전원을 끄더라도 계속 설정이 유지됩니다.

 

DHT22 온습도 센서의 핀배열 입니다.

 

이제 ESP8266, DHT11, 아두이노 우노로 회로를 구성해 주겠습니다.

 

■ 연결

 

esp8266_dht22_thingspeak.fzz
다운로드

 

DHT22는 3.3V 또는 5V 전원에 연결하면 됩니다. 저는 5V에 연결했습니다. 신호를 받을 SDA 핀은 디지털 2번에 연결했습니다. 그리고 VCC 와 SIgnal (SDA) 단자 사이에 10KΩ 풀업 저항을 달아 주었습니다.

 

 

 

DHT22 아두이노 우노
VCC 5V
SDA D2
GND GND

 

 

 

ESP8266 아두이노 우노
TXD D10
CH_PD 3.3V
VCC 3.3V
GND GND
RXD D11

 

 

3.3V 및 DHT22 연결을 위해서 브레드보드 등을 이용해야 합니다.

 

실제 연결 모습

 

 

■ 소스

DHT 라이브러리를 먼저 설치해야 합니다.

DHT.zip
다운로드

 

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <SoftwareSerial.h>
#include <stdlib.h>
#include <DHT.h>
 
#define DHTPIN 2        // SDA 핀의 설정
#define DHTTYPE DHT22   // DHT22 (AM2302) 센서종류 설정
 
// 업로드 알림 LED 설정 (아두이노 우노 On Board LED)
int ledPin = 13;
 
// 자신의 thingspeak 채널의 Write API key 입력
String apiKey = "Thingspeak channel write API Key";
 
SoftwareSerial ser(1011); // RX/TX 설정, serial 객체생성
DHT dht(DHTPIN, DHTTYPE);
 
void setup() {
  dht.begin();
  //알림 LED 아웃풋 설정
  pinMode(ledPin, OUTPUT);
  //시리얼통신속도 9600보드레이트 설정    
  Serial.begin(9600);
  //소프트웨어 시리얼 시작
  ser.begin(9600);
  //ESP8266 Reset
  ser.println("AT+RST");
}
 
void loop() {
  // blink LED on board
  digitalWrite(ledPin, HIGH);   
  delay(200);               
  digitalWrite(ledPin, LOW);
 
  // DHT22 값 읽음
  float temp = dht.readTemperature();
  float humi = dht.readHumidity();
 
  // String 변환
  char buf[16];
  String strTemp = dtostrf(temp, 41, buf);
  String strHumi = dtostrf(humi, 41, buf);
  
  Serial.println(strTemp);
  Serial.println(strHumi);
  
  // TCP 연결
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += "184.106.153.149"// api.thingspeak.com 접속 IP
  cmd += "\",80";           // api.thingspeak.com 접속 포트, 80
  ser.println(cmd);
   
  if(ser.find("Error")){
    Serial.println("AT+CIPSTART error");
    return;
  }
  
  // GET 방식으로 보내기 위한 String, Data 설정
  String getStr = "GET /update?api_key=";
  getStr += apiKey;
  getStr +="&field1=";
  getStr += String(strTemp);
  getStr +="&field2=";
  getStr += String(strHumi);
  getStr += "\r\n\r\n";
 
  // Send Data
  cmd = "AT+CIPSEND=";
  cmd += String(getStr.length());
  ser.println(cmd);
 
  if(ser.find(">")){
    ser.print(getStr);
  }
  else{
    ser.println("AT+CIPCLOSE");
    // alert user
    Serial.println("AT+CIPCLOSE");
  }
    
  // Thingspeak 최소 업로드 간격 15초를 맞추기 위한 delay
  delay(16000);  
}
cs
 
LM35 전송과 다른 점은 LM35는 온도만 전송했지만 습도 데이터가 늘어났으므로 습도값을 field2 에 추가로 전송해 주었습니다. 습도값 추가로 63, 64행이 추가 되었습니다.
 

 

https://youtu.be/sS-2WsQTTAQ

 

 

https://thingspeak.com 에 접속해서 데이터 업로드가 잘 되는지 관찰해 보았습니다. 실시간 그래프로 잘 나오고 있습니다.

 

이상으로 DHT22, ESP8266 을 이용해서 센서의 값을 와이파이 연결을 통해서 IoT 클라우드 서비스인 ThingSepak 에 연동해 보았습니다.

 

이런 IoT 클라우드 연동은 많은 활용분야가 있을 것 같습니다. 지금까지는 온도, 습도 등을 연동해 보았지만 인체감지 센서를 사용해서 외부인 침입 모니터링, 화재 및 가스탐지 센서를 이용한 재난 모니터링도 충분히 가능 할 것 같습니다. 그것도 원격지에서 스마트폰을 이용해서 말이죠. 치매나 건망증이 심한 분들 집에 만들어서 놓아드리면 좀 더 안심이 될 것 같습니다.

 

관련글 모음

[아두이노] - [아두이노] IoT 클라우드 Thingspeak 에 LM35 온도측정 데이터 올리기

[아두이노] - IoT 센서 데이터를 전용 클라우드에 올려보고 활용해보기 - IoT 클라우드 Thingspeak.com

[아두이노] - ESP8266 와이파이 모듈 펌웨어 업데이트 (USB To TTL 모듈 이용)

[아두이노] - [아두이노] 와이파이 모듈 ESP8266 펌웨어 업데이트

[아두이노] - [아두이노] 이더넷모듈(ENC28J60)의 사용 - 설정,웹서버,트위터,웹클라이언트

[아두이노] - [아두이노] 와이파이 모듈(ESP8266)을 이용해 인터넷으로 LED제어

[아두이노] - [아두이노] 와이파이 모듈(ESP8266) 공유기 연결

[아두이노] - [아두이노] 정밀한 온습도 센서 DHT22 (AM2302) 의 사용

[아두이노] - [아두이노] 온습도 센서와 LCD를 이용한 온습도계

[아두이노] - [아두이노] 아두이노 온도 습도 센서의 사용 (DHT11센서)

[아두이노] - [아두이노] 아두이노를 이용하여 온도를 측정해보자

 

반응형

+ Recent posts