EASYLCD_MOBILE ile ESKİ TELEFONLARINIZLA, ESP MODÜLÜNE ELVEDA DİYEBİLİRSİNİZ. BASİT BİR EV OTOMASYON ÖRNEĞİ.

EASYLCD_MOBILE ile ESKİ TELEFONLARINIZLA, ESP MODÜLÜNE ELVEDA DİYEBİLİRSİNİZ.
BASİT BİR EV OTOMASYON ÖRNEĞİ.

Bu yazıda neler bulacaksınız öncelikle onlara bakalım. Birincisi eski telefonumuzu değerlendirmek için APP INVENTOR ile yapılan programı LCD+ESP+RTC olarak kullanıyoruz.
Bunun yanı sıra bir adet App inventor ile yapılmış Android telefon kullanıcı programı. ( Komut göndermek için) Ayrıca bir adet merkezi kontrol ünitesi olarak kullanabileceğimiz ARDUINO programı.

EASYLCD_MOBILE dediğimizde zaten LCD ve RTC programını hazır olarak düşünebiliriz. Kullanımı ise sadece kütüphane gerektirmeyen akılda kalıcı birkaç komuttan ibarettir. Bu komutlar ile eski telefonunuzla haberleşip, telefon ekranına bilgi yazabilirsiniz ve sistem saatini öğrenebilirsiniz.
Bunun yanı sıra, ESP modülü gibi kullanmak için bir TCP SERVER programı da eklendi. Bu program bir aracı olarak düşünülebilir. Merkez Arduino olduğundan, kullanıcılarla Arduino arasında aracılık edecektir. Merkez, bir adet olmasına rağmen birden fazla kullanıcı olabilmektedir. Yani çoklu bağlantıya da destek vermektedir.

Program, App Inventor ile yapıldı ve tcp server ( TCP sunucu) uzantısı kullanıldı.

Bu programın çalışma şekli şudur.

1-) Kullanıcı devamlı aynı IP adresine bağlansın diye tcp server kurulan eski telefonun STATİK IP ayarını yapıyoruz.
2-) Arduino ve tcp server haberleşsin diye Bluetooth bağlantısı sağlanır. Tcp server port ayarlanır ve server açılır.
3-) Kullanıcı program SERVER IP ve PORT ayarlarına ayarlanır ve CONNECT butonu ile bağlantı sağlanır.
4-) Server bu bağlantıyı aldığında buna bir ID numarası bağlar. Komutlar için hattı dinlemeye başlar.
5-) Kullanıcı komut gönderdiğinde, bu komutu arduinoya yollar.
6-) Arduino bu komutun gerektirdiği işlemi yapar ve yaptığına dair bir geri bildirim verir.
7-) Server bu geri bildirimi alır ve Bağlantı sağlayan tüm kullanıcılara iletir. ( Tüm kullanıcılar dedim çünkü server çoklu bağlantı kabul ediyor. Fakat hangi bağlantıdan geldiğini bilmesine rağmen programı basit tuttuğum için ayırma işlemi yapmıyor. Bundan dolayı Arduinodan gelen cevabı tüm kullanıcılara iletiyor. ) Sizler programı geliştirebilirsiniz. Hangi kullanıcıdan gelirse ID numarasına göre o kullanıcıya cevap verebilirsiniz.

Komut sistemi EASYLCD de kullandığım komut sistemidir. Bu komut sisteminde (Kendi tasarımım EASYLCD modülümü açık kaynak olarak şu yazıda paylaştım.  )
3 karakter belirteç ( LCD, ESP gibi)
2 karakter komut (WR,DD,SO,ON,OF;SD gibi)
1,1 olarak yazılan numaralar koordinat olarak, satır sütun olarak kullanılır. Bu programda birinci numara oda numarası ya da kat numarası gibi düşünüldü. İkinci numara ise kontrol edilecek cihazın numarası olarak düşünüldü. LCD olarak kullanırken satır ve sütun numaralarını gösterir.
(-) İşareti ise komut ile yapılacak işlemi ayırır.
KOMUT : ESPSD 1,1-ON  ( ESPSD=esp server datası, 1. Kat 1. Lambayı aç demektir. Burada kat ve cihaz sayıları değiştirilebilir. )

Arduino programı ise basit tutulmuştur. Sadece Karşılaştırma yapılırken “ESPSD 1,1-ON” gelirse bunu yap gibi. İstenirse programınızda komut ve koordinatları ayırıp daha faklı karşılaştırmalar yapabilirsiniz. Programınız daha da kısalacaktır.

Yukarıdaki işlem sırasına göre açıklamaya başlayayım.

1-) Telefonda sabit IP ayarlama. Bendeki 2 telefon farklı şekilde bu ayarı yaptırıyor. Belki de android 2.3.6 ve android 6 versiyonlarında böyle olabilir. Bu işlemi yapmamızın sebebi ise kullanıcı telefonunu bir kere IP adresine ayarladıktan sonra bir daha ayar yapmaması içindir. Telefon kapatılıp açıldığında sabit IP değilse her defasında tcp server IP si değişir kullanıcı bunu bilmek ve ayarlamak zorunda kalır. Bundan dolayı sabit IP ayarlamak gerekiyor.
Android 2.3.6 galaxy Y telefonumda aşağıdaki resimlerdeki gibi ayarlanıyor. Önce kablosuz ayarlarınıza gireceksiniz sonrasında menüden gelişmiş seçeneğine tıklayıp resimdeki ayarları yaparsınız.


 

 Android 6.0.1 versiyon ASUS zenfone II telefonumda ise aşağıdaki resimdeki gibi ayarlanıyor. Yine kablosuz ayarlarına girip bağlantı ağınızın üzerine basılı tutun. Sonrasında çıkan menüden AĞI DEĞİŞTİR seçeneğine basın. Resimler yol gösterecektir. Ayarlarken Önceden hangi IP adresini aldıysa onu verebilirsiniz. Çünkü başka IP yazarsanız diğer cihazlarınızla çakışabilir.



 

 

 

 

 

 

Kendi telefonunuz farklı versiyonda ise internetten araştırabilirsiniz.

2-) Bluetooth ve tcp server bağlantısı. Bluetooth bağlantısı isteğe bağlıdır. İsterseniz ve cihazınızda OTG yi destekliyorsa USB OTG bağlantısı da yapabilirsiniz. Sadece haberleşme kısmını easylcd mobil v1 de olduğu gibi USB otg bloklarını eklemeniz yeterli olacaktır.
OSB OTG örneklerimden kopyalayabilirsiniz.

Bluetooth modülünüzü eşleştirdikten sonra TCP server start butonuna basıp bağlantıyı sağlarsınız. ( Haberleşme tamam ise arduino seri monitörden takip edebilirsiniz)

TCP server IP adresiniz ve port numaranız artık kullanıcılar için hazırdır.
(Bluetooth modüller konusunda bilgi ararsanız bu yazımı da okuyabilirsiniz.)

3-) Kullanıcı programı IP ve PORT ayarları server IP ve port ayarlarına ayarlanarak CONNECT butonuna basılır ve bağlantı hazırsa ekranda kırmızı olan kutu yeşile döner. Ve kullanıcıya bilgi verilir.


 

4-) Server bu bağlantıyı aldığında buna bir ID numarası bağlar. Ve komutlar için hattı dinlemeye başlar.

5-) Kullanıcıdan alınan komut bilgisi (1,1-ON)  komutu TCP server’a ulaştığında, bu komut ECHO 1,3-ON olarak kullanıcıya geri gönderilir. Bu komutu aldım yanlışlık var mı demek içindir. Fakat ben gelen ECHO bilgilerini programda kullanmadım. Sizler gelen veri yanlış ise doğrusunu gönderecek şekilde programı düzeltebilirsiniz.
Ayrıca arduinoya ise ESPSD 1,3-ON  LCD R olarak bilgi yollanır. LCD R geri bildirim kodudur. Bu genellikle LCD kullanımında kullanılır. Ben dikkate almadım. Fakat standart olsun diye yolladım. Şayet arduino LCD R bekliyorsa artık beklemesin ve gelen komutu işleme alsın diye LCD R eklendi.

Butona basılır basılmaz TCP server ECHO bilgisiyle aldığı komutu geri yollar. Sonrasında Arduinodan gelen cevap aynı pencerede görülür görülmez ilgili butonun rengi değişir

6-) Arduino bu komutu aldıktan sonra karşılaştırma yaparak Komutu uygular. Sonrasında ise Komutu uyguladığını geri bildirim ile tcp server’a yollar.( ESPSD 1,3-ON)

7-) TCP server bu geri bildirimi alıp bağlı olan tüm kullanıcılara gönderir. Yukarıdaki LOG resmine bakınız.

8- ) Kullanıcı programı gelen komutu alıp karşılaştırır. Şayet doğru bilgi gelmişse ve ON komutu yolladıysa basılan butonun rengini Yeşil yapar. Başka odada olsanız bile komutun uygulandığını buton renginden görebilirsiniz.

 

Resimlerde kullanım örnekleri vardır.


Tüm çalışma mantığı budur. Program örnek olduğu için basit karşılaştırma metotları uygulandı. Ayrıca geri bildirim, sadece görüldü fakat yanlış mı diye sorgulanmadı. Sizler programı geliştirebilirsiniz.

Resimler size yardımcı olacaktır. Bazı resimlerde D:1,3-ON gibi görünse de onlar eski versiyona ait. Son versiyonda kullanıcının göndereceği komut ( 1,1-ON    2,1-OFF gibidir)

Bunun Yanı sıra çoklu kullanıcıyı göstermek için video içerisinde ESP8266-01 modülünü kullandım. Yani illaki kullanıcı için başka telefon kullanmak zorunda değilsiniz. Mesela birkaç arduino da birbirini ESP8266-01 modülleriyle görebilir ve konuşabilir.
Ben videoda kullanıcı için ESP8266-01 modülünü kullanırken AT komut setiyle kullandım. Bunu yapmamın sebebi deneme kolaylığı sağlayan, FIRAT DEVECİ nin yaptığı programdı. Her şeyi rahatlıkla ayarladığımdan bunu seçtim.

AT komut seti yüklü değilse bu yazıma bakarak kendi ESP8266-01 flash programınızı değiştirebilirsiniz. 

Kırmızı halka içinde yazılan 1,1-ON komutundan sonra mutlaka ENTER tuşuna basın. Çünkü ESP8266-01 sonunda CRLF yani \r\n olmazsa bilgiyi gönderemiyor.

 

 

 

 

 

 

Sizler bu örneğe benzer şekilde kendi ESP8266-01 modülünüzü programlayıp, iki arduino arası kablosuz konuşmayı sağlayabilirsiniz.
İlla ki bu benim yaptığım gibi buton led kontrolü olmak zorunda değil. ESP belirtecini AAC gibi (arduino arduino connect) olarak düşünüp kendi komutlarınızı oluşturup iki arduino arasını wifi ve TCP server üzerinden konuşturabilirsiniz. Bunun için app inventor programında KODAYIR bloklarına kendi komutlarınızın nereye yönleneceğini belirtmeniz gerekecektir.

Not: ESP8266-01 USB adaptörü sadece kullanmak içindir. ESP8266-01’i programlamak için adaptörde değişiklik yapmalısınız. Bu değişiklikler internette bulunmaktadır. Ben kendi adaptör pcb mi kullandığımdan ve bu değişiklikleri denemediğimden, tavsiye edeceğim bir link yok. İnternetten bulabilirsiniz.

DEVRE YAPIMI : Arduino devrelerinin resimleri de bunlardır. Ledleri istediğiniz dijital çıkışlara bağlayın. Soft serial kullanılacağından HC-05 ya da HC-06 modülünüzü programda bağlı olduğu söylenen pimlere bağlamanız gerekiyor. Resimde gördüğünüz ayrı duran iki kablo bağlantılı devre ise 5V tan 3.3V ta seviye dönüştürücüdür. Çünkü hc-05 modülüm 5V ile beslense bile Rx girişinin 3.3V seviyesinde olmasını istiyor. Sizler de modülün sağlığı açısından 3V3 ile besleyip 3V3 seviye dönüşümü yapabilirsiniz. Fakat benim arduino nano da 3V3 çıkışı zayıf akım olduğundan, ben de HC-05 modülünün arkasındaki yazıya bakarak 5V ile besledim. Fakat Rx girişi mutlaka 3V3 istediğinden direnç gerilim bölücü ile arduinodan gelen Tx çıkışını HC-05 in Rx girişine vermek için seviye dönüşümü yaptım. Modülünüzün üzerinde yazı yoksa 3V3 ile besleyin.

Program geliştirme fikirleri: Yukarıda aralarda bahsettiğim, ekleme yapabileceğiniz yerler dışında, programda olan bir özellik WIFI ON ve OFF durumunu, arduino kontrol edebilir. Nasıl ki geceleri herkes yattıktan sonra modemler için gece uykusu yapılabiliyorsa, programınızda da ev otomasyon sisteminin wifi özelliğini gece kapatarak hem pil tasarrufu hem de telefon wifi devresi için ısı tasarrufu yapılabilir. Programınıza bunun ayarlarını girebilirsiniz. Zaten sistem saati her daim bağlı olan telefondan gelecektir. İllaki app inventor programına ek yapmanız gerekmiyor. Arduino programınıza da bunu ekleyebilirsiniz.

Ayrıca sistemin tamamının uykuya dalmasını sağlayabilirsiniz. App inventor programına, belli saatlerde arduino ile haberleşme için bluetooth kapatmasını ve saati geldiğinde açmasını söyleyebilirsiniz. Sistemi kapattığında, App inventora ekleyeceğiniz ses alıcı programı ile ya da titreşim programı ile yüksek sesi dinleyebilirsiniz ya da deprem gibi büyük hareketliliklerde telefon uyanıp, bluetooth açıp, arduinoya tüm ışıkları açmasını ve alarm ses özelliğini aktif etmesini söyleyebilirsiniz. Hatta ev sahipleri evde yoksa whatsapp üzerinden ev sahiplerine mesaj gönderebilirsiniz. Eski telefonunuzu Arduinoya bağlamakla yapacağınız bir çok olaydan bir kaçı budur. Sizler de programlarınıza bu tip davranışları ekleyebilirsiniz.

Gelelim OTOMASYON kelimesine. Bu yapmış olduğum programda her ne kadar bazı geri bildirimleri değerlendirmesem de, geri bildirimli çalışma olmazsa OTOMASYON kelimesini kullanamayız. Mesela 8 röleli kart satın aldınız bunları telefonla kontrol etmek için bir program yazdınız. AÇ ve KAPAT komutlarını kullandınız.  Bu sadece komutun uygulamasıdır. Geri bildirim yoksa röle kontakları yapışmışsa bundan kontrol eden devrenin haberi olmayacaktır. Kapattım zannedecek, fakat devre kapanmayacaktır.
Otomasyon, bir dizi sıralı işlemin yapılması ve çıkan sonuçların değerlendirilerek düzeltmelerle işlemin devamlılığının sağlanması durumudur. Burada geri bildirim, program olumsuz şartları ön görmüşse, programa direkt bildirim olarak gönderilir. Şayet tehlikeli bir durum söz konusu olduysa, program geri bildirimi öngörmemişse, interrupt denilen kesicilerle iş akışı durdurulur ve müdahale edilmesi sağlanır.
Burada basit bir ev otomasyonu dedim. Çünkü ilk hareketi biz versek de program gereği burada yapılacak ve denetlenecektir. Bu programda arduinoya bilgi gidip gitmediğini denetledim. Fakat, bu butonla kontrol ettiğimiz röle, bir motoru kontrol ediyorsa, bu motor bir su pompasıysa, o zaman motor çalışmaya başladığında su gelmesi gerekir. Bunu anlamak için arduinoya bağlı bir nem sensörü konulur ve su akışı sağlandıysa bu nem sensörü onaylar. Motor çalıştırıldığında, bu sensör hala suyun olmadığını söylüyorsa, Arduino motoru durdurup kullanıcıya mesaj yollar.  Bu da otomasyon uygulaması olarak değerlendirilebilir. Dediğim gibi arduinodan sonrasını kontrol etmedim. Sizler kendi programlarınızı bu yönde geliştirebilirsiniz.

Aklınıza bir soru gelebilir. Kullanıcı butona bastı ve çalıştığını farz ederek bağlantı programını kapattı. TCP server bağlantı koptuğundan geri bildirimi kullanıcıya iletemez. O zaman arduino nasıl kullanıcıyı uyaracak?
Bu da okuyucularıma bir problem olarak kalsın. Cevabı verecek olanlar yoruma bırakabilir. Bakalım kaç yolu var.

Tüm programlara buradan ulaşabilirsiniz.

NOT: Bu EASYLCD_MOBILE olarak yapacağım son proje. 1. yazımda bahsettiğim gibi bu tip bir bileşimle yapılabilecek çok şey var. Hayallerinizle ve programlarınızla sınırlıdır. Fakat devamlı tek başıma örneklerle sitemi doldurmamın bir anlamı yok. Sanırım konu anlaşılmıştır. 

Fakat bu konuda çalışmak geliştirmek isteyen herkese yardımcı olmaya çalışırım.
Ayrıca bu konuda yaptığınız projelerinizi paylaşmak isterseniz bana link olarak gönderebilirsiniz. Konu içerisinde sizin sayfanıza da LİNK veririm. Bu konuları okuyan kişiler sizin projelerinizden de bir şeyler öğrenebilir. 

Umarım bu örneklerden yola çıkıp kendi projelerinizi bizimle paylaşırsınız. 

EASYLCD MOBILE + TCP SERVER, çalışma sistemini anlatan 1. bölüm.
EASYLCD MOBILE + TCP SERVER, çalışma sistemini anlatan 2. bölüm.

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.