지난번 글에서는 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
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, 아두이노 우노로 회로를 구성해 주겠습니다.
■ 연결
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 라이브러리를 먼저 설치해야 합니다.
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(10, 11); // 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, 4, 1, buf); String strHumi = dtostrf(humi, 4, 1, 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 |
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를 이용한 온습도계
'ESP8266' 카테고리의 다른 글
ESP8266 에 NodeMCU 펌웨어 및 Lua 개발환경 설치하기 (4) | 2016.06.30 |
---|---|
ThingSpeak를 모니터링 하는 알람/경보 기능 스마트폰 앱 소개 (0) | 2016.06.04 |
[아두이노] IoT 클라우드 Thingspeak 에 LM35 온도측정 데이터 올리기 (19) | 2016.06.01 |
IoT 센서 데이터를 전용 클라우드에 올려보고 활용해보기 - IoT 클라우드 Thingspeak.com (10) | 2016.05.29 |
ESP8266 와이파이 모듈 펌웨어 업데이트 (USB To TTL 모듈 이용) (0) | 2016.05.24 |