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

İbrahim Zdemir

Zettapat
Katkıda Bulunan
Katılım
2 Haziran 2015
Mesajlar
12.285
Çözümler
78
Beğeniler
24.575
Yer
Pillars of Creation
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. :)
 

syrx.mie

Decapat
Katılım
10 Temmuz 2020
Mesajlar
1.407
Çözümler
7
Beğeniler
1.290
Yer
Pendik, İstanbul
Hiç anlamasam da İbrahim hocam bu iş için uğraşıyorsunuz. :D
 

ApRa

Gigapat
Katkıda Bulunan
Katılım
1 Mayıs 2017
Mesajlar
4.672
Çözümler
124
Beğeniler
6.206
@syrx.mie Yemeği sevmek için tarifi bilmenize gerek yok :D Sesli asistanı uzaktan kapatabiliyor en kısa haliyle :)

Kartları görünce lise yıllarım aklıma geliyor. 🙃
 

Blacksidemre

Kilopat
Katılım
8 Eylül 2018
Mesajlar
3.891
Çözümler
13
Beğeniler
5.022
Yer
Karanlık
İ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
 
KS
İbrahim Zdemir

İbrahim Zdemir

Zettapat
Katkıda Bulunan
Katılım
2 Haziran 2015
Mesajlar
12.285
Çözümler
78
Beğeniler
24.575
Yer
Pillars of Creation
@syrx.mie 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. :)
 

ApRa

Gigapat
Katkıda Bulunan
Katılım
1 Mayıs 2017
Mesajlar
4.672
Çözümler
124
Beğeniler
6.206
@İbrahim Zdemir 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. Oraları es geçenler için.
 
KS
İbrahim Zdemir

İbrahim Zdemir

Zettapat
Katkıda Bulunan
Katılım
2 Haziran 2015
Mesajlar
12.285
Çözümler
78
Beğeniler
24.575
Yer
Pillars of Creation
Kartları görünce lise yıllarım aklıma geliyor. 🙃

Lise'de bu tarz şeylerle uğraşmış kişiler çok şanslı bence. :)
@İbrahim Zdemir 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. :)
 

ApRa

Gigapat
Katkıda Bulunan
Katılım
1 Mayıs 2017
Mesajlar
4.672
Çözümler
124
Beğeniler
6.206
@İbrahim Zdemir

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:)
 
KS
İbrahim Zdemir

İbrahim Zdemir

Zettapat
Katkıda Bulunan
Katılım
2 Haziran 2015
Mesajlar
12.285
Çözümler
78
Beğeniler
24.575
Yer
Pillars of Creation
Bu SonOff kodunu Siri'ye bağlayabilirsiniz mesela. :)

@İbrahim Zdemir

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.
 



Yukarı