Rehber SonOff Basic Akıllı Anahtar Yeniden Programlama (Flashlama)

Dikkat! Bu projede kullanılan cihaz, 240 V AC şebeke cereyanıyla çalışmaktadır. Kartı flashlarken, takıp çıkartırken ve kablo takarken, şebeke cereyanına bağlı olmadığından emin olun. Eğer bu konuda deneyimli değilseniz, deneyimli birinden yardım isteyin. Kart, muhafazasında değilken şebeke cereyanına asla bağlamayın!

Bugün sizlere, SonOff Basic Akıllı anahtarı nasıl flashlayacağınızı ve Arduino IDE ile nasıl programlayacağınızı anlatacağım.

20201001_234724.jpg


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:

ERyGUJiW4AAvJqT.jpg


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ı:

20201001_234402.jpg


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. :)

20201001_233921.jpg


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:
  • 3.3 V
  • GND
  • Tx
  • Rx
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:

20201001_234508.jpg


Lehimi yaparken, dikkat etmeye ve taşırmamaya fayda var. Kısa devre olmasını istemezsiniz.

20201001_233908.jpg


20201001_234012.jpg


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ı:

  • 3.3 V --> 3.3 V
  • GND --> GND
  • Tx --> RX
  • Rx --> TX
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!)

20201001_234258.jpg


İş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

daaap.PNG


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.

ESp.PNG


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.

esp 2.jpg


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:

C++:
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:

C++:
#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>&nbsp;<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>&nbsp;<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. :)

20201001_234551.jpg


SonOff için kaynak kodu:


Başka bir rehberde görüşmek üzere. :)
 
İbrahim hocam, elinize sağlık. Güzel bir rehber olmuş. Ama benim anlamdığım şey, neden C++ ile programladığımız.

Yani başka dillerle de programlayabilir miyiz? Bu işin yazılım olayına biraz yabancıyım da :D
 
@sweiss Sesli asistanı uzaktan kapatabiliyor en kısa haliyle :)

Yok hocam, sesli asistan sistemi maalesef yok burada. Sadece kaynak kodu var, o da SonOff için referans amacıyla paylaştım. Paylaştığım GitHub kodu, ana sistemin %30'u sadece.

Ama evet, yemeği sevmek ya da sevmemek için tarife gerek yok. :)
İbrahim hocam, elinize sağlık. Güzel bir rehber olmuş. Ama benim anlamdığım şey, neden C++ ile programladığımız.

Yani başka dillerle de programlayabilir miyiz? Bu işin yazılım olayına biraz yabancıyım da :D

ESP8266'yı Python'la da programlayabilirsin. Burada C++ kullanmamın sebebi C++ değil, Arduino kütüphaneleri.

C++, Arduino IDE'de kullanılan dil. Yani paylaştığım iki kod Arduino IDE için. Bu kartlar Python ve Havascript ile de kodlanıyor ama hem kısıtlılar hem de kütüphaneleri yok denecek kadar az. :)
 
Kartları görünce lise yıllarım aklıma geliyor. 🙃

Lise'de bu tarz şeylerle uğraşmış kişiler çok şanslı bence. :)
@SideWinder Echo Dot sesli asistan değil miydi? Ben direkt örnek kullanımınızı söyledim :) Yoksa dediğiniz gibi konuda bir sürü bilgi, kod var.

Echo Dot sesli asistan, ancak kapalı sistem. :) Yani direkt bir aygıt bağlayamıyorsunuz. Amazon bu konuda çok katı, asla o sistemin içine sokmuyor sizi, ama açık kapı bırakıyor.

İlk başta Amazon Alexa Developer hesabı açıp, kendi "sesli asistan" fonksiyonunuzu yazmanız gerek. Sonra kontrol edeceğiniz kartı, AWS IoT ağına bağlamalısınız, ki paylaştığım kod bunu yapıyor. En sonunda bir AWS Lambda fonksiyonu yazmalı, invoker yani uyandırıcı olarak oluşturduğunuz Alexa fonksiyonunu seçip, IoT ağınızı da AWS Lambda fonksiyonunuza bağlamalısınız.

Bunu kolayca yapan 3. parti uygulamalar da var, ama veri yürütüyorlar. O nedenle kendim yapmak istedim, hem istediğim gibi de özelleştirip cihaz bağlayabiliyorum. Bayağı zahmetli bir iş, tüm sistemi oturtmam bayağı yorucu olmuştu benim için. :)
 
@SideWinder

Eğitim sisteminizdeki saçma şeyler olmasa(ezberci, nota dayalı gibi şeyler) meslek lisesinde okuyan insanlara daha eğlenceli gelip bunların üstüne düşüp daha farklı yerlere gelebilir. Lisede heveslerim vardı bu tür şeylere yedirdi bitirdi bu sistem.

En değerli lise grubunda görmeseler de işin çıkacağı, çıkması gereken bu yerlerdir.

Echo Dot için ekstra bilgiler için tekrar teşekkürler bu arada. Fırsat bulduğumda bir tane alıp denemek istiyorum:)
 
Bu SonOff kodunu Siri'ye bağlayabilirsiniz mesela. :)

@SideWinder

Eğitim sisteminizdeki saçma şeyler olmasa(ezberci, nota dayalı gibi şeyler) meslek lisesinde okuyan insanlara daha eğlenceli gelip bunların üstüne düşüp daha farklı yerlere gelebilir. Lisede heveslerim vardı bu tür şeylere yedirdi bitirdi bu sistem.

En değerli lise grubunda görmeseler de işin çıkacağı, çıkması gereken bu yerlerdir.

Echo Dot için ekstra bilgiler için tekrar teşekkürler bu arada. Fırsat bulduğumda bir tane alıp denemek istiyorum:)

Meslek Liseleri için durum böyle maalesef... :(

Ayrıca, Echo Dot Türkiye'de var mı bilmiyorum ama Amazon'dan alınabilir.
 

Yeni konular

Geri
Yukarı