rsimsek
Profesyonel Üye
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.
Bu da uygulamadaki görüntü:
Arduino ve ESP8266 (NodeMCU) kodları, umarım bu konuda çalışanlara faydalı olacaktır.
Firebase veritabanı ve kodlama konusunda Mucit Pilot adındaki youtuber arkadaştan faydalandım.
Bu da uygulamadaki görüntü:
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
Son düzenleme: