Firebase ile ESP8266 üzerinden veri okuma.

Tekrar merhabalar, konuya merak sarınca aylar önce blynk.cc, thingspeak.com, adafruit.com ve remotexy.com denemelerim aşamasında google firebase ile de belli bir veri tabanı oluşturma aşamasından sonra (biraz da blok kodlamayı sevmediğimden dolayı) vazgeçmiş, en kolay gelen remotexy.com ile bir prototip uygulama yapmıştım. Bu MQTT olayında her birinin projeye göre farklı avantaj ve dezavantajları olabilir. Mesela remotexy.com mobil uygulamadaki 5 nesneye kadar ücretsiz hizmet veriyor, fazlasında 30 saniye sonra ekranı kapatıyor. Diğerleri de belli bir kredi veya bant kapasitesine göre ücretsiz hizmet veriyorlar. RemoteXY.com da yapmak isteyip de yapamadığım, iletişim kesilince donanımın durumunu okuyup ekrana yansıtabilmekti. Belki bir yolu vardı ama ben o kısmı çözemedim. Firebase olayında veritabanı işin merkezini teşkil ediyor. Yani oluşturulan gerçek zamanlı (realtime database) veritabanına hangi yöntemle kayıt güncellenirse güncellesin, ESP8266 anında buluttaki verinin değişikliğini algılayıp ona göre gerekli komutu gerçekleştiriyor. Aynı zamanda iletişim kesildiğinde ya da uygulamayı kapatıp açtığınızda da veritabanındaki değer ne ise hem uygulama ekranında hem de donanımda aynı şekilde yansıyor. Yani (veritabanındaki değere uygun, uygulama başında değeri okuyup) kaldığı yerden devam etmeyi sağlayabiliyorsunuz.
1629642724068.png

1629642472838.png

1629642497709.png


Bu da uygulamadaki görüntü:
1629643192958.png

Arduino ve ESP8266 (NodeMCU) kodları, umarım bu konuda çalışanlara faydalı olacaktır.
Kod:
// ESP8266 (NodeMCU), Firebase ve MIT App Inventor Kullanımı
#include "FirebaseESP8266.h"
#include <ESP8266WiFi.h>
#include <DHT.h>

//1. Firebase veritabanı adresini, Token bilgisini ve ağ adresi bilgilerinizi giriniz.
#define FIREBASE_HOST "esp82**********************firebaseio.com" // http:// veya https:// olmadan yazın
#define FIREBASE_AUTH "***************************************"
#define WIFI_SSID "ssid"
#define WIFI_PASSWORD "pass"

#define ESP_LED_BUILTIN D4  //nodeMCU/ESP32 builtin_led D4/GPIO2, LED_BUILTIN Arduino da PIN 13
#define TRIGGER_TUS D5 // reset ve sıfırlama tuşu

#define PIN_ROLE1 D1 // Röle 1
#define PIN_ROLE2 D2 // Röle 2
#define PIN_BUTTON_1 D2

#define DHTPIN D3  //dht pin i
#define DHTTYPE DHT11  //dhtp sensör tipi
DHT dht11_sensor(DHTPIN, DHTTYPE); //dht11_sensor isimli bir nesne oluşturuldu


FirebaseData veritabanim;


void setup()
{
  Serial.begin(115200);
  delay(100);
  Serial.println();
  Serial.print("\nAğ Bağlantısı oluşturuluyor");
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("IP adresine bağlanıldı: ");
  Serial.println(WiFi.localIP());
  Serial.println();


  //Firebase bağlantısı başlatılıyor
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);

  //Ağ bağlantısı kesilirse tekrar bağlanmasına izin veriyoruz
  Firebase.reconnectWiFi(true);

 //pinMode(D2,OUTPUT);
 //digitalWrite(D2, LOW);

  pinMode(PIN_ROLE1, OUTPUT); digitalWrite(PIN_ROLE1, HIGH); // başta söndür/kapat
  pinMode(PIN_ROLE2, OUTPUT); digitalWrite(PIN_ROLE2, HIGH);
  dht11_sensor.begin();

}

String onceki_role1="", onceki_role2="";

void loop()
{
  if (Firebase.getString(veritabanim, "/ROLE1")) //Alınacak veri tipine göre getInt, getBool, getFloat, getDouble, getString olarak kullanılabilir.
  {
    if (onceki_role1 != veritabanim.stringData())
    {
      onceki_role1=veritabanim.stringData();
      Serial.print("Röle1: "); Serial.println(onceki_role1); // röle durumu
      digitalWrite(PIN_ROLE1, (onceki_role1=="1")?LOW:HIGH);
/*      if (onceki_role1=="1")
        digitalWrite(PIN_ROLE1, LOW);
      else
        digitalWrite(PIN_ROLE1, HIGH); */
    }
  }
  else
  {
    //hata varsa hata mesajı ve nedeni yazdırılıyor
    Serial.print("Röle1 verisi okunamadı, ");
    Serial.println(veritabanim.errorReason());
  }

  if (Firebase.getString(veritabanim, "/ROLE2")) //Alınacak veri tipine göre getInt, getBool, getFloat, getDouble, getString olarak kullanılabilir.
  {
    if (onceki_role2 != veritabanim.stringData())
    {
      onceki_role2=veritabanim.stringData();
      Serial.print("Röle2: "); Serial.println(onceki_role2);
      digitalWrite(PIN_ROLE2, (onceki_role2=="1")?LOW:HIGH);
    }
  }
  else
  {
    //hata varsa hata mesajı ve nedeni yazdırılıyor
    Serial.print("Röle2 verisi okunamadı, ");
    Serial.println(veritabanim.errorReason());
  }


  float sicaklik = dht11_sensor.readTemperature();
  float nem = dht11_sensor.readHumidity();

  if (Firebase.getFloat(veritabanim, "/SICAKLIK"))
  {
    if (sicaklik != veritabanim.floatData())
    {
      if (Firebase.setFloat(veritabanim, "/SICAKLIK", sicaklik))
      {
        Serial.print("Sıcaklık gönderildi: ");
        Serial.println(sicaklik);
      }
      else
      {
        Serial.print("Sıcaklık gönderilemedi, ");
        Serial.println(veritabanim.errorReason());
      }
    }
  }
 
  if (Firebase.getFloat(veritabanim, "/NEM"))
  {
    if (nem != veritabanim.floatData())
    {
      if (Firebase.setFloat(veritabanim, "/NEM", nem))
      {
        Serial.print("Nem gönderildi: ");
        Serial.println(nem);
      }
      else
      {
        Serial.print("Nem gönderilemedi, ");
        Serial.println(veritabanim.errorReason());
      }
    }
  }

  delay(100);
 
}

Firebase veritabanı ve kodlama konusunda Mucit Pilot adındaki youtuber arkadaştan faydalandım.
 

Ekli dosyalar

  • 1629642451880.png
    1629642451880.png
    144.9 KB · Görüntüleme: 35
  • 1629643165331.png
    1629643165331.png
    130 KB · Görüntüleme: 21
Son düzenleme:
Boş zaman bulunca bu sistemi tekrar kurup çalıştırdım. Temel mantığı anlattığım gibi internet/bulut ortamındaki bir aracı veritabanı üzerinden mobil uygulama ile devremizi kontrol ediyoruz. Her ikisi de birbirlerine doğrudan erişemedikleri için firebase real-time veritabanı üzerinden iletişime geçiyorlar. Denemeleri yaparken uygulamanın devrenin açık olup olmadığına bakmaksızın çalıştığını fark ettim. Yani röle tuşlarına basılıp veritabanında değerler değişse de donanım devrede olmadığında herhangi bir işlem gerçekleşmiyor. Bu durumu çözmek için veritabanına biri SORU diğeri CEVAP olan iki alan daha ekledim. Uygulamayı açınca her iki alana da başta sıfır atanıyor. Daha sonra bir timer nesnesi ile saat ekranın üst kısmında yazdırılıyor ve bu esnada her 5 saniyede bir SORU alanı bir artırılarak veritabanına yazılıyor. Bu esnada da devremiz/ESP8266/NodeMCU diğer kontrollerin yanında her 5 saniyede SORU alanını okuyup CEVAP alanına yazıyor. Uygulama da her iki alanın arasındaki farkın üçten büyük olmasını kontrol ediyor ve büyükse iletişim/bağlantı yok mesajı ekranda çıkıyor. Bu noktada istenirse röle tuşları da etkisiz hale getirilebilir.
1630876045760.png
1630876122560.png

1630876171707.png

Kod:
// ESP8266 (NodeMCU), Firebase ve MIT App Inventor Kullanımı
#include "FirebaseESP8266.h"
#include <ESP8266WiFi.h>
#include <DHT.h>

//1. Firebase veritabanı adresini, Token bilgisini ve ağ adresi bilgilerinizi giriniz.
#define FIREBASE_HOST "esp82**********************firebaseio.com" // http:// veya https:// olmadan yazın
#define FIREBASE_AUTH "***************************************"
#define WIFI_SSID "ssid"
#define WIFI_PASSWORD "pass"

#define ESP_LED_BUILTIN D4  //nodeMCU/ESP32 builtin_led D4/GPIO2, LED_BUILTIN Arduino da PIN 13
#define TRIGGER_TUS D5 // reset ve sıfırlama tuşu

#define PIN_ROLE1 D1 // Röle 1
#define PIN_ROLE2 D2 // Röle 2
#define PIN_BUTTON_1 D2

#define DHTPIN D3  //dhtyi bağladığımız pini yazdık
#define DHTTYPE DHT11  //dhtp sensör tipini yazdık
DHT dht11_sensor(DHTPIN, DHTTYPE); //dht11_sensor isimli bir nesne oluşturduk

volatile uint32_t lastMillis = 0;

//2. firebaseDB adında bir firebase veritabanı nesnesi oluşturuyoruz
FirebaseData firebaseDB;


void setup()
{
  Serial.begin(115200);
  delay(100);
  Serial.println();
  Serial.print("\nAğ Bağlantısı Oluşturuluyor");
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("IP adresine bağlanıldı: ");
  Serial.println(WiFi.localIP());
  Serial.println();


  //3. Firebase bağlantısı başlatılıyor
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);

  //4. Ağ bağlantısı kesilirse tekrar bağlanmasına izin veriyoruz
  Firebase.reconnectWiFi(true);

 //pinMode(D2,OUTPUT);
 //digitalWrite(D2, LOW);

  pinMode(PIN_ROLE1, OUTPUT); digitalWrite(PIN_ROLE1, HIGH); // başta söndür/kapat
  pinMode(PIN_ROLE2, OUTPUT); digitalWrite(PIN_ROLE2, HIGH); // loop() da veritabanındaki son durumları alıp uyguluyor.
  dht11_sensor.begin();

}

String onceki_role1="", onceki_role2="";
String soru="";

void loop()
{
  if (Firebase.getString(firebaseDB, "/ROLE1")) //Alınacak veri tipine göre getInt, getBool, getFloat, getDouble, getString olarak kullanılabilir.
  {
    if (onceki_role1 != firebaseDB.stringData())
    {
      onceki_role1=firebaseDB.stringData();
      Serial.println("Röle1: " + onceki_role1); // röle durumu
      digitalWrite(PIN_ROLE1, (onceki_role1=="1")?LOW:HIGH);
/*      if (onceki_role1=="1")
        digitalWrite(PIN_ROLE1, LOW);
      else
        digitalWrite(PIN_ROLE1, HIGH); */
    }
  }
  else
    //hata varsa hata mesajı ve nedeni yazdırılıyor
    Serial.println("Röle1 verisi okunamadı, " + String(firebaseDB.errorReason()));

  if (Firebase.getString(firebaseDB, "/ROLE2"))
  {
    if (onceki_role2 != firebaseDB.stringData())
    {
      onceki_role2=firebaseDB.stringData();
      Serial.println("Röle2: " + onceki_role2);
      digitalWrite(PIN_ROLE2, (onceki_role2=="1")?LOW:HIGH);
    }
  }
  else
    //hata varsa hata mesajı ve nedeni yazdırılıyor
    Serial.println("Röle2 verisi okunamadı, " + String(firebaseDB.errorReason()));


  if (millis() - lastMillis >= 5000) // 1000 milisaniye=1 sn.
  {                                  // 5 saniyede bir burası işleniyor.
    lastMillis = millis();
    
    Serial.println(" ");

    if (Firebase.getString(firebaseDB, "/SORU"))
    {

      soru=firebaseDB.stringData();
      Serial.println("Okunan SORU: " + soru); // uygulamadan gelen veri.

      if (Firebase.getString(firebaseDB, "/CEVAP"))
      {
 
        if (firebaseDB.stringData()!=soru)
        {
          if (Firebase.setString(firebaseDB, "/CEVAP", soru))
            Serial.println("Okunan SORU, CEVAP olarak yazıldı. " + soru);
          else
            Serial.println("CEVAP yazılamadı, " + String(firebaseDB.errorReason()));
        }
      }
    }
    else
      Serial.println("SORU verisi okunamadı, " + String(firebaseDB.errorReason()));

    
    float sicaklik = dht11_sensor.readTemperature();
    float nem = dht11_sensor.readHumidity();
 
    if (Firebase.getFloat(firebaseDB, "/SICAKLIK"))
    {
      if (sicaklik != firebaseDB.floatData())
      {
        if (Firebase.setFloat(firebaseDB, "/SICAKLIK", sicaklik))
          Serial.println("Sıcaklık gönderildi: " + String(sicaklik));
        else
          Serial.println("Sıcaklık gönderilemedi, " + String(firebaseDB.errorReason()));
      }
    }
    
    if (Firebase.getFloat(firebaseDB, "/NEM"))
    {
      if (nem != firebaseDB.floatData())
      {
        if (Firebase.setFloat(firebaseDB, "/NEM", nem))
          Serial.println("Nem gönderildi: "  + String(nem));
        else
          Serial.println("Nem gönderilemedi, " + String(firebaseDB.errorReason()));
      }
    }

  }

  delay(100);
}
 
Boş zaman bulunca bu sistemi tekrar kurup çalıştırdım. Temel mantığı anlattığım gibi internet/bulut ortamındaki bir aracı veritabanı üzerinden mobil uygulama ile devremizi kontrol ediyoruz. Her ikisi de birbirlerine doğrudan erişemedikleri için firebase real-time veritabanı üzerinden iletişime geçiyorlar. Denemeleri yaparken uygulamanın devrenin açık olup olmadığına bakmaksızın çalıştığını fark ettim. Yani röle tuşlarına basılıp veritabanında değerler değişse de donanım devrede olmadığında herhangi bir işlem gerçekleşmiyor. Bu durumu çözmek için veritabanına biri SORU diğeri CEVAP olan iki alan daha ekledim. Uygulamayı açınca her iki alana da başta sıfır atanıyor. Daha sonra bir timer nesnesi ile saat ekranın üst kısmında yazdırılıyor ve bu esnada her 5 saniyede bir SORU alanı bir artırılarak veritabanına yazılıyor. Bu esnada da devremiz/ESP8266/NodeMCU diğer kontrollerin yanında her 5 saniyede SORU alanını okuyup CEVAP alanına yazıyor. Uygulama da her iki alanın arasındaki farkın üçten büyük olmasını kontrol ediyor ve büyükse iletişim/bağlantı yok mesajı ekranda çıkıyor. Bu noktada istenirse röle tuşları da etkisiz hale getirilebilir.
Ekli dosyayı görüntüle 81144Ekli dosyayı görüntüle 81145
Ekli dosyayı görüntüle 81146
Kod:
// ESP8266 (NodeMCU), Firebase ve MIT App Inventor Kullanımı
#include "FirebaseESP8266.h"
#include <ESP8266WiFi.h>
#include <DHT.h>

//1. Firebase veritabanı adresini, Token bilgisini ve ağ adresi bilgilerinizi giriniz.
#define FIREBASE_HOST "esp82**********************firebaseio.com" // http:// veya https:// olmadan yazın
#define FIREBASE_AUTH "***************************************"
#define WIFI_SSID "ssid"
#define WIFI_PASSWORD "pass"

#define ESP_LED_BUILTIN D4  //nodeMCU/ESP32 builtin_led D4/GPIO2, LED_BUILTIN Arduino da PIN 13
#define TRIGGER_TUS D5 // reset ve sıfırlama tuşu

#define PIN_ROLE1 D1 // Röle 1
#define PIN_ROLE2 D2 // Röle 2
#define PIN_BUTTON_1 D2

#define DHTPIN D3  //dhtyi bağladığımız pini yazdık
#define DHTTYPE DHT11  //dhtp sensör tipini yazdık
DHT dht11_sensor(DHTPIN, DHTTYPE); //dht11_sensor isimli bir nesne oluşturduk

volatile uint32_t lastMillis = 0;

//2. firebaseDB adında bir firebase veritabanı nesnesi oluşturuyoruz
FirebaseData firebaseDB;


void setup()
{
  Serial.begin(115200);
  delay(100);
  Serial.println();
  Serial.print("\nAğ Bağlantısı Oluşturuluyor");
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("IP adresine bağlanıldı: ");
  Serial.println(WiFi.localIP());
  Serial.println();


  //3. Firebase bağlantısı başlatılıyor
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);

  //4. Ağ bağlantısı kesilirse tekrar bağlanmasına izin veriyoruz
  Firebase.reconnectWiFi(true);

 //pinMode(D2,OUTPUT);
 //digitalWrite(D2, LOW);

  pinMode(PIN_ROLE1, OUTPUT); digitalWrite(PIN_ROLE1, HIGH); // başta söndür/kapat
  pinMode(PIN_ROLE2, OUTPUT); digitalWrite(PIN_ROLE2, HIGH); // loop() da veritabanındaki son durumları alıp uyguluyor.
  dht11_sensor.begin();

}

String onceki_role1="", onceki_role2="";
String soru="";

void loop()
{
  if (Firebase.getString(firebaseDB, "/ROLE1")) //Alınacak veri tipine göre getInt, getBool, getFloat, getDouble, getString olarak kullanılabilir.
  {
    if (onceki_role1 != firebaseDB.stringData())
    {
      onceki_role1=firebaseDB.stringData();
      Serial.println("Röle1: " + onceki_role1); // röle durumu
      digitalWrite(PIN_ROLE1, (onceki_role1=="1")?LOW:HIGH);
/*      if (onceki_role1=="1")
        digitalWrite(PIN_ROLE1, LOW);
      else
        digitalWrite(PIN_ROLE1, HIGH); */
    }
  }
  else
    //hata varsa hata mesajı ve nedeni yazdırılıyor
    Serial.println("Röle1 verisi okunamadı, " + String(firebaseDB.errorReason()));

  if (Firebase.getString(firebaseDB, "/ROLE2"))
  {
    if (onceki_role2 != firebaseDB.stringData())
    {
      onceki_role2=firebaseDB.stringData();
      Serial.println("Röle2: " + onceki_role2);
      digitalWrite(PIN_ROLE2, (onceki_role2=="1")?LOW:HIGH);
    }
  }
  else
    //hata varsa hata mesajı ve nedeni yazdırılıyor
    Serial.println("Röle2 verisi okunamadı, " + String(firebaseDB.errorReason()));


  if (millis() - lastMillis >= 5000) // 1000 milisaniye=1 sn.
  {                                  // 5 saniyede bir burası işleniyor.
    lastMillis = millis();
   
    Serial.println(" ");

    if (Firebase.getString(firebaseDB, "/SORU"))
    {

      soru=firebaseDB.stringData();
      Serial.println("Okunan SORU: " + soru); // uygulamadan gelen veri.

      if (Firebase.getString(firebaseDB, "/CEVAP"))
      {
 
        if (firebaseDB.stringData()!=soru)
        {
          if (Firebase.setString(firebaseDB, "/CEVAP", soru))
            Serial.println("Okunan SORU, CEVAP olarak yazıldı. " + soru);
          else
            Serial.println("CEVAP yazılamadı, " + String(firebaseDB.errorReason()));
        }
      }
    }
    else
      Serial.println("SORU verisi okunamadı, " + String(firebaseDB.errorReason()));

   
    float sicaklik = dht11_sensor.readTemperature();
    float nem = dht11_sensor.readHumidity();
 
    if (Firebase.getFloat(firebaseDB, "/SICAKLIK"))
    {
      if (sicaklik != firebaseDB.floatData())
      {
        if (Firebase.setFloat(firebaseDB, "/SICAKLIK", sicaklik))
          Serial.println("Sıcaklık gönderildi: " + String(sicaklik));
        else
          Serial.println("Sıcaklık gönderilemedi, " + String(firebaseDB.errorReason()));
      }
    }
   
    if (Firebase.getFloat(firebaseDB, "/NEM"))
    {
      if (nem != firebaseDB.floatData())
      {
        if (Firebase.setFloat(firebaseDB, "/NEM", nem))
          Serial.println("Nem gönderildi: "  + String(nem));
        else
          Serial.println("Nem gönderilemedi, " + String(firebaseDB.errorReason()));
      }
    }

  }

  delay(100);
}
Hocam Öncelikle Hayırlı Bayramlar Bayramınız Mubarek Olsun. :) 1 Yıldır Arayıpta Bulamadığım şey Henüz Deneme Fırsatım Olmadı Bayram Dönüşü İlk Fırsatta Deniyecem Ama Sizlere Bir Sorum Olacak. Örnegin; Hocam Sıcaklık ve Nem İçin Alt Deger ve Üst Deger Ekleyebilirmiyiz ve Ekledigimiz Değer Örnegin Sıcaklık : 24.5 Alt Deger. 29.5 Üst Değer Olacak Şekilde Nemde Aynı Şekilde Örnegin Nem : %45 Alt Değer. %60 Üst Değer ve Bunları Nodemcu Üzerinden Takip Edip Alt ve Üst Değerleri İnventor App Üzerinden Hem Görüntüleyip Hemde Değerleri Değistirebilme Yapabilirmiyiz Yapılabilirse Ne Gibi Bir Yol İzlemeliyim ve Bana Bu Konuda Yardımcı Olabilirseniz Size Teşekkürü Bir Borç Bilirim. Tekrardan Hayırlı Bayramlar Allaha Emanet Olun..
 
Hocam Öncelikle Hayırlı Bayramlar Bayramınız Mubarek Olsun. :) 1 Yıldır Arayıpta Bulamadığım şey Henüz Deneme Fırsatım Olmadı Bayram Dönüşü İlk Fırsatta Deniyecem Ama Sizlere Bir Sorum Olacak. Örnegin; Hocam Sıcaklık ve Nem İçin Alt Deger ve Üst Deger Ekleyebilirmiyiz ve Ekledigimiz Değer Örnegin Sıcaklık : 24.5 Alt Deger. 29.5 Üst Değer Olacak Şekilde Nemde Aynı Şekilde Örnegin Nem : %45 Alt Değer. %60 Üst Değer ve Bunları Nodemcu Üzerinden Takip Edip Alt ve Üst Değerleri İnventor App Üzerinden Hem Görüntüleyip Hemde Değerleri Değistirebilme Yapabilirmiyiz Yapılabilirse Ne Gibi Bir Yol İzlemeliyim ve Bana Bu Konuda Yardımcı Olabilirseniz Size Teşekkürü Bir Borç Bilirim. Tekrardan Hayırlı Bayramlar Allaha Emanet Olun..
Boş zaman bulunca bu sistemi tekrar kurup çalıştırdım. Temel mantığı anlattığım gibi internet/bulut ortamındaki bir aracı veritabanı üzerinden mobil uygulama ile devremizi kontrol ediyoruz. Her ikisi de birbirlerine doğrudan erişemedikleri için firebase real-time veritabanı üzerinden iletişime geçiyorlar. Denemeleri yaparken uygulamanın devrenin açık olup olmadığına bakmaksızın çalıştığını fark ettim. Yani röle tuşlarına basılıp veritabanında değerler değişse de donanım devrede olmadığında herhangi bir işlem gerçekleşmiyor. Bu durumu çözmek için veritabanına biri SORU diğeri CEVAP olan iki alan daha ekledim. Uygulamayı açınca her iki alana da başta sıfır atanıyor. Daha sonra bir timer nesnesi ile saat ekranın üst kısmında yazdırılıyor ve bu esnada her 5 saniyede bir SORU alanı bir artırılarak veritabanına yazılıyor. Bu esnada da devremiz/ESP8266/NodeMCU diğer kontrollerin yanında her 5 saniyede SORU alanını okuyup CEVAP alanına yazıyor. Uygulama da her iki alanın arasındaki farkın üçten büyük olmasını kontrol ediyor ve büyükse iletişim/bağlantı yok mesajı ekranda çıkıyor. Bu noktada istenirse röle tuşları da etkisiz hale getirilebilir.
Ekli dosyayı görüntüle 81144Ekli dosyayı görüntüle 81145
Ekli dosyayı görüntüle 81146
Kod:
// ESP8266 (NodeMCU), Firebase ve MIT App Inventor Kullanımı
#include "FirebaseESP8266.h"
#include <ESP8266WiFi.h>
#include <DHT.h>

//1. Firebase veritabanı adresini, Token bilgisini ve ağ adresi bilgilerinizi giriniz.
#define FIREBASE_HOST "esp82**********************firebaseio.com" // http:// veya https:// olmadan yazın
#define FIREBASE_AUTH "***************************************"
#define WIFI_SSID "ssid"
#define WIFI_PASSWORD "pass"

#define ESP_LED_BUILTIN D4  //nodeMCU/ESP32 builtin_led D4/GPIO2, LED_BUILTIN Arduino da PIN 13
#define TRIGGER_TUS D5 // reset ve sıfırlama tuşu

#define PIN_ROLE1 D1 // Röle 1
#define PIN_ROLE2 D2 // Röle 2
#define PIN_BUTTON_1 D2

#define DHTPIN D3  //dhtyi bağladığımız pini yazdık
#define DHTTYPE DHT11  //dhtp sensör tipini yazdık
DHT dht11_sensor(DHTPIN, DHTTYPE); //dht11_sensor isimli bir nesne oluşturduk

volatile uint32_t lastMillis = 0;

//2. firebaseDB adında bir firebase veritabanı nesnesi oluşturuyoruz
FirebaseData firebaseDB;


void setup()
{
  Serial.begin(115200);
  delay(100);
  Serial.println();
  Serial.print("\nAğ Bağlantısı Oluşturuluyor");
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("IP adresine bağlanıldı: ");
  Serial.println(WiFi.localIP());
  Serial.println();


  //3. Firebase bağlantısı başlatılıyor
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);

  //4. Ağ bağlantısı kesilirse tekrar bağlanmasına izin veriyoruz
  Firebase.reconnectWiFi(true);

 //pinMode(D2,OUTPUT);
 //digitalWrite(D2, LOW);

  pinMode(PIN_ROLE1, OUTPUT); digitalWrite(PIN_ROLE1, HIGH); // başta söndür/kapat
  pinMode(PIN_ROLE2, OUTPUT); digitalWrite(PIN_ROLE2, HIGH); // loop() da veritabanındaki son durumları alıp uyguluyor.
  dht11_sensor.begin();

}

String onceki_role1="", onceki_role2="";
String soru="";

void loop()
{
  if (Firebase.getString(firebaseDB, "/ROLE1")) //Alınacak veri tipine göre getInt, getBool, getFloat, getDouble, getString olarak kullanılabilir.
  {
    if (onceki_role1 != firebaseDB.stringData())
    {
      onceki_role1=firebaseDB.stringData();
      Serial.println("Röle1: " + onceki_role1); // röle durumu
      digitalWrite(PIN_ROLE1, (onceki_role1=="1")?LOW:HIGH);
/*      if (onceki_role1=="1")
        digitalWrite(PIN_ROLE1, LOW);
      else
        digitalWrite(PIN_ROLE1, HIGH); */
    }
  }
  else
    //hata varsa hata mesajı ve nedeni yazdırılıyor
    Serial.println("Röle1 verisi okunamadı, " + String(firebaseDB.errorReason()));

  if (Firebase.getString(firebaseDB, "/ROLE2"))
  {
    if (onceki_role2 != firebaseDB.stringData())
    {
      onceki_role2=firebaseDB.stringData();
      Serial.println("Röle2: " + onceki_role2);
      digitalWrite(PIN_ROLE2, (onceki_role2=="1")?LOW:HIGH);
    }
  }
  else
    //hata varsa hata mesajı ve nedeni yazdırılıyor
    Serial.println("Röle2 verisi okunamadı, " + String(firebaseDB.errorReason()));


  if (millis() - lastMillis >= 5000) // 1000 milisaniye=1 sn.
  {                                  // 5 saniyede bir burası işleniyor.
    lastMillis = millis();
   
    Serial.println(" ");

    if (Firebase.getString(firebaseDB, "/SORU"))
    {

      soru=firebaseDB.stringData();
      Serial.println("Okunan SORU: " + soru); // uygulamadan gelen veri.

      if (Firebase.getString(firebaseDB, "/CEVAP"))
      {
 
        if (firebaseDB.stringData()!=soru)
        {
          if (Firebase.setString(firebaseDB, "/CEVAP", soru))
            Serial.println("Okunan SORU, CEVAP olarak yazıldı. " + soru);
          else
            Serial.println("CEVAP yazılamadı, " + String(firebaseDB.errorReason()));
        }
      }
    }
    else
      Serial.println("SORU verisi okunamadı, " + String(firebaseDB.errorReason()));

   
    float sicaklik = dht11_sensor.readTemperature();
    float nem = dht11_sensor.readHumidity();
 
    if (Firebase.getFloat(firebaseDB, "/SICAKLIK"))
    {
      if (sicaklik != firebaseDB.floatData())
      {
        if (Firebase.setFloat(firebaseDB, "/SICAKLIK", sicaklik))
          Serial.println("Sıcaklık gönderildi: " + String(sicaklik));
        else
          Serial.println("Sıcaklık gönderilemedi, " + String(firebaseDB.errorReason()));
      }
    }
   
    if (Firebase.getFloat(firebaseDB, "/NEM"))
    {
      if (nem != firebaseDB.floatData())
      {
        if (Firebase.setFloat(firebaseDB, "/NEM", nem))
          Serial.println("Nem gönderildi: "  + String(nem));
        else
          Serial.println("Nem gönderilemedi, " + String(firebaseDB.errorReason()));
      }
    }

  }

  delay(100);
}
usta kaç gündür uğraşıyorum işin içine firebase girince
cannot convert 'const char [42]' to 'FirebaseConfig*' {aka 'firebase_cfg_t*'}
bu hatayı veriyor ne yaptıysam gideremedim
 
Hangi aşamada, kodunuz nedir?
#include <ESP8266WiFi.h>
#include <FirebaseESP8266.h>

const char *ssid = "iiiiii";
const char *password = "iiiii";

#define FIREBASE_HOST "your-firebase-project-id.firebaseio.com"
#define FIREBASE_AUTH "token"

#define RELAY_PIN D5

FirebaseData firebaseData;

void setup() {
Serial.begin(115200);

WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");

// Create a FirebaseConfig object
FirebaseConfig config;
config.host = FIREBASE_HOST;
config.auth = FIREBASE_AUTH;

// Initialize Firebase
Firebase.begin(&config);

Firebase.reconnectWiFi(true);

pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
}

void loop() {
if (Firebase.getInt(firebaseData, "/relayState")) {
int relayState = firebaseData.intData();
digitalWrite(RELAY_PIN, relayState);
}
delay(1000);
}












C:\Users\Ali Can\Desktop\firebase\firebase.ino: In function 'void setup()':
firebase:27:12: error: 'FirebaseConfig' {aka 'struct firebase_cfg_t'} has no member named 'auth'
27 | config.auth = FIREBASE_AUTH;
| ^~~~
firebase:30:27: error: no matching function for call to 'FIREBASE_CLASS::begin(FirebaseConfig*)'
30 | Firebase.begin(&config);
| ^
In file included from C:\Users\Ali Can\Documents\Arduino\libraries\Firebase_ESP8266_Client\src/FirebaseESP8266.h:36,
from C:\Users\Ali Can\Desktop\firebase\firebase.ino:2:
C:\Users\Ali Can\Documents\Arduino\libraries\Firebase_ESP8266_Client\src/Firebase.h:130:8: note: candidate: 'void FIREBASE_CLASS::begin(FirebaseConfig*, FirebaseAuth*)'
130 | void begin(FirebaseConfig *config, FirebaseAuth *auth);
| ^~~~~
C:\Users\Ali Can\Documents\Arduino\libraries\Firebase_ESP8266_Client\src/Firebase.h:130:8: note: candidate expects 2 arguments, 1 provided
"SD.h" için birden fazla library bulundu
Kullanılıyor: C:\Users\Ali Can\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\SD
Kullanılmıyor: C:\Program Files (x86)\Arduino\libraries\SD
exit status 1
'FirebaseConfig' {aka 'struct firebase_cfg_t'} has no member named 'auth'


denediğim kod ile verdiği hata üstedir bir bilginiz varsa yardımcı olursanız çok yardımcı olursunuz bu işlerde yeniyim uğraşa uğraşa öğreniyorum 2gündür bu hata ve buna benzer bir hata vardı bunlar ile uğraşmaktayım malesef yapamadım
 

Forum istatistikleri

Konular
129,688
Mesajlar
929,030
Kullanıcılar
452,391
Son üye
girisimci25

Yeni konular

Geri
Üst