YAZARLIK BAŞVURUSUBize Katılmak istermisiniz?

Arduino Uno ESP8266 Kullanımı ve TCP Client Oluşturma

 

 

 

 

 

 

 Merhabalar..

 Öncelikle yazı yazmaya ara verdiğim uzun süre için özür dilerim. Bu yaz önceki yazlara nazaran çok daha yoğun geçtiği için yazacak bir konu üzerinde yoğunlaşamadım. Bundan sonra açığı kapatmaya çalışacağım..

 Bugün ki konuda Arduino Uno kullanarak ESP8266 kullanımından bahsedeceğiz. Son olarak da bir DHT11 entegresinden aldığımız sıcaklık verilerini oluşturduğumuz bir TCP server’ a göndereceğiz.

 Öncelikle neden Arduino Uno ile ESP8266 kullanımı diye ayrı bir konu açma gereği duymamdan bahsedeyim. ESP8266 bilindiği üzere AT komutları yardımı ile seri port üzerinden haberleşilebilen bir elektonik donanım. Daha önce konusu buluan Arduino ile  ESP8266 kullanımı konusunda anlattığımız Arduino’ nun Mega modeli kullanılmıştı. Bu modelde konuda da belirttiğimiz üzere birden fazla HardwareSerial modülü bulunmakta idi. Bu modül ile haberleşme hızı 115200′ lere kadar sorunsuzca çıkartılabilmekte. Ancak Arduino Uno üzerinde 1 adet hardware serial modülü var biz bunu genelde debug işlemleri için kullanıyoruz. İkincil haberleşme donanımı olarak da SoftwareSerial yapısını kullanmamamız gerekiyor.

 Peki ya ikisinin farklı nedir? HardwareSerial Arduino içerisinde ADC gibi bir modüldür, SoftwareSerial ise yazılımsal oluşturulmuştur. Yazılımsal oluşturulmuş olmasının dezavantajı olarak yüksek veri transfer hızlarında çalışamaz. Arduino ‘ nun kendi içerisindeki SoftwareSerial kütüphanesi ile kullanılabilecek en fazla haberleşme hızı Arduino’ nun web sitesinde de belirtildiği üzere 38400 baud ‘ dır.(Çalışan daha yüksek bir SoftwareSerial kütüphanesi bulamadım, bulan banada ulaştırabilirse sevinirim .. :) ) Deneme yapacak olursanız bu iki baud rate arasındaki farkı seri porta analog porttaki veriyi yazdırmak gibi basit işlemlerde gözlemleyemezsiniz. Ancak ESP8266 gibi hızın önemli olduğu bir modülde son derece önemlidir. Bu yaptığım örneklerde baud rate’ i 38400 olarak ayarladım. Size de bunu şiddetle tavsiye ederim.

 Daha önceki örnekte ESP8266 ile haberleşmek için herhangi bir kütüphaneden yardım almadan doğrudan AT komutları kullanmıştım. Şimdiki örneklerde ise kullanımı kolaylaştıran bir kütüphaneden yardım alacağım. Bu kütüphaneye buradan ulaşabilirsiniz. 

 İlk olarak bu kütüphane ile Arduino Uno’ yu nasıl kullanacağımızdan bahsedelim. Daha önce de belirttiğim gibi Arduino Uno’ nun üzerinde sadece bir tane HardwareSerial donanımı var. Biz bu donanımı genellikle basit debug işlemleri için kullanırız bu yüzden aynı zamanda farklı bir donanım ile haberleşemeyiz.  Bu yüzden de SoftwareSerial kütüphanesini kullanmamız gerekir. Biz kütüphaneyi Arduino’ nun dijital 2 ve 3 nolu pinleri ile kullanacağız. 38400 baud rate için dijital 2 ve 3 nolu pinleri kullanmanızı tavsiye ederim. Kütüphaneyi inidrikten sonra kütüphane içerisindeki “ESP8266.h” isimli dosyayı açın. 

esp1
Resmi Açmak İçin Üzerine Tıklayınız

 Resimde kutu içerisinde görülen 27. satırı yorum satırı olmaktan çıkarın. (Baştaki iki // silmeniz yeterlidir). Artık kütüphane SoftwareSerial kütüphanesi ile uyumlu hale gelmiş oldu. Şimdi tanımlamalarımızı yapalım. 

 Artık Arduino Uno ile SoftwareSerial kullnarak sorunsuz bir şekilde ESP8266 ile iletişim kurabilirsiniz. SoftwareSerial’ i kullanmak için burada bahsi geçen kütüphaneyi kullanmak zorunda değilsiniz. Önceki örnekteki HardwareSerial kısımlarını SoftwareSerial ile değiştirerek ve Baud Rate’ i değiştirerek de  kullanabilirsiniz. 

 TCP iletişim örneğine geçmeden önce Arduino ile io data visualization cloud’ lardan olan freeboard.io ya nasıl veri göndereceğimize bir bakalım. freeboard.io’ yu seçmemedeki sebep diğer cloud’ lara göre daha çok widget olması ve ücretsiz pakette sınırsız widget eklenebiliyor olması. Ancak verilerin aktarılması güvenliksiz bir metod ile gerçekleşir. Bu yüzden sadece hobi amaçlı uygulamalarda kullanılmasını tavsiye ederim.

 Öncelikle Arduino ile ESP8266 bağlantısından bahsedelim.

yazi

Bu devrede haberleşme için kullanılacak 2 ve 3 nolu pinlerden veri gönderiminde kullanılacak 3 bolu pine bağlı dirençler gerilim bölücü olarak kullanılmıştır. ESP8266 3.3V gerilim seviyesinde çalışır. Arduino ise 5V gerilim seviyesinde çalışır. Gerilim bölücü bu yüzden kullanılmıştır. Kullanılacak gerilim bölücünün dirençleri 10k’ yı geçmeyecek şekilde ayarlamanızı tavsiye ederim. Aksi taktirde haberleşmede gürültü nedeniyle sorunlar meydana gelmektedir. Ancak gerilim bölücü kullanmak sizin tercihinize kalmıştır. Gerilim bölücü kullanmasanızda haberleşme gerçekleşir lakin ESP8266 zarar görebilir. Bağlantı şemamızdan sonra sıra yazılıma geldi.

freeboard.io ile haberleşmeyi dweet.io üzerinden gerçekleştireceğiz. Biz DHT11′ den gelen sıcaklık ve nem değerlerini dweet.io ya GET metodu ile göndereceğiz. dweet. io GET metodu ile gelen verileri anahtar isimleriyle birlikte  JSON formatına çevirir. Daha sonra biz freeboard.io ile bu verilere JSON formatından rahatlıkla erişebiliriz.

Daha sonra TCP port ile dweet.io’ ya bağlanalım.

Şimdi TCP port ile sıcaklık ve nem değerlerini dweet.io’ ya GET edelim. Burada metod oluşturulurken string’ ler ayrı ayrı oluşturulup en son olması gereken sıra ile birleştirilmiştir. Bu sıranın neden böyle olması gerektiğine buradan ulaşabilirsiniz.  Eminim daha güzel kaynaklar da araştırarak bulabilirsiniz.

Şimdi sıra geldi freeboard.io’ daki dashboard’ ımızı düzenlemeye. Üyelik açtıktan sonra bir dashboard oluşturun. Daha sonra resimlerdeki adımları takip etmeniz yeterlidir. Data source’ ü daha kendisi bulabilmesi için Arduino’ daki yazılımı en az bir sefer çalıştırmış ve veri başarılı bir şekilde soket ile iletilmiş olmalıdır. Aksi taktirde data source kısmından nesne isminizi girsenizde widget’ larda JSON formatındaki veriyi göremezsiniz.

yazi2
Resmi Görüntülemek İçin Üzerine Tıkla

Özetle Arduino ile verileri internet üzerinde bu tür verileri görüntülemek bu kadar kolay. Yazılımın tamamına buradan ulaşabilirsiniz.

Şimdi sıra geldi kendi oluşturduğunuz tcp server’ ınıza Arduino ile nasıl veri göndereceğinize değinelim. Bunun için öncelikle bir TCP Server kurmuş olmalısınız. Ben server’ ı NodeJs kullanarak oluşturdum. Siz farklı framework’ ler yada programlama dilleri ile oluşturabilirsiniz. Bir fark olmayacaktır. Nodejs kısmındaki yazılıma buradan ulaşabilirsiniz.  Bağlantı şeması aşağıdaki resimdeki gibidir. Üstteki çizime ek olarak ortak Anot RGB Led eklenmiştir. 

yazi_bb
Resmi Büyültmek İçin Üzerine Tıkla

Yapacağımız uygulamada Arduino DHT11′ den gelen verileri TCP Server’ e gönderecek TCP Server ise Arduino’ ya RGB led parlaklık bilgilerini rasgele üretip gönderecektir. Server bağlanma kısmına kadar freeboard için verdiğimiz örnek ile aynı olduğundan onlara tekrar değinmeyeceğim.  Aşağıda DHT11′ den veriyi okuyup gönderilecek veri formatını oluştuşturduk. Sunucu bizim olduğu ve parse işlemlerini biz yapacağımız için veriyi istediğiniz formatta gönderip alabilirsiniz. Ben JSON formatına benzeterek göndermeyi tercih ettim.

Daha sonra bu verileri sokete yazalım. Bu kısımda soketin kapanma durumunda tekrar bağlanması için ufak bir ek yaptım. Eğer send fonskiyonu false değer dönmüşse veri sokete yazılamamış demektir.

Şimdi sıra geldi server’ ın gönderdiği verileri okumaya. Soketten verileri okumak için ESP8266 kütüphanesinin recv isimli fonksiyonunu kullandık. Bu fonksiyon 3. parametre olarak timeout değeri alır. Bu değeri siz değiştirebilirsiniz.

Bu konunda sonuna geldik. TCP client yazılımının tamına buradan ulaşabilirsiniz. Umarım hatamız olmamıştır.

İyi çalışmalar..

 

 

 

One Comment

Add a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir