0
Bu yazıyı " 3 " dakikada okuyabilirsiniz. 🙂

Bu yazıda, Arduino ile ESP8266 Wi-Fi modülü, DHT11 sıcaklık ve nem sensörü ve röle kullanarak uzaktan kontrol edilebilen bir sistem oluşturacağız. Adafruit IO platformu üzerinden sıcaklık değerini izleyecek ve röleyi açıp kapatabileceğiz.

ESP8266 Wi-Fi Modülü Hakkında

ESP8266, TCP/IP protokol yığınını destekleyen ve Wi-Fi bağlantısı sağlayabilen bir mikroçiptir. Hem bağımsız bir mikrodenetleyici olarak hem de Arduino gibi diğer mikrodenetleyiciler için bir Wi-Fi adaptörü olarak kullanılabilir. ESP8266, çeşitli modüllerde bulunabilir, en popüler olanlarından biri ESP-01 modülüdür.

Gerekli Malzemeler:

  • Arduino Uno (veya benzeri bir Arduino kartı)
  • ESP8266 Wi-Fi modülü (örneğin, ESP-01)
  • DHT11 sıcaklık ve nem sensörü
  • Röle modülü
  • Breadboard
  • Jumper kablolar
  • USB-TTL Seri dönüştürücü (eğer ESP8266 modülünüzde yoksa)
  • 10kΩ direnç

Devre Kurulumu:

  • ESP8266 Bağlantıları: ESP-01 modülünün RX, TX, CH_PD pinlerini aşağıdaki tablodaki bilgilere göre Arduino’ya bağlayın.
    • DHT11 Sensörü Bağlantıları:
  • VCC pinini Arduino’nun 5V pinine bağlayın.
  • GND pinini Arduino’nun GND pinine bağlayın.
  • DATA pinini Arduino’nun dijital pinlerinden birine bağlayın (örneğin, pin 2).
  • DATA pini ile 5V pini arasına 10kΩ direnç bağlayın (pull-up direnci).
    • Röle Modülü Bağlantıları:
  • VCC pinini Arduino’nun 5V pinine bağlayın.
  • GND pinini Arduino’nun GND pinine bağlayın.
  • IN pinini Arduino’nun dijital pinlerinden birine bağlayın (örneğin, pin 4).

Devre Tablosu:

BileşenArduino PinleriESP8266 PinleriDiğer Bağlantılar
ESP8266 (Örneğin, ESP-01)GNDGND
3.3VVCC
Pin 0RX
Pin 1TX
Pin 2CH_PD3.3V (CHIP ENABLE)
Pin XRST3.3V (RESET) (opsiyonel)
DHT11 Sensörü5V
GND
Pin 2DATA
10kΩ direnç (DATA ile 5V arası)
Röle Modülü5V
GND
Pin 4IN

Notlar:

  • ESP8266 modülünüzün pinout’u, kullandığınız modele göre değişebilir. Lütfen modülünüzün veri sayfasını kontrol edin.
  • DHT11 sensörü için DATA pini ile 5V pini arasına pull-up direnci bağlanması gerekir.
  • Röle modülünün IN pini, röleyi kontrol etmek için kullanılır. HIGH seviyesi röleyi açar, LOW seviyesi ise kapatır.
  • Röle modülünü kullanırken, rölenin anahtarlama kapasitesini ve yükünüzün gereksinimlerini dikkate alın. Gerekirse, röleyi korumak için bir transistör veya başka bir anahtarlama devresi kullanın.

Adafruit IO Ayarları:

  • Adafruit IO’da (https://io.adafruit.com/) yeni bir feed oluşturun ve adını “sicaklik” olarak ayarlayın.
  • Yeni bir gösterge paneli oluşturun ve sıcaklık değerini görüntülemek için bir gösterge widget’ı ekleyin. Widget’ı “sicaklik” feed’ine bağlayın.
  • Yeni bir feed oluşturun ve adını “role-durum” olarak ayarlayın.
  • Gösterge paneline bir geçiş (toggle) widget’ı ekleyin. Widget’ı “role-durum” feed’ine bağlayın.

Kodlama:

  • Gerekli Kütüphaneler:
  • ESP8266WiFi: ESP8266 Wi-Fi modülünü kullanmak için gereklidir.
  • Adafruit_MQTT: MQTT protokolünü kullanmak için gereklidir.
  • Adafruit_MQTT_Client: MQTT istemcisi oluşturmak için kullanılır.
  • DHT: DHT11 sıcaklık ve nem sensörünü kullanmak için gereklidir.
  • Kütüphaneleri Yükleme:
  • Arduino IDE’sinde “Araçlar” > “Kütüphane Yöneticisi” yolunu izleyin.
  • Arama çubuğunda yukarıda belirtilen kütüphane isimlerini arayın ve yükleyin.
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <Adafruit_MQTT.h>
#include <Adafruit_MQTT_Client.h>
#include "DHT.h"

#define DHTPIN 2
#define DHTTYPE DHT11

// Wi-Fi ağınızın adını ve parolasını değiştirin
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

// Adafruit IO anahtarınızı (AIO Key) ve kullanıcı adınızı (username) değiştirin
const char* username = "YOUR_ADAFRUIT_IO_USERNAME";
const char* aio_key = "YOUR_ADAFRUIT_IO_KEY";

// Feed adlarını değiştirin
const char* temperatureFeed = "sicaklik";
const char* relayStateFeed = "role-durum";

// Röle pinini tanımlayın
const int relayPin = 4;

DHT dht(DHTPIN, DHTTYPE);
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, username, aio_key);

// Feed nesnelerini oluşturun
Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/" TEMPERATUREFEED);
Adafruit_MQTT_Subscribe relay_state = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/" RELAYSTATEFEED);

void MQTT_connect();

void setup() {
  Serial.begin(115200);
  dht.begin();

  // Wi-Fi'ye bağlanın
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Wi-Fi'ye bağlanılıyor...");
  }
  Serial.println("Wi-Fi'ye bağlandı!");

  // MQTT'ye bağlanın
  MQTT_connect();

  // Röle pinini çıkış olarak ayarlayın
  pinMode(relayPin, OUTPUT);

  // Röle durum feed'ine abone olun
  mqtt.subscribe(&relay_state);
}

void loop() {
  // MQTT bağlantısını kontrol edin ve gerekirse yeniden bağlanın
  MQTT_connect();

  // MQTT mesajlarını kontrol edin
  Adafruit_MQTT_Subscribe *subscription;
  while ((subscription = mqtt.readSubscription(5000))) {
    if (subscription == &relay_state) {
      // Röle durumunu güncelleyin
      if (strcmp((char *)relay_state.lastread, "ON") == 0) {
        digitalWrite(relayPin, HIGH);
      } else {
        digitalWrite(relayPin, LOW);
      }
    }
  }

  // Sıcaklık ve nem değerlerini okuyun
  float temperatureValue = dht.readTemperature();

  // Sıcaklık değerini Adafruit IO'ya gönderin
  if (! temperature.publish(temperatureValue)) {
    Serial.println(F("Failed"));
  } else {
    Serial.println(F("OK!"));
  }

  delay(5000); // Veri gönderme sıklığını ayarlayın
}

// MQTT'ye bağlanma fonksiyonu
void MQTT_connect() {
  int8_t ret;

  // MQTT'ye zaten bağlıysanız, çıkın
  if (mqtt.connected()) {
    return;
  }

  Serial.print("MQTT'ye bağlanılıyor...");

  uint8_t retries = 3;
  while ((ret = mqtt.connect()) != 0) { // Bağlantı başarısız olursa yeniden deneyin
       Serial.println(mqtt.connectErrorString(ret));
       Serial.println("Yeniden deneniyor...");
       mqtt.disconnect();
       delay(5000);  // 5 saniye bekleyin
       retries--;
       if (retries == 0) {
         // Bağlantı kurulamazsa, cihazı yeniden başlatın
         while (1);
       }
  }
  Serial.println("MQTT'ye bağlandı!");
}

Kod Açıklaması:

  • Pin Tanımları ve Değişkenler: DHT11 sensörünün ve röle pinleri tanımlanır. Ayrıca, Wi-Fi SSID ve parola, Adafruit IO kullanıcı adı ve AIO Key, feed adları gibi bilgilerin girilmesi gereken değişkenler tanımlanır. (Adafruit IO menüsünden “View Adafruit IO Key” e tıklayıp bilgileri görebilirsiniz.
  • DHT ve MQTT Nesneleri Oluşturma: DHT sensörü ve MQTT istemcisi için nesneler oluşturulur. Ayrıca, sıcaklık ve röle durum feed’leri için yayınlama ve abone olma nesneleri oluşturulur.
  • setup() Fonksiyonu: Seri iletişim başlatılır, DHT sensörü ve Wi-Fi bağlantısı başlatılır, MQTT’ye bağlanılır, röle pini çıkış olarak ayarlanır ve röle durum feed’ine abone olunur.
  • loop() Fonksiyonu: MQTT bağlantısı kontrol edilir ve gerekirse yeniden bağlanılır, MQTT mesajları kontrol edilir (röle durumunu güncellemek için), sıcaklık değeri okunur ve Adafruit IO’ya gönderilir.
  • MQTT_connect() Fonksiyonu: MQTT bağlantısını kurmak ve yeniden kurmak için kullanılır.

  • Kullanım:
  • Kodu Arduino’ya yükleyin.
  • Adafruit IO gösterge panelinizde sıcaklık değerini ve röle durumunu görüntüleyebilirsiniz.
  • Geçiş widget’ını kullanarak röleyi açıp kapatabilirsiniz. Bu işlem, Arduino’daki röle pinini kontrol edecektir.
  • Geliştirmeler:
  • Nem değerini de Adafruit IO’ya gönderin ve gösterge panelinde görüntüleyin.
  • Otomasyon kuralları ekleyerek sıcaklık belirli bir değerin üzerine çıktığında röleyi otomatik olarak açın veya kapatın.
  • Daha fazla sensör ve aktuatör ekleyerek sistemi genişleti

Özet:

Bu kod, Arduino ile ESP8266, DHT11 sıcaklık sensörü ve röle kullanarak uzaktan kontrol edilebilen bir sistem oluşturmayı göstermektedir. Adafruit IO platformu ile verileri görselleştirebilir ve röleyi kontrol edebilirsiniz. Bu, ev otomasyonu, uzaktan izleme ve kontrol gibi IoT uygulamaları için temel bir örnektir.

Ahmet Kemal YILDIZ
Eskişehir Osmangazi Üniversitesi Bilgisayar ve Öğretim Teknolojileri Öğretmenliği mezunu bir Bilişim Teknolojileri ve Yazılım Dersi Öğretmeniyim. Bilişim Teknolojileri ve Yazılım dersi ile ilgili ders etkinlikleri, kaynak materyaller, örnek etkinlikler ve ilgi duyduğum birçok konu hakkında vakit buldukça buradan blogluyorum. :)

    18# – Arduino Ethernet Shield Kullanımı

    önceki yazı

    20# – Arduino ile RFID Kart Kullanımı (Okuma)

    Sonraki Yazı

    Bu Yazılar da İlgini Çekebilir!

    Yorumlar

    Yorum yap

    E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

    Daha Arduino