Sayfayı Yazdır | Pencereyi Kapat

Esp32 Mqtt haberleşme

Nereden Yazdırıldığı: Clomosy | Forum
Kategori: Genel Programlama
Forum Adı: Genel İşlemler
Forum Tanımlaması: TRObject dili ile programlama yaparken karşılaşılan genel işlemler
URL: https://forum.clomosy.com.tr/forum_posts.asp?TID=1522
Tarih: 12 Mayıs 2026 Saat 01:44
Program Versiyonu: Web Wiz Forums 12.07 - https://www.webwizforums.com


Konu: Esp32 Mqtt haberleşme
Mesajı Yazan: maliwankenobi254
Konu: Esp32 Mqtt haberleşme
Mesaj Tarihi: 11 Mayıs 2026 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" rel="nofollow - 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?




Cevaplar:
Mesajı Yazan: Emr.Erkmn
Mesaj Tarihi: 11 Mayıs 2026 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" rel="nofollow - 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">



Sayfayı Yazdır | Pencereyi Kapat

Forum Software by Web Wiz Forums® version 12.07 - https://www.webwizforums.com
Copyright ©2001-2024 Web Wiz Ltd. - https://www.webwiz.net