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şen | Arduino Pinleri | ESP8266 Pinleri | Diğer Bağlantılar |
ESP8266 (Örneğin, ESP-01) | GND | GND | – |
3.3V | VCC | – | |
Pin 0 | RX | – | |
Pin 1 | TX | – | |
Pin 2 | CH_PD | 3.3V (CHIP ENABLE) | |
Pin X | RST | 3.3V (RESET) (opsiyonel) | |
DHT11 Sensörü | 5V | – | – |
GND | – | – | |
Pin 2 | DATA | – | |
– | – | 10kΩ direnç (DATA ile 5V arası) | |
Röle Modülü | 5V | – | – |
GND | – | – | |
Pin 4 | IN | – |
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.
Yorumlar