Кодты іздеу

M5Stack Core 2 көмегімен DHT11 және DHT22 сенсорларымен температура мен ылғалдылықты өлшеу - Robojax

M5Stack Core 2 көмегімен DHT11 және DHT22 сенсорларымен температура мен ылғалдылықты өлшеу - Robojax

Бұл нұсқаулық DHT11 немесе DHT22 температура мен ылғалдылық сенсорын M5Stack Core2 құрылғысына қосу және оның кірістірілген сенсорлық экранында көрсеткіштерді көрсету жолын көрсетеді. M5Stack Core2 — 2 дюймдік LCD дисплейі бар ESP32 негізіндегі қуатты дамыту платформасы, бұл оны автономды қоршаған ортаны бақылау станциясын құруға тамаша платформа етеді. Бұл жоба әртүрлі қолданбаларға өте ыңғайлы, мысалы:

  • Үй немесе кеңсе ортасын бақылау үшін үстелдік ауа райы станциясын құру.
  • Жылыжай, террариум немесе бауырымен жорғалаушылар торы үшін температура мен ылғалдылық журналын жасау.
  • Үлкен 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

Ресурстар мен сілтемелер

Файлдар📁

Файлдар жоқ.