Search Code

የሙቀት መጠን እና እርጥበትን በM5Stack Core 2 በመጠቀም ከDHT11 እና DHT22 ጋር - Robojax

የሙቀት መጠን እና እርጥበትን በM5Stack Core 2 በመጠቀም ከDHT11 እና DHT22 ጋር - Robojax

ይህ መመሪያ የDHT11 ወይም DHT22 የሙቀት እና የእርጥበት ዳሳሽ ከM5Stack Core2 ጋር እንዴት ማገናኘት እንደሚቻል እና ንባቦቹን በተሰራው የመዳሰሻ ስክሪን ላይ እንዴት ማሳየት እንደሚቻል ያሳያል። M5Stack Core2 በESP32 ላይ የተመሰረተ ኃይለኛ የልማት ቦርድ ሲሆን ባለ 2-ኢንች LCD ያለው ሲሆን፣ ለብቻ የሚቆም የአካባቢ ቁጥጥር ጣቢያ ለመፍጠር ተስማሚ መድረክ ያደርገዋል። ይህ ፕሮጀክት ለተለያዩ አፕሊኬሽኖች ተስማሚ ነው፣ ለምሳሌ፡-

  • ቤትዎን ወይም ቢሮዎን ለመቆጣጠር የዴስክቶፕ የአየር ሁኔታ ጣቢያ መገንባት።
  • ለግሪንሀውስ፣ ቴራሪየም ወይም የሚሳቡ እንስሳት መኖሪያ የሙቀት እና የእርጥበት መመዝገቢያ መፍጠር።
  • ለትልቅ IoT ፕሮጀክት ቀላል የአካባቢ ቁጥጥር መስቀለኛ መንገድ ማዘጋጀት።
  • ዘመናዊ የማሳያ ሞጁል በመጠቀም ታዋቂውን የDHT ተከታታይ ዳሳሾችን እንዴት ማገናኘት እንደሚቻል መማር።

የሃርድዌር ክፍሎች

  • M5Stack Core2 (ESP32 የልማት ቦርድ ከማሳያ ጋር)
  • DHT11 ዳሳሽ (ባዶ ዳሳሽ ከ10kΩ ተቃዋሚ ጋር ወይም የPCB ሞጁል)
  • DHT22 (AM2302) ዳሳሽ (ነጩ ሞጁል ወይም ቀይ/ጥቁር ሞጁል)
  • ብሬድቦርድ እና የጅምፐር ሽቦዎች

የሽቦ አገናኝ መመሪያ

ሽቦው ቀላል ነው፣ ምክንያቱም M5Stack Core2 ምቹ የGrove-ተኳሃኝ ወደብ ይሰጣል። ቪዲዮው በM5Stack Core2 የማስፋፊያ ወደብ ላይ ያለውን ግንኙነት ያሳያል። (በቪዲዮ 03:52)

ለሁሉም የዳሳሽ ዓይነቶች የግንኙነት ማጠቃለያ እዚህ አለ፡-

  • የውሂብ ፒን፡- የዳሳሹን የውሂብ/ውጤት ፒን ከM5Stack Core2 ላይ ካለው GPIO 27 ጋር ያገናኙ። (በቪዲዮ 03:58)
  • የኃይል ፒን (VCC/+)፡- የዳሳሹን የኃይል ፒን ከM5Stack Core2 ላይ ካለው 3.3V ፒን ጋር ያገናኙ። (በቪዲዮ 04:11)
  • የመሬት ፒን (GND/-)፡- የዳሳሹን የመሬት ፒን ከM5Stack Core2 ላይ ካለው GND ፒን ጋር ያገናኙ። (በቪዲዮ 04:17)

ባዶ DHT11 ወይም DHT22 ዳሳሽ እየተጠቀሙ ከሆነ፣ በውሂብ ፒን እና በ3.3V ፒን መካከል የመጎተት-ወደላይ ተቃዋሚ (በተለምዶ 5.6kΩ እስከ 10kΩ) መጨመር አለብዎት። (በቪዲዮ 04:50)

የኮድ ማብራሪያ

ኮዱ በከፍተኛ ደረጃ ሊዋቀር የሚችል እንዲሆን የተነደፈ ሲሆን፣ የዳሳሽ ዓይነትን፣ የማሳያ ሁነታን፣ ቀለሞችን እና የማደስ ፍጥነትን በቀላሉ እንዲቀይሩ ያስችልዎታል። ዋና ዋና በተጠቃሚ ሊዋቀሩ የሚችሉ ክፍሎች ዝርዝር እዚህ አለ፡-

የዳሳሽ እና የማሳያ ቅንብሮች

በኮዱ አናት ላይ፣ የዳሳሽ ዓይነትን እና የማሳያ ሁነታን መግለጽ ይችላሉ። ዳሳሽዎን ለመምረጥ፣ ትክክለኛውን የ#define መስመር አስተያየት መስጠት ወይም አለማስተያየት አለብዎት። (በቪዲዮ 13:43)

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

ለምሳሌ፣ DHT11 ለመጠቀም፣ #define DHTTYPE DHT22ን አስተያየት መስጠት እና #define DHTTYPE DHT11ን አለማስተያየት ይኖርብዎታል።

unit ተለዋዋጭ በስክሪኑ ላይ የሚታየውን ውሂብ ይቆጣጠራል። (በቪዲዮ 09:33)

unsigned int unit=3;//
//              0=C ሴልሲየስ
//              1=F ፋረንሃይት
//              2=እርጥበት
//              3=C እና እርጥበት
//              4=F እና እርጥበት
//              5=C እና F

ሴልሲየስን፣ ፋረንሃይትን፣ እርጥበትን ወይም የእነሱን ጥምረት ለማሳየት ይህንን ከ0 እስከ 5 ባለው ማንኛውም እሴት ማዘጋጀት ይችላሉ።

refresh ተለዋዋጭ ዳሳሹ የሚነበብበትን እና ስክሪኑ የሚዘመንበትን ጊዜ በሚሊሰከንድ ያዘጋጃል። (በቪዲዮ 09:15)

const int refresh=3000;//በየ3 ሰከንድ ያንብብ

የማበጀት አማራጮች

ኮዱ በስክሪኑ ላይ ያሉትን ጽሑፎች እና ቀለሞች እንዲያበጁም ያስችልዎታል። የtitle እና unitText ድርድሮች በስክሪኑ ላይ የሚታዩትን መለያዎች እና አሃዶች ያከማቻሉ። (በቪዲዮ 10:01)

char *title[]={"ሙቀት"፣"ሙቀት"፣"እርጥበት"};
char *unitText[]={"C"፣"F"፣"%"};

ጽሑፍን በራስዎ ቋንቋ ለማሳየት እነዚህን ሕብረቁምፊዎች መቀየር ይችላሉ። እንደ backgroundColortemperatureTitleColor እና humidityValueColor ያሉ የቀለም ተለዋዋጮች ከተገለጹት የTFT ቀለም እሴቶች ወይም ከራስዎ ብጁ ሄክስ እሴቶች በማንኛውም ሊዘጋጁ ይችላሉ። (በቪዲዮ 10:21)

የቀጥታ ፕሮጀክት ማሳያ

ቪዲዮው የፕሮጀክቱን አጠቃላይ ማሳያ ይሰጣል። ማሳያው ከDHT22 ዳሳሽ ጋር በተለያዩ ሁነታዎች ሲሰራ ያሳያል፣ ፋረንሃይትን፣ እርጥበትን ብቻ፣ ሴልሲየስን ከእርጥበት ጋር፣ እና በመጨረሻም ሴልሲየስ እና ፋረንሃይትን ጨምሮ። (በቪዲዮ 21:03) ማሳያው ከDHT11 ዳሳሽ ጋር የተደረገ ሙከራንም ያካትታል፣ በሁለቱም የPCB ሞጁል እና እንደ ባዶ ዳሳሽ ከመጎተት-ወደላይ ተቃዋሚ ጋር። (በቪዲዮ 22:22) በመጨረሻም፣ ቪዲዮው ሽቦ ሲቋረጥ ምን እንደሚከሰት ያሳያል፣ ይህም በስክሪኑ ላይ "ምንም" የሚል ንባብ ያስከትላል። (በቪዲዮ 22:38)

የቪዲዮ ምዕራፎች

  • [00:00] መግቢያ እና የፕሮጀክት አጠቃላይ እይታ
  • [00:55] የM5Stack Core2 ባህሪያት
  • [02:22] የDHT11 እና DHT22 ዳሳሽ ዝርዝሮች
  • [03:52] የሽቦ አገናኝ መመሪያ
  • [07:40] የቦርድ ሾፌሮችን እና ቤተ-መጻሕፍትን መጫን
  • [09:01] የኮድ ማብራሪያ
  • [21:03] የቀጥታ ማሳያ
  • [22:53] መደምደሚያ እና ማጠቃለያ

ምስሎች

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
ቋንቋ: 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

ምንጮች እና ምንጮች

ፋይሎች📁

አንድ ፋይል የለም።