NodeMCU & Flutter ile Wifi Tabanlı Kapı Kilidi
Merhaba, bu yazıda kapı kilidini mobil uygulama ile kontrol etmeye yarayacak bir IOT sistemi geliştireceğiz. Yapacağımız sistemde çok basit bir şekilde mobil uygulamadan evinizin, bahçenizin vs kapı kilidi kontrolünü sağlayabilecek ve bunu tek bir tuş ile yapmaya çalışacağız.
Kapı kilidi donanımımız evin wifi ağına bağlı olacak ve sadece bu ağ üzerinden TCP/IP ile komut alacak. Yani özetle mobil uygulama bu ağın yakınına gelip bu ağa bağlanmadığı sürece kapıyı açamayacak. Bu da sistemimizin evin wifi ağı şifresiyle korunmasına yardımcı olacak.
Not: Kullanılan donanım ve mobil uygulama bir server üzerinden de haberleşebilirdi ve kapı uzak bir konumdan da açılabilirdi. Bu demoda bu yöntemi kullanmayacağız.
Projemizde kullanacağımız kilit modeli "servo motor" olacak. Bu kilidi geliştirmek ve çeşitli donanımlarla, araçlarla sağlamlaştırmak sizin elinizde. Yani bu motor bu kapıyı tutmaz diye düşünmeyin. Bu kilit kısmı tamamen sizin kullanacağınız malzeme ve hayal gücünüze göre geliştirilebilir. Bu yazıda daha çok örnek bir prototip üzerinde duracağız.
Gerekli Donanım
Bir adet servo motor
NodeMCU v3
Jumper kablolar
Uygulamamızı çalıştıracak Android bir telefon
Devre Şeması
Yapacağımız sistemde kullanacağımız geliştirme kartı NodeMCU v3 (ESP8266) olacak. 5v çıkışımız olmadığı için kullanacağımız servo motorumuzu (SG90) 3.3v ile besleyeceğiz. Birden fazla motor kullanmak ister veya motora ağır yük bindirecekseniz harici bir çıkış ile beslemeniz tavsiye edilir. 3.3v ile motor zorlanacaktır.

NodeMCU pin ve harflendirmeler konusunda karışıklık çıkarabilir. Bu görsel size yardımcı olacaktır. Yazımızda servo motorumuzu D1'e bağlayacağız. Kodlamamızda D1 yerine pin5 yazacağız. D1 pin5'e karşılık geliyor.

Yani motorumu D1 dijital pinine bağladım.

Motorun kahverengi kısmını GND hattına,
Kırmızı kısmını 3.3 Volt'a,
Turuncu kısmına D1 pinine bağlayalım. Bu sayede donanım kısmını halletmiş olduk. Çok komplike olmayan bir kapı kilidi.
Donanım Kodlama
Arduino: Bir G/Ç kartı ve Processing/Wiring dilinin bir uygulamasını içeren, geliştirme ortamından oluşan fiziksel bir programlama platformudur. Arduino IDE indir.
Geliştireceğimiz donanımımızı Arduino üzerinden kodlayacağız. Haydi başlayalım.
İlk olarak:

Araçlar-> Kart -> NodeMCU diyerek kartımızı seçelim.
Sizde NodeMCU çıkmaz ise Araçlar->Kart -> "Kart Yöneticisi" diyerek sağ tarafta bulunan arama alanına esp8266 yazarak indirebilirsiniz.
Gerekli esp8266 kütüphanelerimizi ekliyoruz. İlk olarak wifi bağlantımızı gerçekleştireceğiz. Tanımladığımız ssid ve password kısımlarına wifi adımızı ve wifi şifremizi giriyoruz. Küçük Büyük harfe dikkat edelim.
Küçük bir not düşelim. Bu projede kontrol sistemimiz telnet protokolü üzerinden gerçekleşecek. Yani başka bir ağ veya başka bir ağ bağlantısı ile motoru kullanmanız mümkün olmayacak.
Telnet: Telnet, Internet ağı üzerindeki çok kullanıcılı bir makineye uzaktaki başka bir makineden bağlanmak için geliştirilen bir TCP/IP protokolü ve bu işi yapan programlara verilen genel isimdir.
Uygulama ve Motor Ayarları:
Burada mevcut wifi ağımıza bağlandıktan sonra yazacağımız programdan arduino'nun monitör kısmına text bastıracağız (ağdan alacağımız komutu). Bu text komutu, kapı_Ac olursa motorumuz 90 derece dönecek ve kapımız açılmış olacak. Geliştirdiğimiz uygulamadan butona basıp kapı_Kapat komutu göndererek motorumuzu 0 dereceye yani kilitli konuma getireceğiz.
Mobil Kodlama: Flutter
Flutter, Google tarafından geliştirilen açık kaynak kodlu bir mobil uygulama geliştirme SDK’sıdır. Genel olarak Android ve iOS uygulama geliştirmek için kullanılır. Biz de gerekli uygulamamızı Flutter kullanarak yazacağız.
Başlarken
Hedef ekranımız şu şekilde olacak:

Flutter ile Uygulamamızı Yazalım
Yazacağımız uygulama çok karmaşık olmamakla beraber aç-kapa tuşu içeren bizim işimizi rahatlık ile görebilecek bir uygulama olacak.
İlk aşama olarak gerekli kütüphanelerimizi ekliyoruz ekstra olarak "url_launcher" kütüphanesi kullanılmıştır.
Yukarıdaki kodlarda ilgimizi çeken ve bize aşina olarak gelmeyen bir kısım "Socket.connect" olabilir. Burada "Your Ip Adress" kısmına kurduğumuz Arduino sistemini ilk çalıştırdığımızda serial monitöre ip adresi yazdırılacak. Socket kısmı hakkında daha detaylı bilgiye buradan ulaşabilirsiniz.
Uygulamamızın ikinci kısmında ise 3 adet Raised Buton kullanarak buton oluşturuyoruz.
Buradaki önemli nokta:
Butonlara bastığımız zaman yazdığımız iki adet fonksiyonu çağırıyoruz. (_ackapi ve _kapiKapa). Bu fonksiyonlar içerisine yazdığımız kapi_Ac ve kapi_Kapa kelimeleri nodeMCU kısmını kodlarken if bloğu içerisinde kullandığımız kelimeler ile aynı olmak zorunda. Bu şekilde uygulamadan gönderdiğimiz kapi_Kapa kelimesi nodeMCU tarafından algılanıp kapının kapanması işlemini gerçekleştirecek veya diğer türlü Kapıyı aç tuşuna bastığımızda kapi_Ac kelimesini tutup kapı açma işlemini gerçekleştirecektir.
Socket bağlantısı sonrası oluşturulan channel objesine bu komutları geçerek, bu ağa bağlı nodeMCU'nun komutları almasını sağlıyoruz.
Test
Şimdi sistemimiz test edelim. Aşağıdaki videodan çıktıyı görebilirsiniz.
Umarım işinize yarar bir konu olmuştur. Sağlıcakla kalın #EvdeKalın :)
Kaynak Kodlar: