Tam Bir Akıllı EV Uygulaması (2)

Daha önceki yazıda (Tam Bir Akıllı EV Uygulaması (1)) sistem ana bileşenlerini ve yapısını tanıtmaya çalışmıştım. Bu yazıda ise ESP8266 wifi modlünü Arduino IDE kullanarak programlamaya değineceğim. Gnexlab’da mümkün olduğunca teorik bilgi yerine uygulamalar, denemeler paylaşmaya gayret ediyorum. Sizlerin de benim yaptığım bu çalışmaları denemenizi ve benim koyduğum tuğlaların üzerine tuğlalar koyarak bir yapı geliştirmenizi en önemlisi de öğrendiklerinizi paylaşmanızı arzuluyorum. Türk insanının bildiklerini paylaşmakla ilgili sorunu var malesef. Bana en çok sorulan sorulardan biri “Neden bu kadar bilgiyi bedava paylaşıyorsun?” Bu soruya bir kaç cevabım var ama en önemlisi böyle yaptığım için hiç zarara uğramadım. Aksine konuyla ilgili bir çok insanla tanıştım. Ortak projeler yapma imkanı buldum. Bir ürün oluşturmak için bilgi sadece (önemli) bir bileşen. Daha bir çok başka önemli bileşenin bir araya getirilmesi gerekiyor. Size önerim pilginizi paylaşın. Bilginizi paylaşınca sizdeki bilgi kaybolmuyor aksine artıyor.

ESP8266 gerçekten güzel bir çip olmuş 32bit low power mikro işlemci yanında 802.11 b/g/n wifi bedava! hemde bu sıralar fiyatı $2.5 Ülkemizde 30TL civarlarında satılıyor. Aliexpress yada ebayden kolayca alabilirsiniz yolparası vermeden elinize ulaşır. Ülkemizdeki satıcılarada makul fiyatlara satış yapmaları çağrısında bulunuyorum.

Böylesine güçlü bir çip yurtdışında büyük ilgi uyandırdı ve bir ilgili kitle (esp8266 community) bu çip üzerine yazılımlar ve donanımlar geliştirmeye başladı. Yazının sonunda ilgili web sitelerinin linklerini paylaşacağım. Yapmamız gereken ilk şey bu çip için bir geliştirme ortamı kurmamız. Daha önce Mehmet Bozkurt (@alonewolfx2) arkadaşımız Geliştirme ortamı yazısını (ESP8266 Geliştirme Ortamı Kurulumu 1 (Windows)) gnexlabda paylaşmıştı. Ben şimdi sizlere daha kolay uygulama geliştirebileceğiniz ve belkide alışkın olduğunuz Arduino IDE si kullanarak ESP8266 yı direkt nasıl programlayacağınızı anlatmaya çalışacağım. Burada Arduino kullanmayacağız. ESP8266 çipini direkt olarak Arduino geliştirme yazılımı ile programlayıp çalıştıracağız.

Yani elinizde 2.5 Dolara Arduino gibi programlayabileceğiniz bir ortam olacak yanında wifi da bedava geliyor 🙂

1- Arduino IDE 1.6.4 yada daha üst sürümü kurun

Eğer mevcut Arduino ide niz 1.6.4 yada daha üst bir sürümse onu da kullanabilirsiniz yada bu linkden Arduino ide yi indirin. Ben zip halini indirip bir dizinde açmayı terçih ediyorum. Java tabanlı olduğu için heryerde düzgün çalışıyor.

2-ESP8266 Board Package indirin

Bunun için Arduino IDE yi çalıştırın File>Prefereances bölümünü açın alt tarafta Additional Board Manager kısmına bu web adresini girin

http://arduino.esp8266.com/stable/package_esp8266com_index.json

adafruit_products_Screen_Shot_2015-07-23_at_12.15.52_PM.png

3- Board Manager’ı açın

Board Manager listesinden esp8266 by ESP8266 Comunity seçip sağ altan install butonuna tıklayın. Bu gerekli tüm dosyaları kurup Arduino IDE yi hazır hale getiriyor.

adafruit_products_Screen_Shot_2015-07-23_at_12.20.12_PM.png

4-Bundan sonrası Arduino programlar gibi devam ediyor.

Board olarak Generic ESP8266 Board seçiliyor. Programlama portuda seçildikten sonra aşağıdaki blink örneğini ideye kopyalayın.

5- ESP8266 donanımının programlamaya hazırlanması

Bu kısımda bu işle az buçuk ilgilenmiş olanlar bilir; ESP8266 yı programlama moduna sokmak için GPIO0 yi GND ye bağlamak gerekiyor. Aşağıdaki gibi FTDI benzeri bir USB Serial dönüştürücü işinizi görecektir.

esp8266-reflash-firmware6- Programlama!

void setup() {
  pinMode(2, OUTPUT);
}

void loop() {
  digitalWrite(2, HIGH);
  delay(500);
  digitalWrite(2, LOW);
  delay(500);
}

Bu kodu ideye kopyalayıp programlama butonuna basın. Programlama bittiğinde GPIO0 GND bağlantısını koparmanız gerekiyor. ESP8266 üzerindeki mavi ledin yanıp söndüğünü görüyorsanız başardınız demektir.

Bu kısmı uzatmadan yazıyı bitirelim. Serinin bir sonraki yazısında wifi pir sensörü yapacağız.

Kaynaklar:

Tam Bir Akıllı EV Uygulaması (1)

Yeni müstakil evimize taşınınca anladım ki bu çok katlı evi yönetmek ve güvenliğini sağlamak o kadar da kolay değil. Genel isterleri düşününce bazı önemli kriterleri ortaya koymaya çalıştım.

-Bir proje geliştirmeden önce ilk yaptığım şey isterleri belirlemektir. Bundan sonra bu isterlerin hangi teknolojilerle karşılanabileceğine bakar sistem tasarımına geçerim. Sistem tasarımında ana resmi ortaya koyup detayları kara kutu olarak belirler, ilk başta bu alt sistemlerin içini görmezden gelirim. Sadece kara kutuların bir biri ile nasıl haberleşeceği beni ilgilendirir. En son adımda ise bu kara kutuların fonksiyonlarını tanımlar hazır çözümler yada açık kaynak uygulamalarla bu alt sistemleri gerçekleştirmeye çalışırım. Çok özel bir alt sistem ihtiyacı varsa ya kendim geliştiririm ya da bir freelancer ile olayı çözerim. Alt sistem nisbeten basit olacağı için freelancerlara çok para ödemeden çözümü üretmiş olurum.-

Gelelim Akıllı ev sisteminin isterlerine;

– Ev Akıllı ise Akıllı telefon ile yönetilebilmeli (iphone/ipad ilk tercihim Android desteği artı)
– Ev sensör networkü ile donatılabilmeli
– Sensör eklemek kolay ve ucuz olmalı
– Komutları yerine getirecek bileşenler eklenebilmeli (röle, motor, vb.)
– Birden çok sensör bilgisi füzyon edilebilmeli ve karar ile ilgili komut çalıştırılabilmeli. Bu yapı mümkünse bir script dilini desteklemeli
– Sistem e-posta, sms, telefon arama yada push notification desteklemeli. (Alarm durumunda iphonuma anında notification gelmeli)
– Sistem takvimsel işlemleri belli düzen içinde yapabilmeli. (cron job)
– Fazladan radyo yayını kirliliği oluşturmamak için mevcut ev wifi sistemi ile çalışabilmeli
– Tüm sensör bilgileri cloud da depolanabilmeli.
– Kamera ile kritik bölgeler gözlemlenebilmeli
– Gece modu, tatil modu gibi modlar tanımlayıp evi bu modlara kolayca sokabilmeliyim. (Mesela gece modu durumunda buzdolabı ve gerekli elektrikli aletler dışındaki prizler kapatılıp gece lambaları açılmalı)
– Sistem bazı dış servis sağlayıcılardan bilgi alabilmeli (mesela hava durumuna bakıp yağmur durumunda sulama sistemini açmamalı)
– Hırsızlığa karşı tüm griş çıkışlar Alarm aktive edilmesi durumunda izlenebilmeli ve izinsiz giriş halinde alarm sireni çalmalı ve gerekli haberler bizlere kapıcıya yada Polise iletilebilmeli

Proje ilerledikçe bunlara ilaveler yapmak mümkün. Tüm bu isterleri yerine getirsem zaten güzel bir Akıllı Ev Uygulaması yerine getirmiş olurum diye düşünüyorum.

Şimdi kabaca bu isterleri yerine getirebilmek için hangi teknolojileri kullanabiliriz onu belirleyelim ve Ana Sistem Mimarisine bakalım.

Burada ana teknolojiyi belirleyen ister aslında sensör networkü. Daha önce tekbir wifi modülü ile örnekler yapıp gnexlab’da yayımlamıştım. Şimdi yapılması gereken bu sensörlerin bir ana merkez ile konuşabilmesi ve durumlarını söylemesi. Tabi aynı şekilde bazı komutları dinleyen ve bu komutlar oluştuğunda işlemi yerine getirecek modüllerin tasarlanması gerekli. Tam burada bir network iletişim protoklü seçilmeli. Siz de araştırırsanız hemen göreceksiniz ki bu iş için MQTT biçilmiş kaftan.

mqtt logo

Mqtt nedir? diye arattığımda karşıma Timuçin Anuşlu’nun güzel sayfası çıktı. Ben MQTT yi burada detaylı anlatmayacağım. Kısaca söz etmek gerekirse MQTT makinalar bir biri ile konuşsun diye geliştirilmiş bir mesajlaşma protokolü. Ortada bir MQTT broker’ı (serverı) oluyor diğer cihazlar da bu brokerı kullanarak mesaj yayımlıyor ya da belli mesajları dinlemek için kaydoluyor. Mesaj yayımlamaya Publish mesajı dinlemeye Subscribe deniyor. Mesajın iki ana bölümü oluyor Konusu (Topic) ve içeriği (Payload). Siz belli bir topicde bir mesaj yayımlıyorsunuz bu mesaja abone olanlar (subscriber) bu mesajı alıyorlar. Mesela bir sıcaklık sensörü belli aralıklarla sıcaklık değerini yayımlıyor. Bu sıcaklık değeri içeriğine abone olanlar bundan haberdar oluyor. Yada bir prizi yöneten bir röle aç/kapa şeklindeki mesaja abone oluyor. Bu mesaj herhangi bir nedenle yayımlanırsa bu mesajı dinlediği için röle açıp kapanıyor.

Biraz karışık anlatmış olabilirim. Ama uygulamada daha rahat anlaşılacaktır diye düşünüyorum.

Bizimde temel iletişim protokolümüzün MQTT olsun zaten kendisi OASIS Standardı olmuşdurumda. Sistem tasarımında bu tür ara yüzlerin standart bazı frameworkler ile tasarlanması abstraction layer denilen bir katmanlı mimari oluşturmanızı sağlıyor. Alt sistemleri bir birinden soyutlamış oluyorsunuz. Büyük bir sistem tasarlarken bu çok önemli bir konu. Bunu yapmazsanız bir alt sistemi geliştirdiğinizde yada değiştirdiğinizde bundan tüm sistem elemanları etkilenebilir. Ama abstraction layerlarınız olursa değişiklik olduktan sonra aynı arayüze bağlantı sağlayarak sisteminizin etkilenmesini önlemiş olursunuz.

Bizim akıllı ev projesinin ana sistem mimarisinde sensör donanım kısmı MQTT destekli olacak ve sensör ve röleler MQTT mesajları yayımlayabilecek yada belli topicleri dinleyebilecek yetenekte olmalı. Bu karar bizi modülerlik anlamında çok rahatlatacak.

Ana sistem bileşenlerinden bir diğeri olan kullanıcı arayüzü de yine MQTT altyapısı ile haberleşecek ve ona mesaj yayımlayıp mesaj dinleyebilecek şekilde seçilmeli. İsterlerimizden bir diğeri akıllı telefonlarla kontrol olduğu için bu alt bileşenin seçilmesinde uzun araştırmalar yaptım. Sonuçta kendiniz de bir akıllı telefon arayüzü yazabilir yada yazdırabilirsiniz ama bu zaman ve maliyet açısından önemli bir kalem olur. Bu nedenle biz hazır açık kaynak ve popüler birşeyler bulmaya çalışalım. Tüm bu kriterler kafamda araştırma yaparken bir çok seçenek arasından OpenHab‘ı seçmeme neden oldu.

openhab logo

Openhab’ın hem IOS hem Android uygulamaları mevcut. Çok modüler ve Raspberry Pi üzerinde runtime’ı çalışabiliyor. Java ile geliştirilmiş platform bağımsız bir sistem. İnceledeğimde çok yetenekli ve sağlam olduğunu gördüm. Ve kullanmaya karar verdim. Bu modüler yapı isterlerimin büyük bir bölümünüde sağlıyor. Hatta benim aklıma gelmeyen bir çok fonksonaliteyi de içinde barındırıyor olabilir. İncelerken ilk baktığım husus arayüzün IOS uyumlu oluşu, ikincisi ise MQTT protokolünü destekleyip desteklemediği idi. İkisinden de geçer not aldı openhab.

Sürekli MQTT diyip durduk peki MQTT brokerı yani serverı ne olmalı birde ona karar verelim. En önde gelenleri

Bunlardan herhangi birini kullanabilirsiniz. Ben ön testlerde windows makinamda olduğum için HiveMQ kullandım. Server donanımı Rasberry pi olacağı için ilerde bunu değiştirebilirim görücez bakalım.

Tam da yeri gelmişken ana sistem elemanlarından birisi de tüm sensörlerin konuşacağı server donanımı. Sensörler wifi olacağından bu donanım cloudda da olabilir ama ilk denemelerde ben bir Raspberri Pi üzerine tüm serverları kurmayı düşünüyorum.

Raspberry pi

Yani Openhab runtime ve Mqtt brokerı ev networkünün parçası olan Rpi üzerinde koşacak.

Verilerin cloud’da depolanması isterini göz önünde bulundurarak ana sistem bileşenlerine birde bu alt sistemi eklememiz gerekli. Bu çözümü sağlarken yapabileceğimiz iki yöntem var.

1.Dedicated Server

2. Üçüncü parti Hazır çözüm

Sensör kısmını biraz daha açmak gerekirse burada karşımıza çıkan en önemli teknoloji Esp8266 çipi. Bu çip 80mhz bir işlemci ve wifi modülünü birlikte yaklaşık $3 gibi bir fiyata sunuyor. Bu çip ile birlikte bir arduino işimizi çok kolaylaştırırdı ama çok adetli kullanacağımız için fiyatı ciddi etkiler diye sensör yazılımlarını Esp8266 firmware’ı üzerinden çözmeye çalışacağım. Aslında ihtiyacımız olan wifi ev networküne bağlanmak sensör değerini okumak ve Mqtt mesajı yayımlamak. Röle modülleri için se Mqtt mesajına abone olmak ilgili mesaj gelirse röle pinini açıp kapatmak.

Temel teknolojileri ve bileşenleri ortaya koyduğumuza göre büyük resmi bir çizmeye çalışalım.

 

AkillievMimari

 

 

Yazının devamını Esp8266 mqtt ve sensörlerle ilgili daha donanım ve firmware ağırlıklı yazmayı düşünüyorum. 3. kısımda ise Openhab dan bahsetmek yararlı olacaktır. Yazının devamında görüşmek üzere.