کوډ ولټوئ

د تودوخې او رطوبت اندازه کول د 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","%"};

تاسو کولی شئ دا سټرینګونه بدل کړئ ترڅو متن په خپله ژبه وښیئ. د رنګ متغیرونه لکه backgroundColor، temperatureTitleColor او humidityValueColor د TFT مخکې ټاکل شوي رنګ ارزښتونو یا ستاسو د خپل دودیز هیکس ارزښتونو څخه هر یو ته ټاکل کیدی شي. (په ویډیو کې په 10:21)

ژوندۍ پروژې ننداره

ویډیو د پروژې جامع ننداره وړاندې کوي. دا د DHT22 سینسر سره په مختلفو حالتونو کې د ښودنې کار ښیي، پشمول فارنهایت، یوازې رطوبت، سیلسیس د رطوبت سره، او په پای کې سیلسیس او فارنهایت. (په ویډیو کې په 21:03) ننداره د DHT11 سینسر سره ازموینه هم شامله ده، دواړه د PCB ماډل سره او د پل-اپ ریزسټر سره د یوازې سینسر په توګه. (په ویډیو کې په 22:22) په پای کې، ویډیو ښیي چې کله یو تار جلا شي څه پیښیږي، چې په سکرین کې د "None" لوستل پایله لري. (په ویډیو کې په 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

سرچینې او حوالې

فایلونه📁

هیڅ فایل شتون نلري.