아두이노와 Processing

esp32 보드에서 DHT22에 의한 온습도 측정

coding art 2021. 1. 22. 13:18
728x90

DHT22 DHT11과는 달리 소숫점 단위의 측정이 가능한 온습도 센서로서 영하의 온도 범위까지 측정이 가능한 정밀한 센서이다. 겨울 철 난간이나 집 밖의 화단에서 온습도를 측정하려면 필수적일 것이다. 핀 구조도 DHT11 과 동일하여 아두이노 우노 보드에서의 코드 작업은 거의 유사할 수도 있지만 클럭 주파수가 높은 ESP32 보드에서는 유의해야 할 점이 있다.

DHT22를 사용하여 온습도를 측정하기 위해서는 우선 DHT.h 라이브러리를 설치해야 할 필요가 있다. 물론 자신이 GitHub에서 수집한 라이브러리를 설치할 수도 있겠으나 이제 부터는 아두이노 IDE의 스케치 탭의 라이브러리 관리에서 검색하여 installed 여부를 확인한 뒤 설치하도록 하자.

아울러 Adafruit Unified Sensor 라이브러리 설치 요구가 뒤따르는데 함께 설치하도록 한다. 이로서 헤딩에 사용할 DHT.h 라이브러리 사용을 위한 준비가 이루어졌다.

DHT22 온습도 센서를 사용하여 측정한 값을 ThingSpeak 사물인터넷에 전송 하는 과정은 하던 그대로 적용하면 되며 단지 DHT22를 사용 코딩 작업을 함에 있어 특기할만한 점을 하나 지적하도록 하자. ESP32 보드는 Flash Frequency 16M를 사용하는 아두이노 우노 보드와는 다른 80MHz 주파수를 사용하므로 그 조율을 위한 특별한 인수를 하나 더 아래의 코드 사례에서처럼 DHT 클라스 선언 시 에 인수 값 “15“를 입력해 줘야 할 필요가 있다.

setup()에서는 USB 케이블에 의한 시리얼 통신과 마찬가지로 dht.begin() 명령이 필수적이다.

loop() 문에서 클라스 명령 dht를 사요하야 readTemperature() 명령과 readHumidity() 명령을 사용하여 온습도 값을 ESP32 GPIO 핀으로부터 읽어 오자.

아래의 그래프들은 DHT22 온습도 센서에 의한 간밤의 1분 단위 측정 결과이다. ThingSpeak 사물인터넷에 데이터 전송은 앞의 블로그를 참조하기 바란다.

//Thingspeak_esp32_dracena_compacta_DHT22

#include <ThingSpeak.h>

#include <WiFi.h>

#include <DHT.h>

int DHTPIN = 22; // what pin we're connected to

#define DHTTYPE DHT22 // DHT 22 (AM2302)

DHT dht(DHTPIN, DHTTYPE, 15);

 

char ssid[] = "droidan1234"; // your network SSID (name)

char pass[] = "dddddddddd"; // your network password

 

WiFiClient client;

 

unsigned long myChannelNumber = 899023;//Your channel ID

const char * myWriteAPIKey = "Y7RAJNWH7QRXV2UD";//Your channel API write key

 

unsigned long sampling_time = 60000;

 

void setup() {

Serial.begin(115200); //Initialize serial

WiFi.mode(WIFI_STA);

ThingSpeak.begin(client); // Initialize ThingSpeak

dht.begin();

delay(2000);

}

 

void loop() {

int err,xsoil,xvolt,tvolt;

float volt, temp, tmp, humi,hum, soil;

 

if(WiFi.status() != WL_CONNECTED) {

Serial.print("Attempting to connect to SSID: ");

while(WiFi.status() != WL_CONNECTED) {

WiFi.begin(ssid,pass); // Connect to WPA/WPA2 network

Serial.print(".");

delay(5000);

}

Serial.println("\nConnected.");

}

 

 

tmp = dht.readTemperature();

hum = dht.readHumidity();

Serial.print(F("Humidity: "));

Serial.print(hum);

Serial.print(F("% Temperature: "));

Serial.print(tmp);

 

// Write to ThingSpeak. There are up to 8 fields in a channel

// set the fields with the values

ThingSpeak.setField(1, tmp);

ThingSpeak.setField(2, hum);

int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

delay(sampling_time); //

 

}//End