Esp32 if yapısı çalışmıyor

Başlatan bbs2006, 05 Eylül 2024, 00:30:54

bbs2006

Merhaba
esp32 ile akıllı ev otomasyonu yapıyorum. html sayfasından veri tabanına (sql) bilgi  yazıyorum. html de butona bastığım zaman lamba için lamba, elektrik aç kapa   vb işlemleri yapacak. burada elektrik açıp kapatabiliyorum. ancak önceden çalışan lamba aç kap çalışmıyor. Bir türlü hataya bulamadım.

#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Arduino_JSON.h>
#define ONE_WIRE_BUS 27

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

//#include <WiFiAP.h>
//#include <WiFiClient.h>
//#include <MQ135.h>



//#define WIFI_SSID "esp"
//#define WIFI_PASSWORD "12345"
#define WIFI_SSID "FiberHGW_ZTDZ5N_2.4GHz"
#define WIFI_PASSWORD ""
String LED_kmk = "1";  // led yakmak için string değişken
String data_to_send = "";
//const char* serverName = "https://barisbilirsoylu.net.tr/esp-weather-station(up).php";
//const char* serverName = "https://barisbilirsoylu.net.tr/esp32_update1.php";
//const char* serverName = "https://barisbilirsoylu.net.tr/index1.php";
const char* serverName = "https://barisbilirsoylu.net.tr/esp-post-data.php";

String sensorName = "Sensor";
String apiKeyValue = "tPmAT5Ab3j7F9";
String sensorKonum= "Okul";


String postData = "";
String payload = "";
String veri1="";
String veri2="";
String veri3="";

//Su seviye alt ve üst degerler
String svri;
int alt = 420;
int ust = 520;

#define susenPin A7
int val=0;


int lamba= 21;           //Evin lambasının bağlı olduğu röle_1 için pin
int elektrik= 18;        //Evin elektriklerini açmak-kapatmak için bağlanmış röle_2 için pin 
int sicaklikPin = 27;    //Evin sıcaklığını ölçmek için kullanılan LM35 için kullanılan pin.
int fan  = 23;           //Evi havalandırmak için bağlanacak olan fan için pin.
int gaz = 15;            //Evin hava kalitesini ölçmek için kullanılan analog pin.
int hareket = 22;        //Evde hareketi alglayacak olan sensör
int analogDeger;
int sicaklikLed= 5;
float sicak=0;
int gazNormal=4;
int gazAlarm=2;
int buzer=23;
int hrkLed=19;
int ssvy=26;
//#define LED_01 21

// Defines GPIO 12 as LED_2.
//#define LED_02 18
unsigned long lastTime = 0;
// Timer set to 10 minutes (600000)
//unsigned long timerDelay = 600000;
// Set timer to 30 seconds (30000)
unsigned long timerDelay = 200;

void setup() 
{  
  
  // put your setup code here, to run once:

  
  pinMode(lamba,OUTPUT);
  pinMode(elektrik,OUTPUT);
  pinMode(sicaklikPin,INPUT);
  pinMode(fan,OUTPUT);
  pinMode(sicaklikLed,OUTPUT);
  pinMode(gaz,INPUT);
  pinMode(hareket,INPUT);
  pinMode(2, OUTPUT);
  pinMode(gazNormal, OUTPUT);
  pinMode(gazAlarm, OUTPUT);
  pinMode(buzer, OUTPUT);
  pinMode(hrkLed, OUTPUT);
  pinMode(ssvy, OUTPUT);
  //DS18B20 sıcaklık sensörü başlatılıyor.
  Serial.begin(115200);
  sensors.begin();
  
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(200); 
    Serial.print(".");
    
  }
  Serial.println("");
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();
  digitalWrite(sicaklikLed,LOW);
  }
void hrk()
  {
  if((digitalRead(hareket))==HIGH){
   Serial.println("Hareket Algılandı");
   digitalWrite(hrkLed,HIGH);
  }
  else if((digitalRead(hareket))==LOW){
   Serial.print("Hareket Algılanmadı");
   digitalWrite(hrkLed,LOW);
  }
  }
void su_svy()
  {
  //val = analogRead(susenPin);
	val=500;

  if (val == 0) {
		Serial.println("Su Seviyesi: Boş");
		digitalWrite(4, LOW);
	  String svri="Boş";
  }
	else if (val > 0 && val <= alt) {
		Serial.println("Su Seviyesi: Düşük");
		digitalWrite(4, HIGH);
    String svri="Düşük";
  }
	else if (val > alt &&  val <= ust) {
		Serial.println("Su Seviyesi: Orta");
		digitalWrite(4, LOW);
    String svri="Orta";
	}
	else if (val > ust) {
		Serial.println("Su seviyesi: Dolu");
		String svri="Dolu";
	}
	
  }
void lmba(){
          //If the received data is LED_is_on, we set HIGH the LED pin
    
    if(veri1 == "Lmb_on"){
            Serial.println("gel");
            digitalWrite(21,HIGH);
            digitalWrite(ssvy,HIGH);
          }
          //If the received data is LED_is_on, we set HIGH the LED pin
  else   if(veri1 == "Lmb_of"){ 
             Serial.println("git");
            digitalWrite(21,LOW);
            digitalWrite(ssvy,LOW);            
          }
}
void fann()
{
  if(veri3 == "fan_on"){
            digitalWrite(fan, HIGH);
            digitalWrite(2, HIGH);
          }
          //If the received data is LED_is_on, we set HIGH the LED pin
  else if(veri3 == "fan_of")  {
            digitalWrite(fan, LOW);
            digitalWrite(2, LOW);
          }  
}
  void elekt()
  {
   if(veri2 == "elk_on"){
            digitalWrite(elektrik, HIGH);
           
          }
          //If the received data is LED_is_on, we set HIGH the LED pin
   else if(veri2 == "elk_of"){
            digitalWrite(elektrik, LOW);
                      }  
  }
  
void gazOkuma()
{
   //analogDeger=analogRead(gaz);
   //analogDeger=200;
   Serial.println("CO2  Miktarı(in PPM): ");
   Serial.println(analogDeger);
   delay(2000);
   if(analogDeger>=330 && analogDeger<=500) {
     digitalWrite(gazAlarm,HIGH);
     digitalWrite(buzer,HIGH);}
   else if(analogDeger>=100 && analogDeger<330){
    digitalWrite(gazNormal,HIGH);
   }
}

void sicaklikOkuma(){
    sensors.requestTemperatures(); 
    Serial.print("Sicaklik: ");
    float sicak= sensors.getTempCByIndex(0);    
    Serial.print(sicak);
    Serial.println("ºC");
  delay(500); 
     if(sicak>=45){digitalWrite(sicaklikLed,HIGH); }
     else digitalWrite(sicaklikLed,LOW);
}
void loop() 
 { // put your main code here, to run repeatedly:
  digitalWrite(4,LOW);
  //digitalWrite(5,LOW);
if ((millis() - lastTime) > timerDelay) {
  if(WiFi.status()== WL_CONNECTED){
   
    WiFiClientSecure *client = new WiFiClientSecure;
    client->setInsecure(); //don't use SSL certificate
    HTTPClient https;
    
    // data_to_send = "check_LED_status=" + LED_id; // Lamba yakmak için
    // Your Domain name with URL path or IP address with path
    https.begin(*client, serverName);
    
    
  
    https.addHeader("Content-Type", "application/x-www-form-urlencoded");
    hrk();
    su_svy();
    sicaklikOkuma();
    gazOkuma();
    
     //"api_key=" + apiKeyValue +
     //Prepare your HTTP POST request data
    //sensors.getTempCByIndex(0)
      //value1=sıcaklık,value2=gaz,value5=hareket,value6=sıvı seviye,value7=fan
    String httpRequestData1 = "api_key=" + apiKeyValue +"&sensor=" + sensorName+"&konum=" + sensorKonum + "&value1=" + String(60)
                              +"&value2=" + String(500)+"&value5=" + String((digitalRead(hareket)))
                              +"&value6=" + String(500);
    String httpRequestData2=("check_SensorData=");                        
   //String httpRequestData=("check_SensorData=" + LED_kmk);                       
   //String httpRequestData = "api_key=" + apiKeyValue +"&Konum=" + sensorKonum + "&Sicaklik=" + String(sensors.getTempCByIndex(0))
   //                       + "&Gaz=" + String(69) + "&Lamba_durum=" + String(lamba) + "";*/
    
   Serial.println("httpRequestData1: ");
   Serial.print(httpRequestData1);
   // Serial.println("httpRequestData2: ");
    //Serial.print(httpRequestData2);
    
    // You can comment the httpRequestData variable above
    // then, use the httpRequestData variable below (for testing purposes without the BME280 sensor)
    //String httpRequestData = "api_key=tPmAT5Ab3j7F9&sensor=BME280&location=Office&value1=24.75&value2=49.54&value3=1005.14";

    // Send HTTP POST request
    
    int httpResponseCode1 = https.POST(httpRequestData1);
    int httpResponseCode2 = https.POST(httpRequestData2);
    //payload = https.getString();
    // If you need an HTTP request with a content type: text/plain
    //https.addHeader("Content-Type", "text/plain");
    //int httpResponseCode = https.POST("Hello, World!");
    
    // If you need an HTTP request with a content type: application/json, use the following:
    //https.addHeader("Content-Type", "application/json");
    //int httpResponseCode = https.POST("{\"value1\":\"19\",\"value2\":\"67\",\"value3\":\"78\"}");
    //if (httpResponseCode1>0) {
    if (httpResponseCode1 || httpResponseCode2 >0) {
     //if (httpResponseCode2 >0) {
      //Serial.println("HTTP Response code2: ");
     // Serial.println(httpResponseCode2);
      Serial.println(httpResponseCode1);
      Serial.println(payload);
      String payload = https.getString();
      
      veri1=payload.substring(0,8);
      veri2=payload.substring(8,14);
      veri3=payload.substring(14,20);
    
    
    //Print return code
      
      lmba();
      elekt();
      fann();
      //  if(response_code == 200){                                                 //If code is 200, we received a good response and we can read the echo data
         // String response_body = http.getString(); //                               //Save the data comming from the website
      Serial.println("Server reply: ");                                         //Print data to the monitor for debug
      Serial.println(veri1);
      Serial.println(veri2);
      Serial.println(veri3);
    }
    else {
      Serial.print("Error code: ");
     // Serial.println(httpResponseCode2);
          }
    // Free resources
    https.end();
  }
  else {
    Serial.println("WiFi Disconnected");
  }
  //Send an HTTP POST request every 30 seconds
  
  //delay(30000);
  lastTime = millis();  
  
}}
 












mehmet

Html üzerinden gelen veri1 değişkeni içerikleri doğru mu? Doğru ise pin çıkışını ölçü aletiyle doğrulayın. Belki yapı açık-kolektör olabilir. Pull-up/down direnç ekleyip tekrar deneyin.
I2C olarak kullanılan pin bu, belki de bu protokol setup içinde kapatılmalı.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

MrDarK

#2
İnternet trafiğinde gönderilen ve alınan paketlerde tıpkı işlemciye yaptığımız hata ayıklama modu gibi görüntülenebiliyor. Bunun için wireshark gibi ücretsiz programlar ile esp32nin internet yayınını pc üzerinden alacak hale getirebilirsen gelen ve giden tüm paketleri izleyebilirsin. Buda hatanın nerede olabileceği hakkında net bilgiler verecektir.
Picproje Eğitim Gönüllüleri ~ MrDarK

bbs2006

#3
Alıntı yapılan: mehmet - 05 Eylül 2024, 01:07:09Html üzerinden gelen veri1 değişkeni içerikleri doğru mu? Doğru ise pin çıkışını ölçü aletiyle doğrulayın. Belki yapı açık-kolektör olabilir. Pull-up/down direnç ekleyip tekrar deneyin.
I2C olarak kullanılan pin bu, belki de bu protokol setup içinde kapatılmalı.


Öncedenbunu
Çalıştırdım.sistem düzgün çalışıyodu

05 Eylül 2024, 07:56:00
Veri1 içerigi dogru