Clomosy | Forum Ana Sayfa
Forum Anasayfa Forum Anasayfa > Genel Programlama > Genel İşlemler
  Aktif Konular Aktif Konular RSS - Esp32 Mqtt haberleşme
  SSS SSS  Forumu Ara   Etkinlikler   Kayıt Ol Kayıt Ol  Giriş Giriş

Clomosy Resmi Forum Sitesidir. Amacımız kullanıcılarımıza, iş ortaklarımıza, danışmanlara, yazılımcılara programlarımız hakkında destek ve bilgi vermektir.

Esp32 Mqtt haberleşme

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
  Konu Arama Konu Arama  Topic Seçenekleri Topic Seçenekleri
maliwankenobi254 Açılır Kutu İzle
Yeni Üye
Yeni Üye


Kayıt Tarihi: 23 Mart 2026
Durum: Aktif Değil
Puanlar: 23
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı maliwankenobi254 Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: Esp32 Mqtt haberleşme
    Gönderim Zamanı: 1 saat 36 Dakika Önce Saat 22:56
// Ide Kod

#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>

const char* ssid        = "wifi adımız";
const char* password    = "wifi şifremiz";
const char* mqtt_server = "broker.hivemq.com";
const int   mqtt_port   = 1883;

#define PIN_SOIL_MOISTURE   34  
#define PIN_WATER_LEVEL     35  
#define PIN_LDR             32  
#define PIN_DHT             33  
#define PIN_RAIN            12  
#define PIN_RELAY           25  
#define DHT_TYPE            DHT11

DHT dht(PIN_DHT, DHT_TYPE);
const char* TOPIC_DATA = "isabet/iot/data";
const char* TOPIC_CTRL = "isabet/iot/ctrl";

WiFiClient espClient;
PubSubClient mqttClient(espClient);
unsigned long lastPublishTime = 0;
const unsigned long PUBLISH_INTERVAL_MS = 3000UL;

void setup() {
  Serial.begin(115200);
  pinMode(PIN_RAIN, INPUT_PULLUP);
  pinMode(PIN_RELAY, OUTPUT);
  digitalWrite(PIN_RELAY, HIGH);
  
  dht.begin();
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) { delay(500); }
  
  mqttClient.setServer(mqtt_server, mqtt_port);
  mqttClient.setCallback(mqttCallback);
}

void mqttCallback(char* topic, byte* payload, unsigned int length) {
  String msg = "";
  for (int i = 0; i < length; i++) msg += (char)payload;

  if (msg == "PUMP_ON") {
    digitalWrite(PIN_RELAY, LOW);
  } else if (msg == "PUMP_OFF") {
    digitalWrite(PIN_RELAY, HIGH);
  }
}

void loop() {
  if (!mqttClient.connected()) {
    if (mqttClient.connect("ESP32_Isabet_IoT")) {
      mqttClient.subscribe(TOPIC_CTRL);
    }
  }
  mqttClient.loop();

  unsigned long now = millis();
  if (now - lastPublishTime >= PUBLISH_INTERVAL_MS) {
    lastPublishTime = now;
    float t = dht.readTemperature();
    int sRaw = analogRead(PIN_SOIL_MOISTURE);
    int soil = map(sRaw, 4095, 1500, 0, 100);
    soil = constrain(soil, 0, 100);
    int rain = (digitalRead(PIN_RAIN) == LOW) ? 1 : 0;
    int tank = (analogRead(PIN_WATER_LEVEL) > 2000) ? 1 : 0;

    char payload[128];
    snprintf(payload, sizeof(payload), "{\"temp\":\"%.1f\",\"soil\":\"%d\",\"rain\":\"%d\",\"tank\":\"%d\"}", t, soil, rain, tank);
    mqttClient.publish(TOPIC_DATA, payload);
  }
}    

/// clomosy
var
  AnaForm: TclForm;
  MqttIstemci: TCLMqttClient;
  SicaklikYazi, ToprakYazi, DepoYazi, YagmurYazi, BaslikYazi: TclProLabel;
  PompaDugme: TclProButton;
  BaslikPanel, SicaklikPanel, ToprakPanel, DepoPanel, YagmurPanel: TclProPanel;
  LogoResim: TclProImage;
 
void BaglantiKuruldu
{
  ShowMessage('MQTT Bağlantısı Başarıyla Kuruldu! ✅');
  MqttIstemci.Subscribe('isabet/iot/data', 1);
}
 
void MesajGeldi
var
  mesaj: String;
{
  mesaj = AnaForm.clPayload;
  if (mesaj == '') Exit;
 
  SicaklikYazi.Text = '🌡️ Hava: ' + Clomosy.CLParseJSON(mesaj, 'temp') + '°C';
  ToprakYazi.Text   = '💧 Toprak Nemi: %' + Clomosy.CLParseJSON(mesaj, 'soil');
 
  if (Clomosy.CLParseJSON(mesaj, 'rain') == '1')
  {
    YagmurYazi.Text = '🌧️ Durum: Yagmur Yagiyor';
    YagmurYazi.clProSettings.FontColor = clAlphaColor.clRed;
  }
  else
  {
    YagmurYazi.Text = '☀️ Durum: Hava Acik';
    YagmurYazi.clProSettings.FontColor = clAlphaColor.clLightgreen;
  }
  YagmurYazi.SetclProSettings(YagmurYazi.clProSettings);
 
  if (Clomosy.CLParseJSON(mesaj, 'tank') == '1')
  {
    DepoYazi.Text = '🌊 Depo: DOLU';
    DepoYazi.clProSettings.FontColor = clAlphaColor.clLightgreen;
  }
  else
  {
    DepoYazi.Text = '🌊 Depo: BOS ⚠️';
    DepoYazi.clProSettings.FontColor = clAlphaColor.clRed;
  }
  DepoYazi.SetclProSettings(DepoYazi.clProSettings);
}
 
void PompaDugmeTiklandi
{
  if (not MqttIstemci.Connected)
  {
    ShowMessage('Hata: MQTT Bağlı Değil! Yeniden bağlanıyor...');
    MqttIstemci.Connect;
    Exit;
  }

  MqttIstemci.Channel = 'isabet/iot/ctrl';
  if (PompaDugme.Text == 'SULAMAYI BASLAT')
  {
    MqttIstemci.Send('PUMP_ON', 1, False);
    PompaDugme.Text = 'DURDUR';
    PompaDugme.clProSettings.BackgroundColor = clAlphaColor.clRed;
  }
  else
  {
    MqttIstemci.Send('PUMP_OFF', 1, False);
    PompaDugme.Text = 'SULAMAYI BASLAT';
    PompaDugme.clProSettings.BackgroundColor = clAlphaColor.clDarkgreen;
  }
  PompaDugme.SetclProSettings(PompaDugme.clProSettings);
}
 
  AnaForm = TclForm.Create(Self);
  AnaForm.SetFormColor('#1B2631', '', clGNone);
 
  MqttIstemci = AnaForm.AddNewMQTTClient(AnaForm, 'MqttIstemci');
  AnaForm.AddNewEvent(MqttIstemci, tbeOnMQTTClientMessage, 'MesajGeldi');
  AnaForm.AddNewEvent(MqttIstemci, tbeOnMQTTClientConnected, 'BaglantiKuruldu');
  
  MqttIstemci.BrokerHost = 'broker.hivemq.com'; 
  MqttIstemci.Port = 1883;
  MqttIstemci.Connect;
 
  BaslikPanel = AnaForm.AddNewProPanel(AnaForm, 'BaslikPanel');
  BaslikPanel.Align = alTop;
  BaslikPanel.Height = 60;
  BaslikPanel.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#2C3E50');
  BaslikPanel.SetclProSettings(BaslikPanel.clProSettings);
 
  BaslikYazi = AnaForm.AddNewProLabel(BaslikPanel, 'BaslikYazi', 'Isabet-IoT Akilli Sulama Sistemi');
  BaslikYazi.Align = alClient;
  BaslikYazi.clProSettings.FontSize = 18;
  BaslikYazi.clProSettings.FontColor = clAlphaColor.clWhite;
  BaslikYazi.clProSettings.FontHorzAlign = palCenter;
  BaslikYazi.clProSettings.FontVertAlign = palCenter;
  BaslikYazi.SetclProSettings(BaslikYazi.clProSettings);
 
  LogoResim = AnaForm.AddNewProImage(AnaForm, 'LogoResim');
  LogoResim.Align = alTop;
  LogoResim.Height = 180;
  LogoResim.clProSettings.PictureSource = 'https://resmim.net/cdn/2026/04/19/Cg0ZYD.png';
  LogoResim.clProSettings.PictureStretch = True;
  LogoResim.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#1B2631');
  LogoResim.SetclProSettings(LogoResim.clProSettings);
 
  SicaklikPanel = AnaForm.AddNewProPanel(AnaForm, 'SicaklikPanel');
  SicaklikPanel.Align = alTop;
  SicaklikPanel.Height = 70;
  SicaklikPanel.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#34495E');
  SicaklikPanel.clProSettings.RoundHeight = 15;
  SicaklikPanel.SetclProSettings(SicaklikPanel.clProSettings);
 
  SicaklikYazi = AnaForm.AddNewProLabel(SicaklikPanel, 'SicaklikYazi', '🌡️ Hava: --°C');
  SicaklikYazi.Align = alClient;
  SicaklikYazi.clProSettings.FontSize = 16;
  SicaklikYazi.clProSettings.FontColor = clAlphaColor.clWhite;
  SicaklikYazi.clProSettings.FontHorzAlign = palCenter;
  SicaklikYazi.clProSettings.FontVertAlign = palCenter;
  SicaklikYazi.SetclProSettings(SicaklikYazi.clProSettings);
 
  ToprakPanel = AnaForm.AddNewProPanel(AnaForm, 'ToprakPanel');
  ToprakPanel.Align = alTop;
  ToprakPanel.Height = 70;
  ToprakPanel.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#34495E');
  ToprakPanel.clProSettings.RoundHeight = 15;
  ToprakPanel.SetclProSettings(ToprakPanel.clProSettings);
 
  ToprakYazi = AnaForm.AddNewProLabel(ToprakPanel, 'ToprakYazi', '💧 Toprak Nemi: --%');
  ToprakYazi.Align = alClient;
  ToprakYazi.clProSettings.FontSize = 16;
  ToprakYazi.clProSettings.FontColor = clAlphaColor.clWhite;
  ToprakYazi.clProSettings.FontHorzAlign = palCenter;
  ToprakYazi.clProSettings.FontVertAlign = palCenter;
  ToprakYazi.SetclProSettings(ToprakYazi.clProSettings);
 
  YagmurPanel = AnaForm.AddNewProPanel(AnaForm, 'YagmurPanel');
  YagmurPanel.Align = alTop;
  YagmurPanel.Height = 70;
  YagmurPanel.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#34495E');
  YagmurPanel.clProSettings.RoundHeight = 15;
  YagmurPanel.SetclProSettings(YagmurPanel.clProSettings);
 
  YagmurYazi = AnaForm.AddNewProLabel(YagmurPanel, 'YagmurYazi', '☀️ Durum: --');
  YagmurYazi.Align = alClient;
  YagmurYazi.clProSettings.FontSize = 16;
  YagmurYazi.clProSettings.FontColor = clAlphaColor.clWhite;
  YagmurYazi.clProSettings.FontHorzAlign = palCenter;
  YagmurYazi.clProSettings.FontVertAlign = palCenter;
  YagmurYazi.SetclProSettings(YagmurYazi.clProSettings);
 
  DepoPanel = AnaForm.AddNewProPanel(AnaForm, 'DepoPanel');
  DepoPanel.Align = alTop;
  DepoPanel.Height = 70;
  DepoPanel.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#34495E');
  DepoPanel.clProSettings.RoundHeight = 15;
  DepoPanel.SetclProSettings(DepoPanel.clProSettings);
 
  DepoYazi = AnaForm.AddNewProLabel(DepoPanel, 'DepoYazi', '🌊 Depo: --');
  DepoYazi.Align = alClient;
  DepoYazi.clProSettings.FontSize = 16;
  DepoYazi.clProSettings.FontColor = clAlphaColor.clWhite;
  DepoYazi.clProSettings.FontHorzAlign = palCenter;
  DepoYazi.clProSettings.FontVertAlign = palCenter;
  DepoYazi.SetclProSettings(DepoYazi.clProSettings);
 
  PompaDugme = AnaForm.AddNewProButton(AnaForm, 'PompaDugme', 'SULAMAYI BASLAT');
  PompaDugme.Align = alBottom;
  PompaDugme.Height = 80;
  PompaDugme.clProSettings.BackgroundColor = clAlphaColor.clDarkgreen;
  PompaDugme.clProSettings.FontColor = clAlphaColor.clWhite;
  PompaDugme.clProSettings.FontSize = 18;
  PompaDugme.clProSettings.RoundHeight = 20;
  PompaDugme.SetclProSettings(PompaDugme.clProSettings);
 
  AnaForm.AddNewEvent(PompaDugme, tbeOnClick, 'PompaDugmeTiklandi');
  
  AnaForm.Run;
}     
1. olarak esp32 nin mqtt bağlantısı başarılı olmasına rağmen ide de seri post ekranında dht 11 sıcaklık sensöründen çıkan veride 
[hata] dht11 sensörü veri almıyor tarzı bir hata alıyorum
2. pinoutları doğru konumlandırmama rağmen bağlantı olarak hiçbir veri alışverişi yapamıyorum 
3. normal seri ekrwanda (arduino ıde)

rst:0x10 (RTCWDT_RTC_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)

configsip: 0, SPIWP:0xee

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:DIO, clock div:1

load:0x3fff0030,len:4640

load:0x40078000,len:15620

ho 0 tail 12 room 4

load:0x40080400,len:3164

csum err:0xa7!=0xb8

ets_main.c 384

ets Jul 29 2019 12:21:46 bu hataı alıyorum 


4. (ileriye dönük) Sistemi ileride güneş paneli veya pille beslemek istersek, MQTT bağlantısını sürekli açık tutmak (Keep-alive) yerine ESP32'nin Deep Sleep modunu kullanmamız gerekecek. Bu durumda, mobil uygulamadan (Clomosy) gelen anlık 'Pompayı Aç' komutunu cihaz uykudayken kaçırmamak için  hangi  özelliği kullanmak sağlıklı bir çözüm müdür?

Yukarı Dön
Emr.Erkmn Açılır Kutu İzle
Moderatör
Moderatör


Kayıt Tarihi: 28 Şubat 2025
Durum: Aktif
Puanlar: 905
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (1) Teşekkürler(1)   Alıntı Emr.Erkmn Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 1 saat 17 Dakika Önce Saat 23:15
Merhaba Mehmet Ali
Pin seçimin de kodunda pin_dht için gpio 33 kullanılmışç esp32 de bu pin giriş için uygundur ama bazı kartlar da parazit yapabilir. pin bağlantılarını kontrol eder misin?

zamanlama için dht11 yavaş bir sensör dht.readTemperature() komutundan önce en az 2 saniye önce hazır olması beklemen gerekir. setup kısmından sonra delay(2000) eklemek veya bir döngü ekleyerek okumayı daha kontrollü yapmak gerekebilir

veri alışverişi yapılmaması analogread fonksiyonu bazen wifi de sorun yaratabilir. pinlerin ortak olduğundan emin olabilirsin


gönderdiğin hata mesajı esp32'nin flash belliğine yüklenen yazılımın doğrudulunu kontrıl etmediğini gösteriri. 

aşağıda ilettiğim kodları clomosy tarafında rica etsem dener misin?


void PompaDugmeTiklandi
{
  // ... (bağlantı kontrolü
  MqttIstemci.Channel = 'isabet/iot/ctrl';
  if (PompaDugme.Text == 'SULAMAYI BASLAT')
  {
 
    MqttIstemci.Send('PUMP_ON', 1, True); 
    PompaDugme.Text = 'DURDUR';
    
  }
 
}





https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon="{"version":"2024.11.0","token":"439455f3e46c40b98dbd42a2f1a954d8","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}" crossorigin="anonymous">
Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Kutu İzle

Forum Software by Web Wiz Forums® version 12.07
Copyright ©2001-2024 Web Wiz Ltd.

Bu Sayfa 0,031 Saniyede Yüklendi.