Мерење на температура и влажност со 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)
Еве го резимето на поврзувањето за сите типови сензори:
- Пин за податоци: Поврзете го пинот за податоци/излез на сензорот со GPIO 27 на M5Stack Core2. (во видео на 03:58)
- Пин за напојување (VCC/+): Поврзете го пинот за напојување на сензорот со пинот 3.3V на M5Stack Core2. (во видео на 04:11)
- Пин за заземјување (GND/-): Поврзете го пинот за заземјување на сензорот со GND пин на M5Stack Core2. (во видео на 04:17)
Ако користите гол DHT11 или DHT22 сензор, мора да додадете pull-up отпорник (обично 5.6kΩ до 10kΩ) помеѓу пинот за податоци и пинот 3.3V. (во видео на 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 вредности за боја или ваши сопствени hex вредности. (во видео на 10:21)
Демонстрација на проектот во живо
Видеото обезбедува сеопфатна демонстрација на проектот. Покажува како екранот работи со DHT22 сензор во различни режими, вклучувајќи Фаренхајт, само влажност, Целзиус со влажност и конечно Целзиус и Фаренхајт. (во видео на 21:03) Демонстрацијата исто така вклучува тест со DHT11 сензор, и со PCB модул и како гол сензор со pull-up отпорник. (во видео на 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] Заклучок и завршни зборови
/*
* 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
Ресурси и референци
-
НадворешноM5Stack Core2 Documentation Pagedocs.m5stack.com
-
НадворешноM5Stack Core2 Product Pagem5stack-store.myshopify.com
Датотеки📁
Нема достапни датотеки.