#1. yazıda, Bulunduğumuz mekandaki WiFi ağlarını taramıştık.
#2. yazıda, Serial haberleşme ekranındaki NL&CR yorumuna bakmıştık.
#3. yazıda, Şifremizi girerek kendi WiFi ağımıza bağlanmış ve ESP’nin IP adresini öğrenmiştik.
#4.yazıda, Elle yapılan işlemleri, Kodla yapmış ve ESP’yi sunucu olarak hazırlamıştık.
#5.yazıda, Loop fonksiyonuna değinmiş, ESP-sunucu’da gösterilecek olan Yönetim sayfamızı hazırlamıştık.
AT+CIPSEND komutu ile göndermiş olduğumuz dataya (html kodlarına) baktığımızda küçük bir nüans dikkatimizi çekmiş olmalı:
Klasik bir link kodu.
Ve AÇ butonuna tıkladığımızda, adres satırına ?pin=on ilave etmekten başka da bir şey yapmıyor. Fakat biz, ilave edilen kelimeleri takip edersek, AÇ düğmesine basıldığını anlayabiliriz 😉
Hızlıca düşündüğümüz üzere bir tane de KAPAT butonu yaparsak ve bu buton adres satırına farklı bir şey yazdırırsa( örn: ?pin=off ), bu sefer KAPAT butonuna basılmış olduğunu anlayabiliriz.
Bi dakika..
Evet. ?pin=on yazdırmak yerine,
?pin=TostMakinasiON, ?pin=KlimaOn, ?pin=KombiON .. ..
yazdırırsak (ve elbetteki bağlantılarını ve kodlarını ayarlarsak) canımızın çektiği tüm cihazları WiFi‘dan kontrol edebiliriz.
Ok!
Madem öyle adres satırında ne yazıyor bunu takip etme işini yapalım. Basıldığında haberimiz olması için sürekli adres satırını kontrol etmemiz lazım. Ve önceki yazıdan bildiğimiz üzere biz istesek de istemesek de elektrik olduğu müddetçe devreler haliyle Arduino çalışıyordu. Yani loop() fonksiyonumuz tam da bu iş için biçilmiş kaftan 😉
Yapmamız gereken, Sunucu/Html kodlarını gönderdikten sonra, adres satırından (GET) gelecek değişikleri takip etmek.
Bunun için en uygun şey; CIPSEND’den sonra, ama loop() { ‘un içinde olacak bir yerde ac_kapa() fonksiyonu olabilir 😉 }
Loop’u kapatmadan önce bir iki küçük şey daha yapmamız lazım ama şimdilik yazılı akış sırasına değil, programın akış sırana bakalım.
Fonksiyon isminin başındaki void, bu fonksiyon bir şeyler yapacak ama bir yanıt döndürmeyecek demek. Dikkat edersek setup ve loop fonksiyonları da bu şekilde bir değer döndürmeyecek fonksiyonlar. Burada bazı arkadaşların kafasının karıştığını gözlemlediğim için bir benzetme yapayım.
Liseden hatırladığımız f(x) fonsiyonu bir fabrika olarak düşünelim. Plastik ham madde fabrikaya girsin, tabla kaysın, bıçaklar ayak tabını şeklinde kesim yapsın, yan kenarlar eklensin, dikip yapılsın.. sonrada taban ölçüsü alınıp “36” şeklinde bir rapor sunulsun.
Elimizdeki fonksiyon bir sürü şeyler yapıp sonrasında bize bir rapor sunuyorsa, Değer çıktısı/dönüşü olan fonksiyonlar diyoruz.
Yukarıdaki fonksiyonumuz bir değer döndürecek olsaydı, dönecek olan verinin tipini yazmalıydık. Örneğin:
int topla(x){ sonuc = x+3; return sonuc; }
byte sensor () { if(isik_degeri>100){ return 1; } }
burada bi işlemler yapılacak sonuc ve ya 1 gibi bir dönüş yapılacak demek.
“Bir şeyler yapılacak” ama rapor/çıktı dönüşü olmayacaksa int/byte/bool vb. verip tipleri yerine void kullanıyoruz. Örn:
void biseyYap() { digitalWrite(8, HIGH); // 8. pinin voltajını arttır }