NodeMCU (ESP8266) - Local MQTT Broker (Server) ve Client Kurulumu

👤 Yazar: ozcan 📅 Tarih: 01.08.2026 15:25 👁️ Görüntüleme: 0

NodeMCU (ESP8266) - Local MQTT Broker (Server) ve Client Kurulum Rehberi

Bu rehberde, dış internet bağlantısına veya üçüncü taraf bulut sunucularına bağımlı olmadan kendi yerel ağınızda (Local Network) nasıl bir MQTT mimarisi kuracağınızı iki farklı senaryo ile inceliyoruz.

mqtt iletişim şeması

Sistem Mimarısı:
  • Seçenek A (Klasik/Kararlı): PC / Raspberry Pi üzerinde Mosquitto MQTT Broker (Server) + NodeMCU (Client).
  • Seçenek B (Tamamen Bağımsız): Doğrudan NodeMCU'nun kendisini Broker (Server) yapmak + Diğer NodeMCU/ESP'ler (Client).

SEÇENEK A: Yerel Sunucu (Mosquitto) + NodeMCU Client

Endüstriyel ve ev otomasyonu projelerinde en çok tercih edilen yöntemdir. Bilgisayarınıza veya Raspberry Pi'ye yükleyeceğiniz Mosquitto MQTT Broker, merkez sunucu görevi görür.

1. Mosquitto Broker Kurulumu (PC / Linux)

  • Windows / Linux: Mosquitto indirip kurun.
  • mosquitto.conf dosyasına şu iki satırı ekleyerek dış cihaz bağlantılarına izin verin:
    listener 1883
    allow_anonymous true
  • Sunucuyu çalıştırın ve bilgisayarınızın yerel IP adresini öğrenin (örneğin: 192.168.1.50).

2. NodeMCU Client Kodu (Local Server'a Bağlanan)

// NodeMCU Local MQTT Client Kodu

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "WIFI_ADINIZ";
const char* password = "WIFI_SIFRENIZ";

// Kendi bilgisayarınızın / Raspberry Pi'nizin Yerel IP Adresi
const char* mqtt_server = "192.168.1.50"; 
const int mqtt_port = 1883;

const char* topic_pub = "ev/salon/sicaklik";
const char* topic_sub = "ev/salon/isik";

WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\n[Wi-Fi Bağlandı]");
}

void callback(char* topic, byte* payload, unsigned int length) {
  String message = "";
  for (unsigned int i = 0; i < length; i++) {
    message += (char)payload[i];
  }
  Serial.printf("Gelen Mesaj [%s]: %s\n", topic, message.c_str());
  
  if (String(topic) == topic_sub) {
    if (message == "1") digitalWrite(D4, LOW);  // LED AÇ
    if (message == "0") digitalWrite(D4, HIGH); // LED KAPAT
  }
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Local MQTT Sunucusuna Bağlanılıyor...");
    String clientId = "NodeMCU-Client-" + String(ESP.getChipId(), HEX);
    if (client.connect(clientId.c_str())) {
      Serial.println(" [BAĞLANDI]");
      client.subscribe(topic_sub);
    } else {
      Serial.printf(" [HATA] State: %d - 5sn sonra tekrar deneniyor...\n", client.state());
      delay(5000);
    }
  }
}

void setup() {
  pinMode(D4, OUTPUT);
  digitalWrite(D4, HIGH);
  Serial.begin(115200);
  setup_wifi();
  
  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(callback);
}

void loop() {
  if (!client.connected()) reconnect();
  client.loop();
}

SEÇENEK B: NodeMCU'nun Kendisini MQTT Server (Broker) Yapmak

Ortamda bir bilgisayar veya Raspberry Pi yoksa, uMQTTBroker kütüphanesini kullanarak birinci NodeMCU'yu harici bir MQTT Sunucusuna dönüştürebilirsiniz. İkinci NodeMCU (veya telefonunuz) bu karta istemci (client) olarak bağlanabilir.

Gerekli Kütüphane: Arduino IDE Kütüphane Yöneticisi'nden uMQTTBroker (by Martin Ger) kütüphanesini kurmanız gerekmektedir.

1. NodeMCU MQTT SERVER (Broker) Kodu

// NodeMCU - Donanımsal MQTT Broker (Server) Kodu

#include <ESP8266WiFi.h>
#include <uMQTTBroker.h>

const char* ssid = "WIFI_ADINIZ";
const char* password = "WIFI_SIFRENIZ";

// uMQTTBroker Sınıfından Türetme
class MyBroker : public uMQTTBroker {
public:
    virtual bool onConnect(IPAddress addr, uint16_t client_count) {
      Serial.printf("İstemci Bağlandı: %s | Toplam İstemci: %d\n", addr.toString().c_str(), client_count);
      return true; // Bağlantıya izin ver
    }

    virtual void onData(String topic, String data) {
      Serial.printf("Broker Üzerinden Geçen Veri -> Topic: %s | Data: %s\n", topic.c_str(), data.c_str());
    }
};

MyBroker myBroker;

void setup() {
  Serial.begin(115200);
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("\n==================================");
  Serial.println("[MQTT SERVER / BROKER AKTİF]");
  Serial.print("Server IP Adresi: ");
  Serial.println(WiFi.localIP());
  Serial.println("Port: 1883");
  Serial.println("==================================");

  // Broker'ı 1883 Portunda Başlat
  myBroker.init(1883);
}

void loop() {
  // Broker arka planda çalışır, loop içinde ekstra işlem gerekmez.
}

2. NodeMCU MQTT CLIENT Kodu (Server Olan NodeMCU'ya Bağlanan)

Ağdaki ikinci NodeMCU'ya aşağıdaki kodu yüklersiniz. Tek yapmanız gereken mqtt_server değişkenine, Server olan NodeMCU'nun IP adresini yazmaktır:

// NodeMCU - MQTT Client Kodu (Broker NodeMCU'ya Bağlanır)

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "WIFI_ADINIZ";
const char* password = "WIFI_SIFRENIZ";

// SERVER Olan NodeMCU'nun IP Adresi (Seri Port Ekranından Öğrenebilirsiniz)
const char* mqtt_server = "192.168.1.105"; 
const int mqtt_port = 1883;

WiFiClient espClient;
PubSubClient client(espClient);

unsigned long lastSend = 0;
int counter = 0;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }

  Serial.println("\nClient Wi-Fi Bağlandı!");
  client.setServer(mqtt_server, mqtt_port);
}

void loop() {
  if (!client.connected()) {
    if (client.connect("NodeMCU_Client_Device")) {
      Serial.println("NodeMCU Broker Server'a Bağlandı!");
    } else {
      delay(2000);
      return;
    }
  }
  client.loop();

  // Her 3 saniyede bir Broker NodeMCU'ya veri gönder
  if (millis() - lastSend > 3000) {
    lastSend = millis();
    counter++;
    
    String payload = "{\"sayac\":" + String(counter) + "}";
    client.publish("nodemcu/veri", payload.c_str());
    Serial.println("Veri Gönderildi: " + payload);
  }
}

İki Yöntemin Karşılaştırılması

Kriter Seçenek A (Mosquitto PC/Pi) Seçenek B (NodeMCU Server)
Kapasite / Performans Yüksek (Binlerce cihaz bağlayabilirsiniz) Sınırlı (RAM yetersizliğinden max 4-8 cihaz)
Donanım Gereksinimi Ek bir PC / Raspberry Pi şarttır Sadece 2 adet NodeMCU kartı yeterlidir
Kullanım Alanı Geniş Ev Otomasyonu, Endüstriyel Takip Küçük DIY Projeler, Saha Uygulamaları

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
↑ Sayfa Başı
📞 İletişim ✉ E-Posta Gönder 🟥 YouTube
© 2026 Yenidir.com
Yenidir CMS V0.1