![]() |
| 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
|
| Yazar | |
maliwankenobi254
Yeni Üye
Kayıt Tarihi: 23 Mart 2026 Durum: Aktif Değil Puanlar: 23 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı maliwankenobi254
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
Teşekkürler(0)
Alıntı Cevapla
Konu: Esp32 Mqtt haberleşmeGönderim Zamanı: 2 Saat 17 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? |
|
![]() |
|
Emr.Erkmn
Moderatör
Kayıt Tarihi: 28 Şubat 2025 Durum: Aktif Değil Puanlar: 905 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı Emr.Erkmn
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
Teşekkürler(1)
Alıntı Cevapla
Gönderim Zamanı: 1 saat 58 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"> |
|
![]() |
|
Yanıt Yaz
|
|
| Tweet |
| Forum Atla | Forum İzinleri ![]() Kapalı Foruma Yeni Konu Gönderme Kapalı Forumdaki Konulara Cevap Yazma Kapalı Forumda Cevapları Silme Kapalı Forumdaki Cevapları Düzenleme Kapalı Forumda Anket Açma Kapalı Forumda Anketlerde Oy Kullanma |