Cari Kode

Ukur Suhu dan Kelembaban menggunakan M5Stack Core 2 dengan DHT11 dan DHT22 - Robojax

Ukur Suhu dan Kelembaban menggunakan M5Stack Core 2 dengan DHT11 dan DHT22 - Robojax

Panduan ini menunjukkan cara menghubungkan sensor suhu dan kelembapan DHT11 atau DHT22 ke M5Stack Core2 dan menampilkan pembacaannya di layar sentuh bawaannya. M5Stack Core2 adalah papan pengembangan berbasis ESP32 yang kuat dengan LCD 2 inci, menjadikannya platform ideal untuk membuat stasiun pemantauan lingkungan mandiri. Proyek ini sangat cocok untuk berbagai aplikasi, seperti:

  • Membangun stasiun cuaca desktop untuk memantau lingkungan rumah atau kantor Anda.
  • Membuat pencatat suhu dan kelembapan untuk rumah kaca, terarium, atau kandang reptil.
  • Mengembangkan node pemantauan lingkungan sederhana untuk proyek IoT yang lebih besar.
  • Belajar cara menghubungkan sensor seri DHT yang populer menggunakan modul tampilan modern.

Komponen Perangkat Keras

  • M5Stack Core2 (papan pengembangan ESP32 dengan layar)
  • Sensor DHT11 (baik sensor telanjang dengan resistor 10kΩ atau modul PCB)
  • Sensor DHT22 (AM2302) (baik modul putih atau modul merah/hitam)
  • Papan roti dan kabel jumper

Panduan Pengkabelan

Pengkabelannya sederhana, karena M5Stack Core2 menyediakan port kompatibel Grove yang nyaman. Video ini menunjukkan koneksi pada port ekspansi M5Stack Core2. (di video pada 03:52)

Berikut ringkasan koneksi untuk semua jenis sensor:

  • Pin Data: Hubungkan pin data/out sensor ke GPIO 27 pada M5Stack Core2. (di video pada 03:58)
  • Pin Daya (VCC/+): Hubungkan pin daya sensor ke pin 3.3V pada M5Stack Core2. (di video pada 04:11)
  • Pin Ground (GND/-): Hubungkan pin ground sensor ke pin GND pada M5Stack Core2. (di video pada 04:17)

Jika Anda menggunakan sensor DHT11 atau DHT22 telanjang, Anda harus menambahkan resistor pull-up (biasanya 5.6kΩ hingga 10kΩ) antara pin data dan pin 3.3V. (di video pada 04:50)

Penjelasan Kode

Kode ini dirancang agar sangat dapat dikonfigurasi, memungkinkan Anda dengan mudah mengubah jenis sensor, mode tampilan, warna, dan kecepatan penyegaran. Berikut rincian bagian utama yang dapat dikonfigurasi pengguna:

Pengaturan Sensor dan Tampilan

Di bagian atas kode, Anda dapat menentukan jenis sensor dan mode tampilan. Untuk memilih sensor Anda, Anda harus memberi komentar atau menghapus komentar pada baris #define yang benar. (di video pada 13:43)

#define DHTPIN 27 
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

Misalnya, untuk menggunakan DHT11, Anda akan memberi komentar pada #define DHTTYPE DHT22 dan menghapus komentar pada #define DHTTYPE DHT11.

Variabel unit mengontrol data apa yang ditampilkan di layar. (di video pada 09:33)

unsigned int unit=3;//
//              0=C celsius
//              1=F fahrenheit
//              2=Humidity
//              3=C and Humidity
//              4=F and Humidity
//              5=C and F

Anda dapat mengatur ini ke nilai apa pun dari 0 hingga 5 untuk menampilkan Celsius, Fahrenheit, Kelembapan, atau kombinasi dari semuanya.

Variabel refresh mengatur seberapa sering sensor dibaca dan layar diperbarui, dalam milidetik. (di video pada 09:15)

const int refresh=3000;//read every 3 seconds

Opsi Kustomisasi

Kode ini juga memungkinkan Anda untuk menyesuaikan teks dan warna di layar. Array title dan unitText menyimpan label dan unit yang ditampilkan di layar. (di video pada 10:01)

char *title[]={"Temperature","Temperature","Humidity"};
char *unitText[]={"C","F","%"};

Anda dapat mengubah string ini untuk menampilkan teks dalam bahasa Anda sendiri. Variabel warna seperti backgroundColor, temperatureTitleColor, dan humidityValueColor dapat diatur ke salah satu nilai warna TFT yang telah ditentukan atau nilai hex kustom Anda sendiri. (di video pada 10:21)

Demonstrasi Proyek Langsung

Video ini memberikan demonstrasi komprehensif proyek ini. Ini menunjukkan tampilan bekerja dengan sensor DHT22 dalam berbagai mode, termasuk Fahrenheit, kelembapan saja, Celsius dengan kelembapan, dan akhirnya Celsius dan Fahrenheit. (di video pada 21:03) Demonstrasi ini juga mencakup pengujian dengan sensor DHT11, baik dengan modul PCB maupun sebagai sensor telanjang dengan resistor pull-up. (di video pada 22:22) Terakhir, video ini menunjukkan apa yang terjadi ketika kabel terputus, yang menghasilkan pembacaan "None" di layar. (di video pada 22:38)

Bab Video

  • [00:00] Pendahuluan dan Gambaran Proyek
  • [00:55] Fitur M5Stack Core2
  • [02:22] Spesifikasi Sensor DHT11 vs DHT22
  • [03:52] Panduan Pengkabelan
  • [07:40] Menginstal Driver Papan dan Pustaka
  • [09:01] Penjelasan Kode
  • [21:03] Demonstrasi Langsung
  • [22:53] Kesimpulan dan Penutup

Gambar

M5Stack Core2: Main
M5Stack Core2: Main
M5Stack Core2: Included
M5Stack Core2: Included
M5Stack Core2: side-right
M5Stack Core2: side-right
M5Stack Core2: DHT11, DHT22
M5Stack Core2: DHT11 DHT22
366-M5Stack Core 2 ESP32 with DHT11 and DHT22
Bahasa: C++
/*
 * file: M5Stack_DHT11_DHT22 
  Measure Temperature and Humidity using DHT11, DHT22, DHT21 Sensor and display on M5Stack Core 2 ESP32 IoT board
 * Written by Ahmad Shamshiri on April 22, 2021 in Ontario, Canada
 * Watch video instruction https://youtu.be/ZDZm_QOlCJo
 www.Robojax.com YouTube http://www.youtube.com/robojaxTV
 
 * 
  * 
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact. * 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

  
*/
#include <M5Core2.h>


const int refresh=3000;//read every 3 seconds

unsigned int unit=3;//
//              0=C celsius
//              1=F fahrenheit
//              2=Humidity
//              3=C and Humidity
//              4=F and Humidity
//              5=C and F

char *title[]={"Temperature","Temperature","Humidity"};
char *unitText[]={"C","F","%"};

//set more color. see https://docs.m5stack.com/#/en/api/lcd

unsigned int backgroundColor= YELLOW;
unsigned int temperatureTitleColor= BLACK;
unsigned int temperatureValueColor= RED;

unsigned int humidityTitleColor= BLACK;
unsigned int humidityValueColor= RED;

unsigned int background2Color= TFT_CYAN;

uint8_t titleV,unitV,degree;

uint8_t line1TitleY=3;
uint8_t line1ValueY=40;

uint8_t line2TitleY=110;
uint8_t line2ValueY=150;

#include "DHT.h"
#define DHTPIN 27 
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
float temperatureCValue,temperatureFValue, humidityValue,myValue1,myValue2;// 
// ****** DHT settings end (Robojax.com )

void readTemperature();
void displayTemperature(uint8_t line );
void setup() {

  M5.begin();
  M5.Lcd.setTextSize(4); 

  Serial.begin(9600);//default is 115200
  Serial.println("M5Stack DHT Test ");

 // Robojax.com code for ESP32 DHT11 DHT22
   dht.begin();  
delay(1000);
}

void loop() {
  readTemperature();//reads the temperature and humidity
  displayMyValue();//displays temperature or humidity

  //printOnSerial();
   delay(refresh);
}


/*
 * www.robojax.com
 * see video https://youtu.be/ZDZm_QOlCJo 
 * for details
 */
void readTemperature()
{
  temperatureCValue = dht.readTemperature();// Read temperature as Celsius (the default)
  humidityValue = dht.readHumidity();// Reading humidity 
  temperatureFValue = dht.readTemperature(true);// Read temperature as Fahrenheit (isFahrenheit = true)

}//readTemperature() end

void displayMyValue()
{
  
  switch (unit) {
    case 1:
      titleV = 1;
      unitV =1; 
      myValue1= temperatureFValue;    
      displayTemperature( 1 , true);    
    break;

    case 2:
      titleV = 2;
      unitV =2;   
      myValue1= humidityValue;  
     displayTemperature( 1, false );    
    break;

    case 3:
      titleV = 0;
      unitV =0;     
      myValue1= temperatureCValue;      
      displayTemperature( 1 , true);
 
      titleV = 2;
      unitV =2;  
      myValue2= humidityValue; 
      displayTemperature( 2, false );               
    break;

    case 4:
      titleV = 1;
      unitV =1;     
      myValue1= temperatureFValue;      
      displayTemperature( 1 , true);
 
      titleV = 2;
      unitV =2;  
      myValue2= humidityValue; 
      displayTemperature( 2 , false);      
    break;

    case 5:
      titleV = 0;
      unitV =0;     
      myValue1= temperatureCValue;      
      displayTemperature( 1, true);
 
      titleV = 1;
      unitV =1;  
      myValue2= temperatureFValue; 
      displayTemperature( 2 , true);         
    break;

    default:
      titleV = 0;
      unitV =0;    
      myValue1= temperatureCValue;
      displayTemperature(1, true);    
    break;
    
  }

 
}//displayMyValue() end

/*
 * displayTemperature(uint8_t line, bool degree)
 * Displays temperature on Core2 screen
 * See video for details
 * https://youtu.be/ZDZm_QOlCJo
 */
void displayTemperature(uint8_t line, bool degree)
{
  uint8_t Y_lineTitle,Y_lineValue;
  float valueToDisplay;
  //M5.Lcd.fillScreen(backgroundColor);
  M5.Lcd.setTextColor(temperatureTitleColor);  
 
  M5.Lcd.setTextSize(4);
  if(line ==1){
    Y_lineTitle =line1TitleY;
    Y_lineValue =line1ValueY;
    valueToDisplay=myValue1;
    //M5.Lcd.fillRect(0, 0, 340, line2TitleY, backgroundColor);            
   M5.Lcd.fillScreen(backgroundColor);     
  }else{
    //M5.Lcd.drawRect(0, line2TitleY, 340, 240-line2TitleY, background2Color);
    M5.Lcd.fillRect(0, line2TitleY, 340, 240-line2TitleY, background2Color);      
    Y_lineTitle =line2TitleY;
    Y_lineValue =line2ValueY; 
    valueToDisplay=myValue2;
  }

  M5.Lcd.setCursor(3,Y_lineTitle); 
 
  M5.Lcd.print(title[titleV]);
  M5.Lcd.setTextColor(temperatureValueColor);    
  M5.Lcd.setTextSize(7);  
  M5.Lcd.setCursor(3,Y_lineValue);  
  M5.Lcd.printf("%.1f", valueToDisplay);  
  if(degree){
   printDegree();//print degree symbol if needed
  }
  M5.Lcd.print(unitText[unitV]);    
}
/*
 * displayHumidity()
 * displays humidity from DHT11 or DHT22 on Core 2
 * written by Ahmad Shamshiri
 * on April 21, 2021 in Ajax, Ontario, Canada
 * www.robojax.com
 */
void displayHumidity()
{

  M5.Lcd.setTextColor(humidityTitleColor);      
  M5.Lcd.setTextSize(4);    
  M5.Lcd.setCursor(3,110); 
  M5.Lcd.print(title[2]); //humidity title   
  M5.Lcd.setTextColor(humidityValueColor);    
  M5.Lcd.setTextSize(7);  
  M5.Lcd.setCursor(3,150);   
  M5.Lcd.printf("%.1f", humidityValue);       
  M5.Lcd.print(unitText[2]);    

}//displayHumidity() end


/*
 * printDegree()
 * prints degree symbol
 * Written by Ahmad Shamshiri 
 * on April 2, 2021 at 23:53
 * www.robojax.com
 */
void printDegree()
{

  M5.Lcd.setTextSize(3);  
  
  M5.Lcd.print("o");  
  M5.Lcd.setTextSize(7);    
  M5.Lcd.setCursor(M5.Lcd.getCursorX()+15,M5.Lcd.getCursorY());   
}//printDegree() end

/*
written by Ahmad Shamshiri for Robojax, Robojax.com
on April 21, 2021 in Ajax, Ontario, Canada
*/
void printOnSerial()
{
      Serial.print(title[unit]); 
      Serial.print(" "); 
      Serial.print(myValue1);  
             
      Serial.print(unitText[unit]);      
      Serial.println();  
}//printOnSerial() end

Sumber daya & referensi

Berkas📁

Tidak ada file tersedia.