Merhaba arkadaşlar. Bu dersimizde ESP8266 kullanarak “ThingSpeak” aracılığı ile ortam sıcaklığını grafik halinde internete upload edeceğiz.

Bu uygulamada kullanacağımız malzemeler:

Uygulamamızı gerçekleştirebilmek için ESP8266 modülünüzü güncellemeniz ve https://www.thingspeak.com sitesinden bir hesap açıp bu hesabı Arduino ve ESP modülünüz ile haberleştirmeniz gerekiyor. ESP modülünüz güncel değil ise buradan güncelleştirme işlemini yapabilirsiniz.

https://www.thingspeak.com adresine girdikten sonra sağ üst köşeden Sing Up butonuna tıkladığımızda bizden Kullanıcı adı, email gibi bilgileri isteyen bir ekran giriyor. Burada Time Zone kısmını doğru girmenizi tavsiye ederim çünkü daha sonra yolladığımız veriler ile grafik oluşturduğumuzda zaman bilgisini doğru alması açısından önemli.

Kayıt olup giriş yaptıktan sonra Üstteki Channels menüsünden My Channels  seçeneği seçildiğinde karşımıza aşağıdaki gibi bir menü geliyor.

esp8266 thingspeak

Bu menüye geldiğinizde New Channel sekmesine tıklayın ve karşımıza gelen menü ile yeni bir kanal açmaya hazırız.

new_channel

Gelen sayfada Name yazan yere kanalımızın ismini yazıyoruz. Ben buraya şimdilik salon sicakligi yazıyorum. Siz istediğiniz şekilde yazabilirsiniz. Zaten daha sonradan bu ayarları değiştirebilmek mümkün. Önemli olan Türkçe karakter kullanmamamız gerektiği. Description kısmına ise kanalımız ile ilgili bir açıklama yazmamız gerekiyor. LM35 ile salon sicakliginin olculmesi yazıyorum buraya da. Field 1 yazan kısım ise yolladığımız veriler ile oluşturacağımız grafiğin ne grafiği olduğudur. Bu örneğimizde Sıcaklık-Zaman grafiği çizdireceğimiz için bu kısma sicaklik yazıyorum

Birden çok LM35 sensörü ile evin tamamının sıcaklığını ölçme ya da sıcaklık haricinde başka veriler de yollamak isterseniz Field 2, Field 3 gibi başka grafikler de oluşturabilirsiniz. Fakat şuan için sadece doldurduğumuz kısımlar bize yeterli olacak.

Bilgileri girip Save Channel ‘a tıkladığımızda kanalımız oluşturulmuş oluyor ve aşağıdaki gibi bir sayfaya yönlendiriliyoruz.

esp8266 thingspeak

Bu sayfada yolladığımız verileri Sıcaklık-Zaman grafiği şeklinde görebileceğiz. Üst menüden biraz bahsetmek gerekirse Private View sekmesi grafiği sadece bizim görebildiğimiz sekmedir. Eğer verileri herkes ile paylaşmak istersen hemen sağındaki Public View sekmesine tıklayıp sayfa linkini paylaşmamız yeterli olacaktır. Channel Settings sekmesinden az önce ayarladığımız tüm bilgileri değiştirebilir veya yeni grafikler ekleyebiliriz. API Keys sekmesi ise bizim için önemli bir kısım, çünkü Arduino ve ESP modülümüz ile kanalımızı haberleştirirken bu sekme içinde bulunan, bize özel API Keyimizi kullanacağız. Bu key tamamen bize özel olup, keyi kanalımız ile ESP modülümüz arasında bir şifre gibi düşünebilirsiniz. En sağdaki Data Import/Export sekmesinde ise daha önce elimizde kanalımıza ait bir veri var ise bu veriyi grafiğimize eklemeye ya da grafiğimizdeki verileri bilgisayarımıza indirmeye yarar.

Hesap oluşturma, kanal açma ve API Key’i alma işlemleri buraya kadar anlatılan kısımdı şimdi ise devremizin bağlantısı ve kodumuza geçelim.

Devremizin bağlantısı aşağıdaki gibi olacaktır.

ESP8266 baglanti semasi

NOT: Devreyi kurup Arduino’ya kod atmaya çalıştığınızda Arduino IDE’si hata verecektir. Merak etmeyin bunun nedeni, Arduino’nun rx ve tx bağlantılarının o an bağlı olmasından dolayıdır. rx ve tx bağlantılarını söküp, Arduino’ya kod attıktan sonra takarsanız bir problem ile karşılaşmazsınız.

#define ag_ismi "WiFi_Ismi"
#define ag_sifresi "WiFi Sifresi"
#define IP "184.106.153.149"    //thingspeak.com IP adresi
 
float sicaklik;
 
void setup()
{
  Serial.begin(115200); //Seriport'u açıyoruz. Güncellediğimiz 
                        //ESP modülünün baudRate değeri 115200 olduğu için bizde Seriport'u 115200 şeklinde seçiyoruz
  
  Serial.println("AT"); //ESP modülümüz ile bağlantı kurulup kurulmadığını kontrol ediyoruz.
  
  delay(3000); //ESP ile iletişim için 3 saniye bekliyoruz.
 analogReference(INTERNAL);
  if(Serial.find("OK")){         //esp modülü ile bağlantıyı kurabilmişsek modül "AT" komutuna "OK" komutu ile geri dönüş yapıyor.
     Serial.println("AT+CWMODE=1"); //esp modülümüzün WiFi modunu STA şekline getiriyoruz. Bu mod ile modülümüz başka ağlara bağlanabilecek.
     delay(2000);
     String baglantiKomutu=String("AT+CWJAP=\"")+ag_ismi+"\",\""+ag_sifresi+"\"";
    Serial.println(baglantiKomutu);
    
     delay(5000);
 }
}
 
void loop(){
  float sicaklik = analogRead(A0) / 9.31; 
 Serial.println(sicaklik);
 sicaklik_yolla(sicaklik);
 // dakikada 1 güncellenmesi için 1 dakika bekle
 delay(60000);
}
 
 
void sicaklik_yolla(float sicaklik){
 Serial.println(String("AT+CIPSTART=\"TCP\",\"") + IP + "\",80");  //thingspeak sunucusuna bağlanmak için bu kodu kullanıyoruz. 
                                                                   //AT+CIPSTART komutu ile sunucuya bağlanmak için sunucudan izin istiyoruz. 
                                                                   //TCP burada yapacağımız bağlantı çeşidini gösteriyor. 80 ise bağlanacağımız portu gösteriyor
 delay(1000);
  if(Serial.find("Error")){     //sunucuya bağlanamazsak ESP modülü bize "Error" komutu ile dönüyor.
   Serial.println("AT+CIPSTART Error");
    return;
  }
  
 String yollanacakkomut = "GET /update?key=64T0OS3R1OEAYUML&field1=";   // Burada 64T0OS3R1OEAYUML yazan kısım bizim API Key den aldığımız Key. Siz buraya kendi keyinizi yazacaksınız.
 yollanacakkomut += (int(sicaklik));                                      // Burada ise sıcaklığımızı float değişkenine atayarak yollanacakkomut değişkenine ekliyoruz.
 yollanacakkomut += "\r\n\r\n";                                             // ESP modülümüz ile seri iletişim kurarken yazdığımız komutların modüle iletilebilmesi için Enter komutu yani
  delay(3000);                                                                                // /r/n komutu kullanmamız gerekiyor.
 
 Serial.print("AT+CIPSEND=");                    //veri yollayacağımız zaman bu komutu kullanıyoruz. Bu komut ile önce kaç tane karakter yollayacağımızı söylememiz gerekiyor.
 Serial.println(yollanacakkomut.length()+2);       //yollanacakkomut değişkeninin kaç karakterden oluştuğunu .length() ile bulup yazırıyoruz.
 
 delay(1000);
 
 if(Serial.find(">")){                           //eğer sunucu ile iletişim sağlayıp komut uzunluğunu gönderebilmişsek ESP modülü bize ">" işareti ile geri dönüyor.
                                                 // arduino da ">" işaretini gördüğü anda sıcaklık verisini esp modülü ile thingspeak sunucusuna yolluyor.
 Serial.print(yollanacakkomut);
 Serial.print("\r\n\r\n");
 }
 else{
 Serial.println("AT+CIPCLOSE");
 }
}

Bu kodu kendi WiFi adres ve şifremiz ile düzenledikten sonra kodu Arduino’ya attığımızda yavaş yavaş verileri ThingSpeak’de oluşturduğumuz grafikde görmeye başlıyoruz. Ben sensörü test etmek için çakmak tuttuğumdan değerler biraz ani oynuyor ama siz daha stabil değerler alabilirsiniz.

ESP8266 sicaklik olcumu

 

 

27 Yorumlar

  1. Merhaba aşamaları deniyoruz ancak, AT iletisine cevap olarak OK gelmiyor. ESP8266’ı update edip denedeiğimizde geliyor ama RX TX ‘i çıkarıp programı gönderip RX TX’i takıp serial monitoru incelediğimizde AT yi görüyoruz ancak OK cevabı gelmiyor ve program veri göndermiyor. Sorun ne olabilir acaba? Önerilen parçalar ile yapıyoruz bu işlemi..

    • Daha önce OK cevabı alabildiğinize göre BaudRate değerinin 115200 olduğundan eminsiniz sanıyorum. Serial port’a AT komutlarını yollarken Serial.println(); ile yollayın eğer bu olmuyor ise Serial.print(“AT”); Serial.print(/n/r); şeklinde deneyin. Birde rx-tx’in doğru takıldığına emin olun.

      • Direk arduino serial monitor’den deniyoruz ama cevap alamadık bir türlü. Dediğim gibi update şemasını yapıp, update ettiğimizde akabininde cevap alabilidik modülden ama bunun dışında cevap alamadık. Update ederkende arada olup arada olmama gibi bir sorun yaşadık ayrıca kablolarda veya kartta sorun olabilir belki de. Bu arada BaudRate 115200, Serial.print’ide denedik aslında ama tekrar deneyelim bi

  2. Merhaba,
    Makalenizde blirttiginiz sekilde tum islemleri yaptim ve sicaklik degerlerini basarili bir sekilde thingspeak e gonderim. Herhangi bir sorun olmadan cok guzel kullandim. Gayet aciklayici ve net bir yazi olmus tebrik ederim.
    Ancak ufak bir sorunum var. Tum gun boyunca sicaklik degerlerini aldim ve sikintisiz kullandigim esp8266 artik degerleri gondermemeye basladi.
    Yazilimsal oldugunu sandim ama esp uzerindeki mavi ledin hic yanmadigini gordum. Saniyorum veri transferi olmadigindan yada modul ustunde iletisim saglanmadigindan yanmiyor.
    Bir anda neden gitmis olabilir? Acaba modul mu yandi?
    Daha once bu tarz bir olayla karsilastiniz mi acaba?
    Yardimlariniz icin simdiden tesekkur eder, iyi calismalar dilerim.
    Saygilarimla.

    • Merhaba Barış Bey, öncelikle ilginize teşekkürler. Açıkca söylemek gerekirse ESP modülü uzun kullanımlarda bu gibi sorunlar çıkartabiliyor. Bunun nedeni muhtemelen hiç uyku moduna geçmeden hep çalışmasından kaynaklanman ısınma ile ilgili. Ancak bu konuda emin olmamakla beraber eğer öğrendiğim takdirde buraya tekrar bir bilgilendirme yazısı gireceğim.

  3. Bunları yaptığımda thingspeakte verilerimi göremiyorum. ESP ile arduino iletişiminde bir problem yok. Ağa da bağlanmakta bir sorun da yok ama monitor edilmiyor veriler? Bağlantılar ve kodlar sizin eklemiş olduğunuz gibi hocam.

  4. Merhaba,
    Makaledeki kodda geçen ‘ void sicaklik_yolla ‘ komutunun yaptığı işlem nedir?
    Yardımcı olursanız mutlu olurum

  5. Arduino ile yeni tanışan biriyim. Arduino uno ve ESP8266 ile thnikspeak’a sıcaklık yollama ile ilgili bu sayfada çok güzrl anlattığınız gibi tüm güncelleme, bredboard üzerinde bağlantı ve yazılımı aynen yapmama rağmen ( ”sicaklik_yolla(sicaklik);” satırında ) ” sicaklik yolla was not declared in this scope” hatası alıyorum. Hatalı satırı kaldırınca serial port ekranında wifi ağımın ismini ve sıcaklık değerlerini yazıyor ama thinkspeak de hiç bir şey görünmüyor. Nerede hata yapıyorum yardımcı olursanız sevinirim.

    • Kodun tamamını kopyalamamış olabilir misiniz? Bahsettiğiniz hataya göre sicaklik_yolla() fonksiyonu kodunuza dahil değil gibi.

      • Tekrar kontrol ettim bu sayfada verilen kod yazılımında nasıl ise aynen öyle kopyaladım. Bende dahil değilse burada da dahil değildir.

  6. Merhabalar. Ben bu örnekte lm35 yerine dht11 kullanmak istiyorum.Benzer bir şekilde yapmaya çalıştım ama olmadı. Onu nasıl yapabiliriz acaba?

    • DHT11, LM35’in aksine dijital haberleşmeye sahip bir sensör olduğundan, burada anlatılan yönergelere göre gerekli kütüphaneyi yüklemeniz ve sıcaklık ölçme kodunu yazmanız gereklidir. Kodun sıcaklık ölçümü ile ilgili kısımlarını değiştirdikten sonra elde ettiğiniz sıcaklık değerini geri kalan yöntemin aynısı ile ThingSpeak’e göndermeniz mümkündür.

  7. Merhabalar.Mesala sıcaklığın yanında field2 ye de nem değerini bastırmak istiyorum. Nem_yolla diye fonk yapıp atmayı denedim ama atamadım. Sıcaklık değeri gidiyor ama nem için atacakken gitmiyor cipclose tarafına gidiyorum bu konuda yardımcı olabilir misiniz?

  8. KODU DHT11 için nasıl düzenlemem gerekir ? Void sicaklik_gonder().. Fonskiyonda takıldım.. Yardımcı olabilir misiniz?

  9. AT
    109.88
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSEND=49
    AT+CIPCLOSE
    109.88
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSEND=49
    AT+CIPCLOSE

    Serial portdan sürekli olarak bu veriler geliyor fakat siteye yazdıramıyorum. Write API Key’i kullandım. baundrate’im 115200. WI_FI modulün güncellemesi başarılı gözüküyor.

    #define ag_ismi “SUPERONLINE_WiFi_0053”
    #define ag_sifresi “123645987”
    #define IP “184.106.153.149”

    ağ bilgilerim doğru gözüküyor. Birde pc’de esp2932af şeklinde bir wifi ağı gözüküyor. Anladığım kadarıyla benim modülüme ait ona bağlanamıyorum. Neyi eksik yapıyorum neyi fazla yapıyorum yardımcı olur musunuz?

CEVAP VER