Search Code

Ders 31/31: DHT11 ve ESP01 SunFounder Kiti ile Wi-Fi Üzerinden Sıcaklık ve Nem Ölçümü

Ders 31/31: DHT11 ve ESP01 SunFounder Kiti ile Wi-Fi Üzerinden Sıcaklık ve Nem Ölçümü

Bu proje rehberi, bir ESP8266 (ESP-01) modülü ve DHT11 sensörü kullanarak kablosuz bir sıcaklık ve nem izleme sistemi kurmanızı adım adım anlatır. Sonunda, kendi web sunucusunu oluşturan ve yerel ağınıza bağlı herhangi bir cihazdan (akıllı telefon, tablet veya bilgisayar gibi) gerçek zamanlı sensör okumalarını görüntülemenizi sağlayan bir cihaza sahip olacaksınız. Bu, sensörlerin fiziksel dünyasını web arayüzlerinin dijital dünyasıyla nasıl köprüleyeceğinizi gösteren temel bir IoT projesidir.
ESP8266 ESP01 modülü

Burada öğrendiğiniz beceriler oldukça aktarılabilir niteliktedir. Bu kurulum, aşağıdakiler de dahil olmak üzere çok çeşitli pratik uygulamalara uyarlanabilir:

  • Optimum yetiştirme koşullarını sağlamak için bir sera veya bahçe için uzaktan izleme istasyonu kurmak.
  • Bir şarap mahzeni veya bebek odası gibi belirli bir odanın iklimini izlemek için basit bir ev otomasyon sistemi oluşturmak.
  • Bir okul bilim projesi için düşük maliyetli bir çevresel veri kaydedici kurmak.
  • Ani sıcaklık değişikliklerinde sizi bilgilendirebilecek temel bir güvenlik veya alarm sistemi geliştirmek.

Donanım ve Bileşenler

Bu projeyi takip etmek için aşağıdaki bileşenlere ihtiyacınız olacak. Ana bileşenler ESP8266 modülü ve DHT11 sensörüdür, ancak diğerleri modülü programlamak ve güç sağlamak için gereklidir.

  • ESP8266 (ESP-01S) Modülü: Dahili Wi-Fi özelliğine sahip ana mikrodenetleyici.
  • DHT11 Sıcaklık ve Nem Sensörü: Çevresel verileri ölçen sensör.
  • Arduino Uno Kartı (USB-serisi dönüşüm için): Bu projede ana Arduino kartı işlem gücü için kullanılmaz. Bunun yerine, USB-serisi çipi ESP8266 modülünü programlamak için kullanılır.
  • 330 ohm Direnç: Akımı sınırlamak için ilk LED yanıp sönme testinde kullanılır.
  • 1k ohm ila 10k ohm Direnç: DHT11 sensörünün veri hattı için pull-up direnci.
  • LED ve Bağlantı Kabloları: Test aşaması ve gerekli tüm bağlantıları yapmak için.
  • Breadboard: Devre bağlantılarını oluşturmak için.

Bağlantı Rehberi

Sunfounder 3'ü 1 arada kursun 31. dersi için esp8266 ESP01 ve DHT11 bağlantısı

Bağlantı işlemi aşamalı olarak yapılır. Önce ESP-01'i programlamak için temel devreyi kuracağız. Bu, Arduino Uno'yu bir programlayıcı olarak kullanmayı içerir. Video bu kurulumu açıkça göstermektedir. Temel bağlantılar şunlardır:

Programlama moduna girmek için IO1 (GPIO1) pinini Toprağa (GND) bağlamanız gerekir. Bu, ESP8266'ya yeni ürün yazılımı beklediğini söyler. Programlama için diğer bağlantılar şunlardır:

  • VCC (3.3V) - EN (Enable): Bu, modülü etkinleştirir.
  • GND - GND: Devre için ortak toprak.
  • VCC (5V) - VCC (5V): Programlayıcı kartına güç sağlamak için.
  • RX (ESP) - TX (Arduino): Programlayıcıdan modüle seri iletişim için.
  • TX (ESP) - RX (Arduino): Modülden programlayıcıya seri iletişim için.
  • RST (Reset) - GND: Bu, programlamadan sonra modülü sıfırlamak için kullanılan geçici bir bağlantıdır.

ESP-01 programlandıktan sonra, sensör için bağlantı basittir. DHT11 sensörü, kararlı iletişim sağlamak için veri hattında bir pull-up direnci gerektirir.

Sensör kurulumu için bağlantılar şu şekildedir:

  • DHT11 VCC (Pin 1) - 3.3V: Sensör için güç.
  • DHT11 DATA (Pin 2) - ESP-01 üzerindeki GPIO2 (IO2): Sensör okumaları için veri hattı. Bu veri hattı ile 3.3V güç hattı arasına 1k ohm ila 10k ohm'luk bir pull-up direnci bağlanmalıdır.
  • DHT11 GND (Pin 4) - GND: Sensör için ortak toprak.

Arduino IDE'yi Hazırlama

ESP8266'yı programlamak için önce kart desteğini Arduino IDE'nize eklemelisiniz. Bu iki adımda yapılır:

  1. Kart Yöneticisi URL'sini Ekleme: Dosya > Tercihler bölümüne gidin. "Ek Kart Yöneticisi URL'leri" alanına şu URL'yi yapıştırın: http://arduino.esp8266.com/stable/package_esp8266com_index.json ve "Tamam"a tıklayın.
  2. ESP8266 Kart Paketini Kurma: Araçlar > Kart > Kart Yöneticisi... bölümüne gidin. "esp8266" arayın, "ESP8266 Community tarafından esp8266"yı bulun ve "Kur"a tıklayın. Kurulumdan sonra, Araçlar > Kart > ESP8266 Kartları > Generic ESP8266 Module bölümüne giderek kartı seçebilirsiniz.

DHT Sensör Kütüphanesini Kurma

Kod, DHT11 sensörüyle arayüz oluşturmak için bir kütüphaneye dayanır. Bu kütüphane Arduino IDE'nize kurulmalıdır.

  1. Araçlar > Kütüphaneleri Yönet... bölümüne gidin.
  2. "DHT sensor library" arayın.
  3. Adafruit tarafından sağlanan kütüphaneyi bulun ve "Kur"a tıklayın. Bu kütüphane, sensörden veri okuma sürecini basitleştirir.

Proje 1: LED Yanıp Sönme Testi

Sensöre dalmadan önce, ESP-01'i başarıyla programlayabildiğinizi doğrulamak çok önemlidir. Bu, klasik "Blink" örneği ile yapılır. Video, derlenmiş ikili dosyayı dışa aktarma ve ayrı bir toplu iş dosyası kullanarak flaşlama sürecini gösterir; bu, belirli USB-seri kurulumu için bir geçici çözümdür. Amaç, yerleşik LED'in yanıp söndüğünü görmek ve programlama zincirinin çalıştığını doğrulamaktır. Modülü programlamadan sonra çalıştırmak için, IO1'i GND'ye bağlayan kabloyu çıkarmalı ve ardından modülü sıfırlamak için RST pinini kısa süreliğine GND'ye bağlamalısınız.

Proje 2: DHT11'i Seri Monitörde Okuma

Programlama doğrulandıktan sonra, bir sonraki adım DHT11 sensörünü bağlamak ve verilerini okumaktır. Bu proje, Adafruit DHT sensör kütüphanesindeki DHTtester örneğini kullanır. Kod, doğru pini ve sensör tipini kullanacak şekilde yapılandırılmıştır. Bu programı flaşladıktan sonra, sıcaklık ve nem okumalarını görmek için Seri Monitörü (9600 baud olarak ayarlı) açabilirsiniz.

Proje 3: Web Sunucusu Kurulumu

Son proje her şeyi birleştirir. ESP8266, yerel Wi-Fi ağınıza bağlanacak ve basit bir web sayfası barındıracak şekilde programlanmıştır. Bu sayfa, canlı sıcaklık ve nem okumalarını görüntüler. Kod, ESP8266 "HelloServer" örneğinin değiştirilmiş bir sürümüdür. Video, bu verilere, cihazın IP adresini veya mDNS adını (ör. robojaxDHT.local) aynı ağa bağlı herhangi bir cihazın web tarayıcısına girerek nasıl erişileceğini gösterir.

Kod Açıklaması

Tam program indirilebilir olduğundan, bu bölüm kendi ağınız ve tercihleriniz için ayarlamanız gereken önemli kullanıcı yapılandırılabilir değişkenlere odaklanır. Kod, ESP8266 "HelloServer" örneğinin değiştirilmiş bir sürümüdür. Temel mantık, sensörü okumayı ve verileri görüntülemek için bir HTML sayfası biçimlendirmeyi içerir.

İşte değiştirmeniz gereken kodun kritik kısımları:

// Wi-Fi kimlik bilgileri - BUNLARI DEĞİŞTİRMELİSİNİZ
const char* ssid = "YourWiFiSSID"; // Wi-Fi ağ adınızla değiştirin
const char* password = "YourWiFiPassword"; // Wi-Fi şifrenizle değiştirin

Bu, değiştirilmesi gereken en önemli bölümdür. ssid ve password değişkenleri, yerel Wi-Fi ağınızla tam olarak eşleşmelidir. Wi-Fi adı büyük/küçük harf duyarlıdır, bu yüzden doğru girdiğinizden emin olun.

// DHT11 sensör yapılandırması
#define DHTPIN 2     // DHT sensörüne bağlı dijital pin (GPIO2)
#define DHTTYPE DHT11   // DHT 11 sensör tipi

Bu tanımlar sensörü ayarlar. DHTPIN, ESP8266 üzerinde sensörün veri hattının bağlı olduğu GPIO pinidir (bu kılavuzda GPIO2). DHTTYPE, belirli sensör modelini tanımlar. DHT22 sensörü kullanıyorsanız, DHT22 satırının yorumunu kaldırıp DHT11 satırını yorum satırı yapmanız gerekir.

// Yapılandırılabilir değişkenler
const long interval = 3000; // sensör okumaları arasındaki milisaniye
char temperature[] = "00.0";
char humidity[] = "00.0";

interval değişkeni, sensörün ne sıklıkla okunacağını ve web sayfasının ne sıklıkla güncelleneceğini kontrol eder. Varsayılan 3000 milisaniyedir (3 saniye). Güncelleme sıklığını azaltmak için bunu 5000 veya 10000 gibi daha yüksek bir değere çıkarabilirsiniz.

Kod ayrıca sıcaklık okumasını biçimlendiren bir işlev içerir. sendTemperature() işlevindeki mantığı değiştirerek sıcaklığı Celsius veya Fahrenheit cinsinden görüntülemeyi seçebilirsiniz. Video, Tvalue değişkeninin Celsius okumasını tutacak şekilde ayarlandığını, ancak bunun yerine Fahrenheit değişkeni F'yi kullanacak şekilde değiştirebileceğinizi açıklar.

Canlı Proje Gösterimi

Videoda, tamamlanmış proje gösterilmektedir. Kod flaşlanıp modül sıfırlandıktan sonra Wi-Fi ağına bağlanır. Seri Monitör, bağlantı durumunu ve cihazın IP adresini görüntüler. Bu IP adresine bir web tarayıcısında giderek, mevcut sıcaklık ve nemi gösteren basit bir sayfa görebilirsiniz. Gösterim, okumaların gerçek zamanlı olarak güncellendiğini gösterir. DHT11 sensörü bir ısı tabancasıyla ısıtıldığında, web sayfasındaki sıcaklık okuması buna göre artar. Sensörün veri kablosu çıkarılırsa, sayfa sensör değerleri için "None" görüntüler; bu, yararlı bir sorun giderme özelliğidir.

Bölümler

  • [00:00] Projeye Giriş
  • [01:33] ESP8266 ve Web Sunucularını Anlama
  • [05:47] Programlama için ESP-01'in Bağlanması
  • [08:51] Arduino IDE'de ESP8266 Kart Desteğini Kurma
  • [11:47] Proje 1: ESP8266 ile LED Yakıp Söndürme
  • [20:28] DHT11 Sensörünü Bağlama
  • [22:34] DHT Sensör Kütüphanesini Kurma
  • [23:13] Proje 2: DHT11'i Seri Monitörde Okuma
  • [30:10] Web Sunucusu Projesi için Kod Açıklaması
  • [36:14] Proje 3: Web Sunucusu Kodunu Flaşlama
  • [38:42] Gösterim: Wi-Fi Üzerinden Sıcaklığı Görüntüleme
  • [41:43] Sonuç ve Sorun Giderme

Görseller

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
Dil: 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
}

Kaynaklar ve referanslar

Henüz kaynak yok.

Dosyalar📁

Arduino Kodu (.ino)

Fritzing Dosyası

Kullanım Kılavuzu