Rehber Arduino ile bilgisayarı uzaktan açmak | ESP8266 & ESP32

SonOff Flashlama Rehberinden sonra ilginç bir rehberle daha karşınızdayım. :)

SonOff konusunda, IoT'den ve ESP tabanlı kartların neler yapabildiğinden bahsetmiştim. O konuyu bir başlangıç olarak kabul ettim ve seriyi devam ettirip, birkaç IoT tabanlı uygulama daha paylaşmak istedim.

IoT artık hayatımızın birçok alanına girmiş durum. Temelde bir şeyleri uzaktan kontrol edebilmek düşüncesiyle çıkan IoT, çok kısa bir sürede ciddi bir evrim geçirdi ve koca bir sektör haline geldi.

IoT denince, büyük fabrikalardaki onlarca robotun optomasyonu, yüzlerce sensörün yönetilmesini kabul edebileceğimiz gibi, basit bir Wi-Fi kartıyla yapılan uzaktan kumanda da kabul edilebilir. IoT'nin sınırı kalmamış durumda artık.

Uzunca bir süredir, bilgisayarı uzaktan açıp kapatabileceğim bir sistem yapmayı amaçlıyordum. Ancak vakit eksikliği ve bilgisayardaki düzeni bozmak istemem, buna hep engel olmuştu. Ancak SonOff konusundan sonra, yeni bir rehber arayışına girince, bu konu aklıma geldi ve bende değerlendirmek istedim.

Temelde çalıştığım 2 ESP çipi var: ESP8266 ve ESP32.

ESP8266, daha basit ve hafif bir çip. ESP32 ise güç ve hafıza olarak biraz daha önce. Ancak temellerinde aynılar diyebiliriz.

Soldan sağa, ESP8266/CH340 - ESP32 DevKit C - ESP8266 CP210

1.jpg


ESP8266 ve ESP32 arasında bazı farklar var demiştik. Bu farklardan biri, beni de ESP32 kullanmaya iteni, "WEB Server" becerileri.

Bildiğiniz gibi, bu kartlar Wi-Fi ağınıza bağlanan kartlar. Wi-Fi ağınıza bağlandığında, local bir IP adresi atanıyor bu kartlara. Bu kartlar için özel olarak oluşturulmuş Arduino kütüphanelerini kullanarak, kartların üzerinden Web sunucusu açabiliyorsunuz. Yani bir bakıma, kartın bağlı olduğu local IP adresinde bir sunucu açılmış oluyor ve sizde bu sunucu üzerinden kartı kontrol edebiliyorsunuz.

İki kart da Web sunucusu özelliğine sahip, ancak ESP8266, özelleştirilmiş HTML sayfalarında düşük performans gösterebiliyor. Ben, bu nedenle ESP32 kullandım.

2.jpg


Ama ESP8266 için olan kodu da paylaşacağım.

Konsept

Bilgisayarları açmak için kullandığımız düğmeler (Power Switch), çok basit bir çalışma prensibine sahiptir. İki ucu olan bu düğme, basıldığı zaman üzerine takılı olan kabloları birbirine bağlar.

Peki, bu bilgisayarın açılmasını nasıl sağlar.

Güç kablosunu taktığımız 2 port (Jumper) vardır. Bu portlara alıcı ve verici diyebiliriz. Verici portta elektrik akımı bulunur, alıcı portta ise elektrik akımı yoktur. Ve, bu iki port normal şartlarda birbirine bağlı değillerdir. Siz düğmeye bastığınızda, Verici port Alıcı porta bağlanmış olur. Yani, devre tamamlanır. Verici porttan Alıcı porta elektrik akımı geçer, bu bir tür sinyal gibidir. Yani anakartın sistemi açması için bir sinyal verilir.

Bizim yapmamız gereken ise, düğmenin yerini başka bir şeyle doldurmak, uzaktan kontrol edilebilen bir şeyle.

Röle (relay) burada devreye giriyor. Röle, basitçe dışardan elektrik akımıyla kontrol edilebilen bir anahtar gibidir. İçinde iki mıknatıs bulunur. Elektrik verdiğinizde, mıknatıslar anahtar uçlarını birleştirir ve elektriği iletir.

NO-RELAY-1024x574.jpg


Biz de bugünki uygulamamızda röleyi kullanacağız. Ancak bir farkla.

Eğer röle sürekli açık olursa, yani anakarta sürekli açma sinyali giderse, anakart açılırken kapanır. Nasıl bilgisayarı açarken, düğmeye basıp çekiyorsak, rölenin de belirli bir milisaniye açık olması lazım.

Malzemeler ve Kurulum

İhtiyacımız olan malzemeler şu şekilde:
  • ESP32 ya da ESP8266 geliştirme kartı
  • Tek röleli röle kartı
  • 3 adet d/d jumper kablo
  • 2 adet d/e jumper kablo
3.jpg


Rölenin kontrol bağlantıları, 3 pinlidir. Bunlar "VCC, GND, Sinyal" pinleridir. VCC ve GND kısaca "+" ve "-", Sinyal ise röleyi kontrol edeceğimiz pindir.

Rölenin bağlantılarını şu şekilde yapabiliriz:
  • VCC --> 3.3V
  • GND --> GND
  • Sinyal --> GPIO 14
Rölenin, anakarta gidecek kablolarını bağlamadan önce, bir noktayı açıklamak gerekiyor.

Normalde elektrik anahtarlarının 2 portu olur. Bunlardan biri gelen, diğeri ise giden elektrik içindir. Ama rölelerde fazladan bir port daha bulunur. Bunun nedeni, rölelerin farklı bir mantığa sahip olmasıdır.

5V-Relay-Pinout1.png


Rölenin solunda da gördüğünüz gibi, "NC" - "C" ve "NO" adlı üç pin. C, akımın geldiği pindir. NC ve NO ise, "Normaly Closed" ve "Normaly Open" terimlerinin kısaltmasıdır.

Kabloyu NC portuna takarsanız, röle çalışmıyorken elektrik akımı iletilmez. Röle çalıştığında iletilir. NO ise tam tersi bir mantığa sahiptir. Biz, akımın normalde geçmemesini istediğimiz için, "NC" ve "C" portunu seçeceğiz

Bu porta iki kablo takıp, uçlarını da anakarta bağlayacağız

Bağlantılar sonrası, devre şu şekilde görünecektir:

4.jpg


Röleden çıkan iki ucu anakarta bağladıktan sonra ise böyle: (Tozlu görüntü için kusura bakmayın)

5.jpg


Ek olarak, devreyi kasanıza koyarken, altına yalıtıcı bir malzeme koymayı ihmal etmeyin.

Yazılım

Web sunucusu tarafı, basit bir mantığa dayanıyor. Web sayfasında basit bir push-button bulunacak. Kullanıcı buna tıkladığında, röle 300 milisaniye süreyle devreyi tamamlayacak, yani, sanki bilgisayarın açma tuşuna basmışız gibi olacak.

Web sunucusunda çalışan Web sayfası:

app_ss.jpg


Proje kaynak kodu:


Projenin demo videosu:

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Biraz uzun bir rehber oldu, ama keyifli olmuştur umarım.

Bu, temel düzeyde bir uygulama. Ama bunu geliştirip, Amazon Alexa ya da Google Asistan ya da Siri gibi hizmetlerle çalışacak şekilde ayarlayabilirsiniz.

Yorum ve görüşlerinizi belirtirseniz sevinirim, bir başka rehberde görüşmek üzere. :)
 
Son düzenleme:
@mustaine kasanın o kısmı metal. Kartta kısa devre olmması için koydum.
Forumda benim gibi elektrik elekronikçi arkadaşlar için güzel bir rehber olmuş. Yanlış hatırlamıyorsam zaten elektirik elekronik mühendisiydiniz. Ben de mühendis yoldundayım daha. :D

Evet, Elektrik Elektronik mühendisiyim. :)
 
Ustam bende yapmaya çalışıyorum ama Google asistana bağlıyorum remote me kullanrak kodları hazırladım IFTTT'den de Google asistana bağlıyorum şu an ışık açıp kapatabiliyorum fakat bir türlü PC'ye entegre edemedim röle aç kapa komudunu uyguluyor süre girmeye çalışıyorum onu da beceremedim bir türlü galiba kafam doldu bir yardımcı olabilir misin rica etsem?
 
@y_furkan hangi geliştirme kartını kullanıyorsun? Ayrıca burada paylaştığım kodları mı kullandın yoksa kendin mi yazdın?
esp8266 noemcu kullanıyorum
kodlama bu şekilde sadece ilk komutu verdikten sonra rolenin kapanması için nereye bişe eklemem lazım


uint8_t isik = 5;
RemoteMe& remoteMe = RemoteMe::getInstance(TOKEN, DEVICE_ID);

//*************** CODE FOR COMFORTABLE VARIABLE SET *********************

inline void setAkilliev(boolean b) {remoteMe.getVariables()->setBoolean("akilliev", b); }

//*************** IMPLEMENT FUNCTIONS BELOW *********************

void onAkillievChange(boolean b) {
Serial.printf("onAkillievChange: b: %d\n",b);
digitalWrite(isik,b?HIGH:LOW);
}




void setup() {
Serial.begin(115200);

WiFi.begin(WIFI_NAME, WIFI_PASSWORD);

while (WiFi.status() != WL_CONNECTED) {
delay(100);
}

remoteMe.getVariables()->observeBoolean("akilliev" ,onAkillievChange);

remoteMe.setConnector(new RemoteMeSocketConnector());
remoteMe.sendRegisterDeviceMessage(DEVICE_NAME);
pinMode(isik, OUTPUT);
digitalWrite(isik, LOW);
}


void loop() {

remoteMe.loop();
 
Attığınız koddan gerçekten bir şey anlamadım, lütfen kod paylaşım aracını kullaıp atın. Ayrıca ESP8266 nerede Wi-Fi'ye bağlanıyor acaba, tam kod mu bu?


Benim bu proje için yazdığım kod, URL tabanlı çalışıyor. Yani URL/on gelince açılıyor, URL/off gelince kapanıyor. Google Asistan için uğraşmak yerine, Google Asistan'ın komut verdiğinizde lokalde bu URL'leri çağırmasını sağlayabilirsiniz.
 
Kod:
#define WIFI_NAME "TP-LINK_7859D0"
#define WIFI_PASSWORD "Yusuf123171.,"
#define DEVICE_ID 1
#define DEVICE_NAME "akilliev"
#define TOKEN "~915846_SHgCtd6V2GNFgWzr3TJcXaQ0"


#include <RemoteMe.h>
#include <RemoteMeSocketConnector.h>
#include <ESP8266WiFi.h>


uint8_t isik = 5;
RemoteMe& remoteMe = RemoteMe::getInstance(TOKEN, DEVICE_ID);

//*************** CODE FOR COMFORTABLE VARIABLE SET *********************

inline void setAkilliev(boolean b) {remoteMe.getVariables()->setBoolean("akilliev", b); }

//*************** IMPLEMENT FUNCTIONS BELOW *********************

void onAkillievChange(boolean b) {
  Serial.printf("onAkillievChange: b: %d\n",b);
  digitalWrite(isik,b?HIGH:LOW);
}




void setup() {
  Serial.begin(115200);

  WiFi.begin(WIFI_NAME, WIFI_PASSWORD);

  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
  }

  remoteMe.getVariables()->observeBoolean("akilliev" ,onAkillievChange);

  remoteMe.setConnector(new RemoteMeSocketConnector());
  remoteMe.sendRegisterDeviceMessage(DEVICE_NAME);
  pinMode(isik, OUTPUT);
digitalWrite(isik, LOW);
}


void loop() {
 
  remoteMe.loop();
}
 
isik diye tanımlanan pine röleyi takman lazım. Ya da int relay_pin = 10 deyip, digitalWrite(isik,b?HIGH:LOW); terine digitalWrite(relay_pin,b?HIGH:LOW); yazman gerek.

Böyle yapınca çalışması lazım.
isik olarak tanımladığım pine röleyi takıyorum açma komutu verdiğimde açılıyor ama röle kendini kapatmadığı için geri bilgisayarı kapatıyo
 

Yeni konular

Geri
Yukarı