Bugün sizlere, SonOff Basic Akıllı anahtarı nasıl flashlayacağınızı ve Arduino IDE ile nasıl programlayacağınızı anlatacağım.
SonOff, kısaca telefon ile kontrol edilebilen, Wi-Fi ile ev ağına bağlanan ve uzaktan açılıp kapatılabilen, akıllı bir elektrik anahtarı. Çinli bir markaya ait ve ürünleri görece ucuz.
Aslında dandiğin önde gideni ürünler, asla yüksek Watt çeken ürünlerle kullanılmamalılar. Zira korumaları yok. Ama kompaktlar. Ek olarak piyasadaki çoğu ürün böyle.
Bu nedenle başlamadan şu uyarıyı yapayım: Akıllı prizlerin Amper ve koruma değerlerini bilmeden, yüksek Watt çeken yerlerde kullanmayın.
Aslında röle ve ESP8266 NodeMCU kartı kullanarak, SonOff tarzı bir kartı yapmak mümkün. Ancak bazı problemler oluyor.
Mesela:
Bu benim uzun süredir kullandığım bir devre. AWS IoT ve Lambda ağına bağlı, Amazon Echo Dot ile kullanıyorum. Ancak gördüğünüz gibi, hem her şeyi açıkta ve büyük hem de harici güç girişi istiyor.
Pek pratik değil.
Ancak SonOff, hem küçük hem de gücünü üzerine takılan AC hattından alıyor. Yani hem kompakt hem de ek bir pil ya da kablo gerektirmiyor. Tek kusuru, içindeki yazılım. Onu da bu rehberle halledeceğiz.
SonOff Basic, Arduino Uno ve NodeMCU karşılaştırması:
Başlamadan belirtmeliyim, bu işlemin sonucunda kartın içindeki yazılım geri getirilemez. O nedenle kullandığınız bir sistem varsa ve sizin için sorunu yoksa, dokunmamakta fayda var.
Flashlama
SonOff’un içinde, IoT kartlarda sıkça gördüğümüz ESP firmasının, ESP8266 model çipinin bir varyantı olan ESP8265 var. Bu çip öyle bir şey ki, internete bağlanan ve akıllı diye piyasaya çıkan çoğu cihaz ESP8266 içermektedir. Bu nedenle zibilyon tane dökümantasyon vardır.
Bu çip ailesi, Arduino ve IoT tarafında da kullanılıyor. Ve Arduino IDE’si için güzel, oturmuş bir kütüphanesi var. Yani çipi dolayısıyla kartı, Arduino IDE kullanarak Arduino diliyle programlayabiliyorsunuz. Bu da size, diğer IoT kütüphanelerini kullanma ve bu cihazı istediğiniz gibi yönetme şansı veriyor.
Flashlamak için kartı, bilgisayara bağlamamız lazım. Ancak kartın bırakın USB çıkışı, kablo takmak için jumperları bile yok. Bu nedenle, lehimlememiz gerek.
Kartın 4 adet lehimlenmeye hazır portu var:
Bu portlara 4 adet jumper kablonun gireceği soketi lehimlememiz gerekiyor.
Portlar bu şekilde. Fotoğrafı çekmek, lehimledikten sonra aklıma geldiği için bende lehimli:
Lehimi yaparken, dikkat etmeye ve taşırmamaya fayda var. Kısa devre olmasını istemezsiniz.
Bende, tam destekleyemediğim için yamuk oldu mesela. Ancak bu çok büyük bir sorun değil. Lehimin sağlam olmasına ve soğuk lehim oluşmamasına dikkat edin.
Lehimlemeyi bitirdikten sonra, sıra USB 2.0 to TTL UART dönüştürücünün bağlantısı yapmaya.
Buradaki bağlantı şeması şöyle olmalı:
Gördüğünüz gibi, Tx ve Rx portlarının çapraz bağlanması gerekiyor. Eğer düz balarsanız, portlar doğru çalışamaz ve karta bilgi aktarılamaz.
Bağlantı sonrası: (Kablo sırası doğru olmayabilir!)
İşin zor kısmını hallettik. Geriye Arduino programını konfigure etmek kaldı. Bunun için:
Arduino IDE programını açın. Sonrasında File -> Preferences yolunu izleyin.
“Additional Boards Manager URL’s” kısmına aşağıdaki URL’i kopyalayın:http://arduino.esp8266.com/stable/package_esp8266com_index.json
ESP8266 tabanlı kartları, Arduino IDE kullanarak programlamak için aracı bir kütüphaneye ihtiyacımız var. Burada yazrdımımıza, ESP Community tarafından yayımlanan “ESP8266” kütüphanesi koşuyor.
URL’i yapıştırdıktan sonra “Ok” butonuna tıklayın ve pencereyi kapatın. Sonrasında Tools -> Board -> Board Manager yolunu izleyin
Karşınıza çıkan ekranda, arama kısmına “esp8266” yazın ve çıkan seçeneği indirin.
Artık Arduino IDE ile ESP tabanlı çoğu kartı programlayabilirsiniz. SonOff’u programlamak için ise son bir adım kaldı.
Tools -> Board -> ESP8266 Boards -> Generic ESP8265 Module seçeneğini seçin.
Artık programımızı yazmaya hazırız. Bu adımdan önce tekrar hatırlatmalıyım ki, kart bir kez flashlandığında, SonOff’un kendi yazılımını tekrar yükleyemezsiniz. Ek olarak, yanlış bağlantı, lehimleme ya da kütüphane indirme nedeniyle oluşacak her sorun, sizin kendi sorumluluğunuzdadır.
Karta program yüklenirken prize bağlamayın. Karta USB dönüştürücü takılıyken de prize bağlamayın.
Kartı flash moduna almak için, kart hiçbir yere takılı değilken, üzerindeki tuşa basın. Tuşa basılı tutarken, USB dönüştürücüyü takın. Taktıktan birkaç saniye sonra butondan elinizi çekin. Ayrıca Arduino IDE’den doğru portu seçmeyi de unutmayın.
Eğer sistem, kartı görmüyorsa, dönüştürücünün sürücülerini indirmeniz gerekebilir.
Her şeyi yaptığımıza göre, artık program yüklemeye başlayabiliriz.
Denemek için, kartın üzerindeki LED’i açıp kapatacak bir program yükleyelim:
int LED = 13;
int DURATION = 1000;
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, LOW);
delay(DURATION);
digitalWrite(LED, HIGH);
delay(DURATION);
}
Kartın üzerindeki LED, 13. GPIO portuna bağlı. Karta program yüklendikten sonra, kart hala flash modunda olacağından, kartı çıkartıp tekrar takın. Eğer adımları doğru bir şekilde uyguladıysanız, kart üstündeki LED yanıp sönüyor olacak.
Eğer kart çalıştıysa, ikinci adıma geçebiliriz.
Bu sefer, kartı Wi-Fi’ye bağlayalım ve üzerindeki röleyi, tarayıcıdan açıp kapatmaya çalışalım:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
MDNSResponder mdns;
const char* ssid = "Wi-Fi Ağınızın SSID'si";
const char* password = "Wi-Fi Ağınızın parolası";
ESP8266WebServer server(80);
String web_on_html = "<h1>SONOFF anahtari acik</h1><p><a href="on"><button>Ac</button></a> <a href="off"><button>Kapat</button></a></p>";
String web_off_html = "<h1>SONOFF anahtari kapali</h1><p><a href="on"><button>Ac</button></a> <a href="off"><button>Kapat</button></a></p>";
int gpio_13_led = 13;
int gpio_12_relay = 12;
void setup(void){
pinMode(gpio_13_led, OUTPUT);
digitalWrite(gpio_13_led, HIGH);
pinMode(gpio_12_relay, OUTPUT);
digitalWrite(gpio_12_relay, HIGH);
Serial.begin(115200);
delay(5000);
WiFi.begin(ssid, password);
Serial.println("Wi-Fi agina baglaniliyor..");
while (WiFi.status() != WL_CONNECTED) {
digitalWrite(gpio_13_led, LOW);
delay(500);
Serial.print(".");
Serial.println(WiFi.localIP());
Serial.println(WiFi.status());
digitalWrite(gpio_13_led, HIGH);
delay(500);
}
Serial.println("");
Serial.print("Baglanilan ag: ");
Serial.println(ssid);
Serial.print("Sunucu IP adresi: ");
Serial.println(WiFi.localIP());
if (mdns.begin("esp8266", WiFi.localIP())) {
Serial.println("Sunucu basladi");
}
server.on("/", [](){
if(digitalRead(gpio_12_relay)==HIGH) {
server.send(200, "text/html", web_on_html);
} else {
server.send(200, "text/html", web_off_html);
}
});
server.on("/on", [](){
server.send(200, "text/html", web_on_html);
digitalWrite(gpio_13_led, LOW);
digitalWrite(gpio_12_relay, HIGH);
delay(1000);
});
server.on("/off", [](){
server.send(200, "text/html", web_off_html);
digitalWrite(gpio_13_led, HIGH);
digitalWrite(gpio_12_relay, LOW);
delay(1000);
});
server.begin();
Serial.println("Server hazir!");
}
void loop(void){
server.handleClient();
}
Bu kod, basitçe ESP8266’nın içinde bir Web sunucusu açıyor. Serial ekranda çıkacak, Local ağdaki IP adresini tarayıcıya yazıp bağlanarak, bu sunucuya ulaşabilirsiniz. Basitçe “Ac” ve “Kapat” butonları var. Tıkladığınız zaman, içindeki röleyi açıp kapatıyor.
Ancak şöyle bir durum var. Röleler 5V ile çalışır. Ancak kart, USB portundan 3.3V ile besleniyor. Bu nedenle USB portuna bağlıyken röle çalışmayabilir.
Bunun için USB dönüştürücüyü ve jumper kabloları çıkarıp, kartı prize bağlamanız gerekebilir. Bu sayede kart, prizden gelen akımı dönüştürüp, 5V ile beslenebilir.
Kısaca SonOff kartı nasıl flashlayacağını anlattım. Umarım faydalı olmuştur.
Ben, IoT cihazlarıyla aktif olarak uğraşıyorum. Bu kartı da flashlayıp, AWS IoT ağına entegre ettim ve Echo Dot ile kullanıyorum.
SonOff için kaynak kodu:
Başka bir rehberde görüşmek üzere.