back to top

ESP8266 Dersleri 4: Oda Sıcaklığını Tweet Gönderme

Arkadaşlar merhaba. Bu dersimizde oda sıcaklığını LM35 sıcaklık sensörü ile ölçüp bu veriyi Arduino ve ESP8266 kullanarak tweet olarak göndereceğiz.

Bu uygulamada kullanacağımız malzemeler:

Uygulamamızı gerçekleştirirken ThingSpeak sitesini kullanacağız. Bu siteye nasıl kayıt olunup kanal açılacağını bilmiyorsanız bir önceki yazımıza göz atmanızı öneririm.

eso8266 tweet atma

ThingSpeak’den bir kanal açtıktan sonra aşağıdaki gibi More Apps butonuna tıklıyoruz. Bu uygulamada yolladıklarımız yine grafik haline gelecek, o yüzden bir önceki uygulamayı yaptıysanız aynı kanal üzerinden devam edebilirsiniz. 

Üstteki butona bastıktan sonra gelen sayfada Action sekmesinden ThingTweet’i seçiyoruz. Gelen sayfadan Link Twitter Account‘a tıklayarak ThingSpeak’i twitter hesabımızı kullanması için yetkilendiriyoruz (bu konuda şüpheniz olmasın sizden habersiz tweet atma gibi bir durum söz konusu olamaz. Tamamen güvenilir binlerce kişi tarafından kullanılan bir uygulamadır). Yetkilendirme işlemini yaptıktan sonra yine aynı sayfadan bize twitter adresimiz ile ilişkili bir key verecek. Bu keyi daha önceki uygulamamızdaki gibi yine kodumuzun içinde kullanacağız.

ThingSpeak ile yapacaklarımız bu kadar. Bundan sonrası devrenin kurulumu ve kodumuzun ayarlanması. Devre önceki uygulamamız ile birebir aynı.

ESP8266 bağlantı şeması

NOT: Devreyi kurup Arduino’ya kod yüklemeye çalıştığınızda Arduino IDE hata verecektir. Bunun nedeni, Arduino’nun RX ve TX pinlerinin o an bağlı ESP modülümüze bağlı olmasından dolayıdır. Yükleme işleminden önce RX ve TX bağlantılarını söküp, kod yüklendikten sonra takarsanız bu sorunu yaşamazsınız.

#define ag_ismi "WiFi_Ismi"
#define ag_sifresi "WiFi Sifresi"
#define IP "184.106.153.149" //thingspeak.com IP adresi

int lm35_pini = A0;

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); //EPSP ile iletişim için 3 saniye bekliyoruz.

  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() {
  int analog_veri = analogRead(lm35_pini);
  analog_veri = (analog_veri / 1023) * 5000;
  float sicaklik = analog_veri / 10.0;
  if (sicaklik > 27) {
    sicaklik_yolla();
  }
  // dakikada 1 güncellenmesi için 1 dakika bekle
  delay(60000);
}
void sicaklik_yolla() {
  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(1500);
  String tweet = "POST /apps/thingtweet/1/statuses/update HTTP/1.1\n";
  tweet += "Host: api.thingspeak.com\n";
  tweet += "Connection: close\n";
  tweet += "Content-Type: application/x-www-form-urlencoded\n";
  tweet += "Content-Length:50\r\n\r\napi_key=";
  tweet += String("FQF3R17HJSB1DM43"); //ThingSpeak'den aldığımız Twitter API KEY'ini buraya yazıyoruz.
  tweet += String("&status=");
  tweet += String("Cok Sicak #esp8266"); // Yollamak istediğimiz tweeti buraya yazıyoruz.

  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.
  delay(100);
  Serial.println(tweet.length());

  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.println(tweet);
    Serial.println("AT+CIPCLOSE=0");
    delay(100);

  } else {
    Serial.println("AT+CIPCLOSE=0");
  }
}

NOT: LM35 ile ölçtuğunuz sıcaklık 27 dereceyi geçtiğinde twitter hesabınızdan “Cok Sicak #ESP8266 ” şeklinde bir tweet atılacak. Eğer atılan tweeti değiştirmek isterseniz

tweet+=String("Cok Sicak #esp8266"); 

üstteki satırdaki metni değiştirmeniz ve

tweet+="Content-Length:49\r\n\r\napi_key=";

Bu satırdaki “50” yazan yeri yazdığınız mesaj kaç karakter ise 32 fazlası ile güncellemeniz gerekiyor.

NOT: Twitter sanırım doğrudan elle tweet atılmadığı sürece aynı tweet’i bir daha kabul etmiyor. Ne kadar denersem deneyeyim, ne kadar beklersem bekleyeyim aynı tweet’i tekrar gönderemedim. Örneğin #esp8266ilemerhaba diye bir tweet attıktan sonra bu tweet’i silmeden aynı şekilde başka bir tweet atmanıza izin vermiyor. Bunun nedeni bir hasthag için çok fazla tweet atılmasını engellemek sanırım. Fakat yazdırdığınız cümle sonuna ek olarak 0 ile 1000 arası bir random sayı eklerseniz, her seferinde farklı tweetmiş gibi gözükeceğinden 1000 tane tweet atabilirsiniz.

Son Çıkan Yazılar

10 YORUMLAR

  1. tweet+=String(“Cok Sicak #esp8266”); bu kod satırında yani tweet olarak atmak istediğimiz metinde anlık sıcaklığı da atmak istediğimizde ne gibi bir kod kullanabiliriz?

  2. Merhaba biz sizin yaptığınız projeyi aynı şekilde yaptık.Sadece fark olarak sıcaklık sensörümüz DHT11.Çalıştırdığımız zaman serial portta değerler gözükmesine rağmen tweet atamıyoruz sebebi ne olabilir?

  3. Merhaba,
    Ben sıcaklık değerini hem 16×2 seri-LCD de gömek istiyorum, hemde gerektiğinde ESP-8266 nın bana internetten ulaşmasını istiyorum. Seri LCD 9600 te ESP-8266 ise 115200 de çalışıyor bu bir sıkıntı oluşturur mu? Problem olursa nasıl çözeriz ?

    teşekkürler

    • İki cihazı aynı anda tek bir seri porttan bağlamanız mümkün değildir. LCD’yi SoftwareSerial kütüphanesini kullanarak farklı pinlerden bağlamayı deneyebilirsiniz.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz