Tafuta Msimbo

Somo la 31/31: Pima Halijoto na Unyevu Kupitia Wi-Fi kwa kutumia DHT11 na ESP01 SunFounder Kit

Somo la 31/31: Pima Halijoto na Unyevu Kupitia Wi-Fi kwa kutumia DHT11 na ESP01 SunFounder Kit

Mwongozo huu wa mradi unakuelekeza katika kujenga mfumo wa ufuatiliaji wa joto na unyevu usiotumia waya kwa kutumia moduli ya ESP8266 (ESP-01) na sensa ya DHT11. Kufikia mwisho, utakuwa na kifaa kinachounda seva yake ya wavuti, kinachokuruhusu kuona usomaji wa sensa kwa wakati halisi kwenye kifaa chochote kilichounganishwa kwenye mtandao wako wa ndani, kama simu mahiri, kompyuta kibao, au kompyuta. Huu ni mradi wa msingi wa IoT unaoonyesha jinsi ya kuunganisha ulimwengu wa kimwili wa sensa na ulimwengu wa kidijitali wa violesura vya wavuti.

Moduli ya ESP8266 ESP01

Ujuzi utakaoupata hapa unahamishika kwa urahisi. Mpangilio huu hasa unaweza kubadilishwa kwa matumizi mbalimbali ya vitendo, ikijumuisha:

  • Kujenga kituo cha ufuatiliaji wa mbali kwa chafu au bustani ili kuhakikisha hali bora za ukuaji.
  • Kuunda mfumo rahisi wa otomatiki wa nyumbani ili kufuatilia hali ya hewa katika chumba maalum, kama pishi la mvinyo au chumba cha mtoto mchanga.
  • Kuanzisha kirekodi cha data cha mazingira cha gharama nafuu kwa mradi wa sayansi wa shule.
  • Kuendeleza mfumo wa msingi wa usalama au tahadhari unaoweza kukuarifu kuhusu mabadiliko ya ghafla ya joto.

Vifaa na Vipengele

Ili kufuata mradi huu, utahitaji vipengele vifuatavyo. Vipengele vikuu ni moduli ya ESP8266 na sensa ya DHT11, lakini vingine ni muhimu kwa kupanga programu na kuwasha moduli.

  • Moduli ya ESP8266 (ESP-01S): Kidhibiti kikuu cha micro kilicho na uwezo wa Wi-Fi uliojengewa ndani.
  • Sensa ya Joto na Unyevu ya DHT11: Sensa inayopima data ya mazingira.
  • Bodi ya Arduino Uno (kwa ubadilishaji wa USB-hadi-Serial): Katika mradi huu, bodi kuu ya Arduino haitumiwi kwa uwezo wake wa kuchakata. Badala yake, chipu yake ya USB-hadi-serial inatumiwa kupanga programu ya moduli ya ESP8266.
  • Kipinga cha 330-ohm: Kinatumika kwa jaribio la awali la kumulika kwa LED ili kupunguza mkondo.
  • Kipinga cha 1k-ohm hadi 10k-ohm: Kipinga cha kuvuta-juu kwa mstari wa data wa sensa ya DHT11.
  • LED na Waya za Kurukia: Kwa awamu ya majaribio na kufanya miunganisho yote muhimu.
  • Breadboard: Kwa kuunda miunganisho ya saketi.

Mwongozo wa Uunganishaji wa Waya

Uunganishaji wa waya wa esp8266 ESP01 na DHT11 kwa somo la 31 la kozi ya Sunfounder 3-in-1

Mchakato wa uunganishaji wa waya unafanywa kwa hatua. Kwanza, tutaweka saketi ya msingi ili kupanga programu ya ESP-01. Hii inahusisha kutumia Arduino Uno kama kipanga programu. Video inaonyesha mpangilio huu kwa uwazi. Miunganisho muhimu ni kama ifuatavyo:

Ili kuingia katika hali ya kupanga programu, lazima uunganishe pini ya IO1 (GPIO1) kwenye Ground (GND). Hii inamwambia ESP8266 isubiri firmware mpya. Miunganisho mingine ya kupanga programu ni:

  • VCC (3.3V) hadi EN (Enable): Hii inaiwezesha moduli.
  • GND hadi GND: Ardhi ya pamoja kwa saketi.
  • VCC (5V) hadi VCC (5V): Kuwasha bodi ya kipanga programu.
  • RX (ESP) hadi TX (Arduino): Kwa mawasiliano ya serial kutoka kwa kipanga programu hadi moduli.
  • TX (ESP) hadi RX (Arduino): Kwa mawasiliano ya serial kutoka moduli hadi kipanga programu.
  • RST (Reset) hadi GND: Huu ni muunganisho wa muda unaotumika kuweka upya moduli baada ya kupanga programu.

Mara tu ESP-01 inapopangwa programu, uunganishaji wa waya wa sensa ni rahisi. Sensa ya DHT11 inahitaji kipinga cha kuvuta-juu kwenye mstari wake wa data ili kuhakikisha mawasiliano thabiti.

Kwa mpangilio wa sensa, uunganishaji wa waya ni kama ifuatavyo:

  • DHT11 VCC (Pini 1) hadi 3.3V: Nguvu kwa sensa.
  • DHT11 DATA (Pini 2) hadi GPIO2 (IO2) kwenye ESP-01: Mstari wa data kwa usomaji wa sensa. Kipinga cha kuvuta-juu cha 1k-ohm hadi 10k-ohm kinapaswa kuunganishwa kati ya mstari huu wa data na mstari wa nguvu wa 3.3V.
  • DHT11 GND (Pini 4) hadi GND: Ardhi ya pamoja kwa sensa.

Kuandaa Arduino IDE

Ili kupanga programu ya ESP8266, lazima kwanza uongeze usaidizi wa bodi yake kwenye Arduino IDE yako. Hii inafanywa kwa hatua mbili:

  1. Ongeza URL ya Meneja wa Bodi: Nenda kwenye File > Preferences. Katika sehemu ya "Additional Boards Manager URLs", bandika URL ifuatayo: http://arduino.esp8266.com/stable/package_esp8266com_index.json na ubofye "OK".
  2. Sakinisha Kifurushi cha Bodi ya ESP8266: Nenda kwenye Tools > Board > Boards Manager.... Tafuta "esp8266", pata "esp8266 by ESP8266 Community", na ubofye "Install". Baada ya usakinishaji, unaweza kuchagua bodi kwa kwenda kwenye Tools > Board > ESP8266 Boards > Generic ESP8266 Module.

Kusakinisha Maktaba ya Sensa ya DHT

Msimbo unategemea maktaba ya kuunganisha na sensa ya DHT11. Maktaba hii lazima isakinishwe kwenye Arduino IDE yako.

  1. Nenda kwenye Tools > Manage Libraries....
  2. Tafuta "DHT sensor library".
  3. Pata maktaba ya Adafruit na ubofye "Install". Maktaba hii inarahisisha mchakato wa kusoma data kutoka kwa sensa.

Mradi 1: Jaribio la Kumulika kwa LED

Kabla ya kuzama kwenye sensa, ni muhimu kuhakikisha kuwa unaweza kupanga ESP-01 kwa mafanikio. Hii inafanywa kwa mfano wa kawaida wa "Blink". Video inaonyesha mchakato wa kupeleka binary iliyokusanywa na kutumia faili tofauti ya batch kuiflasha, ambayo ni njia mbadala ya usanidi maalum wa USB-to-serial. Lengo ni kuona LED iliyojengewa ndani ikimulika, ikithibitisha kuwa mnyororo wa upangaji unafanya kazi. Ili kuendesha moduli baada ya kupanga, lazima uondoe waya inayounganisha IO1 na GND kisha uunganishe pin ya RST kwa GND kwa muda mfupi ili kuweka upya moduli.

Mradi wa 2: Kusoma DHT11 kwenye Serial Monitor

Mara tu upangaji unapothibitishwa, hatua inayofuata ni kuunganisha sensa ya DHT11 na kusoma data yake. Mradi huu unatumia mfano wa DHTtester kutoka kwenye maktaba ya sensa ya Adafruit DHT. Msimbo umeundwa kutumia pin sahihi na aina sahihi ya sensa. Baada ya kuflasha programu hii, unaweza kufungua Serial Monitor (iliyowekwa kwa 9600 baud) kuona usomaji wa joto na unyevu.

Mradi wa 3: Kuanzisha Seva ya Wavuti

Mradi wa mwisho unachanganya kila kitu. ESP8266 imepangwa kuungana na mtandao wako wa Wi-Fi wa ndani na kuweka ukurasa rahisi wa wavuti. Ukurasa huu unaonyesha usomaji wa moja kwa moja wa joto na unyevu. Msimbo ni toleo lililobadilishwa la mfano wa "HelloServer" wa ESP8266. Video inaonyesha jinsi ya kufikia data hii kwa kuingiza anwani ya IP ya kifaa au jina lake la mDNS (kwa mfano, robojaxDHT.local) kwenye kivinjari cha wavuti kwenye kifaa chochote kilichounganishwa kwenye mtandao huo.

Maelezo ya Msimbo

Kwa kuwa programu kamili inapatikana kwa kupakuliwa, sehemu hii inazingatia vigezo muhimu vinavyoweza kubadilishwa na mtumiaji ambavyo utahitaji kurekebisha kwa mtandao wako na mapendeleo yako. Msimbo ni toleo lililobadilishwa la mfano wa "HelloServer" wa ESP8266. Mantiki kuu inahusisha kusoma sensa na kuunda ukurasa wa HTML kuonyesha data.

Hapa kuna sehemu muhimu za msimbo ambazo utahitaji kubadilisha:

// Wi-Fi credentials - LAZIMA UBADILISHE HIZI
const char* ssid = "YourWiFiSSID"; // Badilisha na jina la mtandao wako wa Wi-Fi
const char* password = "YourWiFiPassword"; // Badilisha na nenosiri lako la Wi-Fi

Hii ndiyo sehemu muhimu zaidi ya kubadilisha. Vigezo vya ssid na password lazima vilingane na mtandao wako wa Wi-Fi wa ndani haswa. Jina la Wi-Fi ni nyeti kwa herufi kubwa na ndogo, kwa hivyo hakikisha umeliingiza kwa usahihi.

// Usanidi wa sensa ya DHT11
#define DHTPIN 2     // Pin ya dijiti iliyounganishwa na sensa ya DHT (GPIO2)
#define DHTTYPE DHT11   // Aina ya sensa DHT 11

Ufafanuzi huu unaweka sensa. DHTPIN ni pin ya GPIO kwenye ESP8266 ambayo mstari wa data wa sensa umeunganishwa (ambayo ni GPIO2 katika mwongozo huu). DHTTYPE inafafanua mfano maalum wa sensa. Ikiwa ungetumia sensa ya DHT22, ungeondoa alama ya maelezo kwenye mstari wa DHT22 na kuweka alama ya maelezo kwenye ile ya DHT11.

// Vigezo vinavyoweza kubadilishwa
const long interval = 3000; // milliseconds kati ya usomaji wa sensa
char temperature[] = "00.0";
char humidity[] = "00.0";

Kigezo cha interval kinadhibiti mara ngapi sensa inasomwa na ukurasa wa wavuti unasasishwa. Chaguo-msingi ni milliseconds 3000 (sekunde 3). Unaweza kuongeza hii kwa thamani ya juu kama 5000 au 10000 ili kupunguza mzunguko wa sasisho.

Msimbo pia unajumuisha kazi inayounda usomaji wa joto. Unaweza kuchagua kuonyesha joto kwa Selsiasi au Fahrenheit kwa kubadilisha mantiki katika kazi ya sendTemperature(). Video inaeleza kuwa kigezo Tvalue kimewekwa kushikilia usomaji wa Selsiasi, lakini unaweza kubadilisha kutumia kigezo cha Fahrenheit F badala yake.

Maonyesho ya Mradi wa Moja kwa Moja

Katika video, mradi uliokamilika unaonyeshwa. Baada ya msimbo kuflashwa na moduli kuwekwa upya, inaungana na mtandao wa Wi-Fi. Serial Monitor inaonyesha hali ya muunganisho na anwani ya IP ya kifaa. Kwa kufikia anwani hii ya IP kwenye kivinjari cha wavuti, unaweza kuona ukurasa rahisi unaoonyesha joto na unyevu wa sasa. Maonyesho yanaonyesha usomaji ukisasishwa kwa wakati halisi. Wakati sensa ya DHT11 inapokanzwa kwa bunduki ya joto, usomaji wa joto kwenye ukurasa wa wavuti unaongezeka ipasavyo. Ikiwa waya ya data ya sensa imekatwa, ukurasa unaonyesha "None" kwa thamani za sensa, ambayo ni kipengele muhimu cha utatuzi wa shida.

Sura

  • [00:00] Utangulizi wa Mradi
  • [01:33] Kuelewa ESP8266 na Seva za Wavuti
  • [05:47] Kuunganisha ESP-01 kwa Upangaji
  • [08:51] Kusakinisha Msaada wa Bodi ya ESP8266 kwenye Arduino IDE
  • [11:47] Mradi wa 1: Kumulika LED na ESP8266
  • [20:28] Kuunganisha Sensa ya DHT11
  • [22:34] Kusakinisha Maktaba ya Sensa ya DHT
  • [23:13] Mradi wa 2: Kusoma DHT11 kwenye Serial Monitor
  • [30:10] Maelezo ya Msimbo kwa Mradi wa Seva ya Wavuti
  • [36:14] Mradi wa 3: Kuflasha Msimbo wa Seva ya Wavuti
  • [38:42] Maonyesho: Kuangalia Joto Kupitia Wi-Fi
  • [41:43] Hitimisho na Utatuzi wa Shida

Bilder

ESP8266 ESP01 module
ESP8266 ESP01 module
ESP8266 ESP01 and DHT11 wiring for lesson 31 Sunfounder 3-in-1 course
ESP8266 ESP01 and DHT11 wiring for lesson 31 Sunfounder 3-in-1 course
895-Lesson 31/31: DHT11 and ESP01 over WiFi code
Språk: C++

 /*
 * Display temperature using DHT11, DHT22 with NodeMCU ESP8266 
 * over WiFi in local network on computer o mobile devices
 * 
 * Written by Ahmad Shamshiri on Sep 27, 2019
 * in Ajax, Ontario, Canada
 * Watch video instruciton for this video: https://youtu.be/1A4-6hDARQc
 * 
 * I have combined DHT library of Adafruit with ESP8266 WebServer both links 
 * Adafruit DHT library on GitHub: https://github.com/adafruit/DHT-sensor-library
 * and 
 * ESP8266 on GitHub : https://github.com/esp8266/Arduino
 * Download and resource page https://robojax.com/RJT614

 * 
Get this code and other Arduono codes from Robojax.com


 * Code is available at https://robojax.com/RJT614
 * 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 download 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/>. 

*/

const int refresh=3;//3 seconds
// DHT settings starts
#include "DHT.h"
#define DHTPIN 2     // what digital pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
float tValue, hValue;// 
char *simipleName="robojaxDHT";//android
// ****** DHT settings end (Robojax.com )


#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

#ifndef STASSID
#define STASSID "Robojax" // Your WiFi SSID
#define STAPSK  "100%Right" //Your WiFi password
#endif

const char* ssid = STASSID;
const char* password = STAPSK;

ESP8266WebServer server(80);


void sendTemp() {

  String page = "<!DOCTYPE html>";
  page +="    <meta http-equiv='refresh' content='";
  page += String(refresh);// how often temperature is read
  page +="'/>";  
  page +="<html dir=\"rtl\">";
  page +="<body>"; 
  page +="<h1>&#1585;&#1591;&#1608;&#1576;&#1578; &#1608; &#1581;&#1585;&#1575;&#1585;&#1578; &#1578;&#1608;&#1587;&#1591; &#1583;&#1740; &#1575;&#1670; &#1578;&#1740;</h1>";
      
  page +="<p style=\"font-size:150px;\">&#1581;&#1585;&#1575;&#1585;&#1578;<br/>";  
  page +="<span style=\"color:red; font-size:150px;\">";
  page += String(tValue, 2);
  page +="&#176C</p>";

  page +="<p style=\"font-size:150px;\">&#1585;&#1591;&#1608;&#1576;&#1578;<br/>";  
  page +="<span style=\"color:red; font-size:150px;\">";
  page += String(hValue, 2);
  page +="%</p>";  
      
  page +="</body>";  
  page +="</html>";  
 server.send(200,  "text/html",page);

}

void handleNotFound() {
 
  String message = "File Not Found";
  message += "URI: ";
  message += server.uri();
  message += "Method: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "Arguments: ";
  message += server.args();
  message += "";
  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "";
  }
  server.send(404, "text/plain", message);

}

void setup(void) {
  // Robojax.com code for ESP8266 and DHT11 DHT22
   dht.begin();
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  if (WiFi.status() == WL_CONNECTED)
  {
    uint8_t macAddr[6];
    WiFi.macAddress(macAddr);
    Serial.printf("Connected, mac address: %02x:%02x:%02x:%02x:%02x:%02x", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
  }  
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin(simipleName)) {
    Serial.print("or view http://");
    Serial.println(simipleName);
  }

  server.on("/", sendTemp);

  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
  // Robojax.com code for ESP8266 and DHT11 DHT22
  server.handleClient();
  MDNS.update();//multicast DNS
  float c = dht.readTemperature();// Read temperature as Celsius (the default)
  float h = dht.readHumidity();// Reading humidity 
  float f = dht.readTemperature(true);// Read temperature as Fahrenheit (isFahrenheit = true)
    Serial.print(c);
    Serial.println(F("°C "));
 tValue =c;//save temperature for display
 hValue =h;//save humidity for display
  delay(300);// change this to larger value (1000 or more) if you don't need very often reading
  // Robojax.com code for ESP8266 and DHT11 DHT22
}

Resurser och referenser

Inga resurser än.

Filer📁

Arduino-kod (.ino)

Fritzing-fil

Användarhandbok