Pima Halijoto na Unyevu kwa kutumia M5Stack Core 2 na DHT11 na DHT22 - Robojax
Mwongozo huu unaonyesha jinsi ya kuunganisha kihisi cha joto na unyevu cha DHT11 au DHT22 kwenye M5Stack Core2 na kuonyesha usomaji kwenye skrini yake ya kugusa iliyojengewa ndani. M5Stack Core2 ni bodi yenye nguvu ya maendeleo yenye msingi wa ESP32 na skrini ya inchi 2, na kuifanya kuwa jukwaa bora kwa kuunda kituo cha kujitegemea cha ufuatiliaji wa mazingira. Mradi huu unafaa kwa matumizi mbalimbali, kama vile:
- Kujenga kituo cha hali ya hewa cha mezani ili kufuatilia mazingira ya nyumbani au ofisini kwako.
- Kuunda kirekodi cha joto na unyevu kwa chafu, terrarium, au eneo la kutunzia wanyama watambaao.
- Kuendeleza nodi rahisi ya ufuatiliaji wa mazingira kwa mradi mkubwa wa IoT.
- Kujifunza jinsi ya kuunganisha na sensorer maarufu za mfululizo wa DHT kwa kutumia moduli ya kisasa ya kuonyesha.
Vipengele vya Maunzi
- M5Stack Core2 (bodi ya maendeleo ya ESP32 yenye skrini)
- Kihisi cha DHT11 (ama kihisi tupu chenye kipinga cha 10kΩ au moduli ya PCB)
- Kihisi cha DHT22 (AM2302) (ama moduli nyeupe au moduli nyekundu/nyeusi)
- Breadboard na nyaya za kurukia
Mwongozo wa Uunganishaji
Uunganishaji ni rahisi, kwani M5Stack Core2 hutoa bandari inayofaa ya Grove. Video inaonyesha uunganishaji kwenye bandari ya upanuzi ya M5Stack Core2. (katika video saa 03:52)
Hapa kuna muhtasari wa uunganishaji kwa aina zote za sensorer:
- Pini ya Data: Unganisha pini ya data/out ya kihisi kwenye GPIO 27 kwenye M5Stack Core2. (katika video saa 03:58)
- Pini ya Nguvu (VCC/+): Unganisha pini ya nguvu ya kihisi kwenye pini ya 3.3V kwenye M5Stack Core2. (katika video saa 04:11)
- Pini ya Ardhi (GND/-): Unganisha pini ya ardhi ya kihisi kwenye pini ya GND kwenye M5Stack Core2. (katika video saa 04:17)
Ikiwa unatumia kihisi tupu cha DHT11 au DHT22, lazima uongeze kipinga cha kuvuta-juu (kawaida 5.6kΩ hadi 10kΩ) kati ya pini ya data na pini ya 3.3V. (katika video saa 04:50)
Maelezo ya Msimbo
Msimbo umeundwa kuwa na usanidi wa hali ya juu, unaokuwezesha kubadilisha kwa urahisi aina ya kihisi, hali ya kuonyesha, rangi, na kasi ya kuonyesha upya. Hapa kuna uchambuzi wa sehemu kuu zinazoweza kusanidiwa na mtumiaji:
Mipangilio ya Kihisi na Kuonyesha
Juu ya msimbo, unaweza kufafanua aina ya kihisi na hali ya kuonyesha. Ili kuchagua kihisi chako, lazima uweke maoni au uondoe maoni kwenye mstari sahihi wa #define. (katika video saa 13:43)
#define DHTPIN 27
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
Kwa mfano, kutumia DHT11, ungeweka maoni kwenye #define DHTTYPE DHT22 na kuondoa maoni kwenye #define DHTTYPE DHT11.
Kigezo cha unit kinadhibiti data gani inayoonyeshwa kwenye skrini. (katika video saa 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
Unaweza kuweka hii kwa thamani yoyote kutoka 0 hadi 5 ili kuonyesha Celsius, Fahrenheit, Unyevu, au mchanganyiko wao.
Kigezo cha refresh kinaweka mara ngapi kihisi kinasomwa na skrini inasasishwa, kwa millisekunde. (katika video saa 09:15)
const int refresh=3000;//read every 3 seconds
Chaguzi za Kubinafsisha
Msimbo pia unakuwezesha kubinafsisha maandishi na rangi kwenye skrini. Safu za title na unitText huhifadhi lebo na vitengo vinavyoonyeshwa kwenye skrini. (katika video saa 10:01)
char *title[]={"Temperature","Temperature","Humidity"};
char *unitText[]={"C","F","%"};
Unaweza kubadilisha nyuzi hizi ili kuonyesha maandishi kwa lugha yako mwenyewe. Vigezo vya rangi kama vile backgroundColor, temperatureTitleColor, na humidityValueColor vinaweza kuwekwa kwa thamani zozote za rangi za TFT zilizofafanuliwa awali au thamani zako maalum za hex. (katika video saa 10:21)
Onyesho la Moja kwa Moja la Mradi
Video inatoa onyesho kamili la mradi. Inaonyesha skrini ikifanya kazi na kihisi cha DHT22 katika hali mbalimbali, ikiwa ni pamoja na Fahrenheit, unyevu pekee, Celsius na unyevu, na hatimaye Celsius na Fahrenheit. (katika video saa 21:03) Onyesho pia linajumuisha jaribio na kihisi cha DHT11, kwa moduli ya PCB na kama kihisi tupu chenye kipinga cha kuvuta-juu. (katika video saa 22:22) Hatimaye, video inaonyesha kinachotokea wakati waya imekatwa, ambayo husababisha usomaji wa "None" kwenye skrini. (katika video saa 22:38)
Sura za Video
- [00:00] Utangulizi na Muhtasari wa Mradi
- [00:55] Vipengele vya M5Stack Core2
- [02:22] Specifikojeni za Kihisi cha DHT11 dhidi ya DHT22
- [03:52] Mwongozo wa Uunganishaji
- [07:40] Kusakinisha Viendeshaji vya Bodi na Maktaba
- [09:01] Maelezo ya Msimbo
- [21:03] Onyesho la Moja kwa Moja
- [22:53] Hitimisho na Muhtasari
/*
* 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
Resurser och referenser
-
Extern.M5Stack Core2 Documentation Pagedocs.m5stack.com
-
Extern.M5Stack Core2 Product Pagem5stack-store.myshopify.com
Filer📁
Inga filer tillgängliga.