ESP8266 çeşitli IoT uygulamasında sıklıkla kullanılan bir modüldür. Arduino ve sensörler kullanarak çeşitli sensörlerle çeşitli uygulamalar yapabilirsiniz bu işlemin bir tık üstü ise bu sensörlerden alınan değerlerin internet ortamına aktarılması veya bu sensörleri internet ortamından kontrol edebilmektir. Bu yazımızda Arduino uno da DHT22 ile sıcaklık ve nem değerlerini ölçüp ESP8266 WiFi modülü ile bu değerleri kendi edindiğimiz ücretsiz veya ücretli bir hostingin veri tabanına aktaracağız. Bu verileri istediğimiz yerden görebilecek gerekli durumlarda müdahaleler yapabileceğiz. Bu uygulamaya benzer şekilde gerçek uygulamalar yapabilirsiniz örnek olarak

  • Oda sıcaklığını ve nemini ölçüp mobil cihazınıza veya web sitenize aktarabilirsiniz.
  • Toprak nem sensörü ile bitkilerinizin nem değerlerini uzaktan görebilirsiniz.
  • Ses sensörü kullanarak bebekler için bir kablosuz dedektör yapabilirsiniz.
  • Hareket sensörü kullanarak kablosuz dedektör yapabilirsiniz.

daha da çoğaltılabilir tamamen hayal gücünüze kalmış bir durum. Sözü fazla uzatmadan uygulamaya geçelim uygulama üç adımdan ibaret

1.adımda Arduino ve ESP8266 modülümüzü hazır hale getireceğiz.
2.adımda Web sitemizin veri tabanını düzenleyeceğiz.
3.adımda Web sitemizin değerleri alabilmesi için küçük bir php kodu hazırlayacağız.

1.Adım Arduino ve ESP8266 Bağlantısı.

İlk olarak donanımı hazır hale getiriyoruz bunun için DHT22 data pinini Arduino 2.pine VCC pinini 5V GND pinini ise Arduino GND sine bağlıyoruz. ESP8266 Tx pinini Arduino Rx pinine Rx pinini Arduino Tx pinine VCC ve CH_PD pinlerini Arduino 3.3V çıkışına GND pinini ise Arduino GND pinine bağlıyoruz.

Bağlantıları yaptıktan sonra Arduinoya kod yüklememiz gerekiyor bunun için şimdilik Arduinoya bağlı olan Tx ve Rx kablolarını çıkartıyoruz aksi takdirde kod yüklenmeyecektir.

//ESP8266
#define ag_ismi "Ag_ismi" //kablosuz ağınızın adını buraya girin
#define ag_sifresi "Ag_sifresi" //kablosuz ağınızın şifresini buraya girin
#define IP "siteadiniz.com" //ornek.com şeklinde alan adınızı girin
#include "DHT.h"
#define DHTPIN 2 //DHT pinini 2.pine bağladık
#define DHTTYPE DHT22 //DHT22 kullanacağımızı belirttik 
DHT dht(DHTPIN, DHTTYPE); //DHT sensörü tanımlıyoruz
void setup() {
dht.begin(); //DHT sensörü başlattık
Serial.begin(115200); //Serial haberleşmeyi başlattık
Serial.println("AT"); //ESP çalışmasını kontrol ediyoruz.
delay(10);
if(Serial.find("OK")){   //ESP cevap olarak OK gönderirse devam
Serial.println("AT+CWMODE=1"); //ESP çalışma modunu sadece ağa bağlanabilir oalrak değiştiriyoruz.
String baglantiKomutu=String("AT+CWJAP=\"")+ag_ismi+"\",\""+ag_sifresi+"\"";
Serial.println(baglantiKomutu); //ağa bağlanıyoruz.
delay(100);
if(Serial.find("OK")) //bağlantı başarılı olursa devam
{
Serial.println("aga baglanildi");
}
else
{
  Serial.println("Ag baglantisi saglanamadi tekrar deneniyor...");
  Serial.println("AT+RST"); //bağlanamazsa ESP resetlenir
  delay(1000);
  asm volatile ("  jmp 0"); //Arduino resetlenir
}
} 
else
{
  Serial.println("ESP ile baglanti saglanamadi tekrar deneniyor...");
  Serial.println("AT+RST"); //ESP bağlanmazsa ESP resetlenir
  asm volatile ("  jmp 0"); //Arduino resetlenir
  delay(100);
}
}
void loop() {
float n = dht.readHumidity(); //DHT den nem değerini okuyoruz
float s = dht.readTemperature(); //DHT den sıcaklık değerini okuyoruz
Serial.print("Hava Sicakligi: "); //Ekrana yazdırıyoruz.
Serial.println(s); 
Serial.print("Nem Orani: ");
Serial.println(n); 
sicaklik_yolla(n,s); //Sıcaklık yolla fonksiyonuna değerleri yoluyoruz.
}
void sicaklik_yolla(float n, float s){ 
Serial.println(String("AT+CIPSTART=\"TCP\",\"") + IP + "\",80"); //TCP bağlantısını başlatıyoruz.
delay(2000);
if(Serial.find("Error")){  
Serial.println("AT+CIPSTART Error");
Serial.println("AT+RST");
asm volatile ("  jmp 0"); //Arduino resetlenir
delay(1000);
}
String yollanacakkomut = "GET /writer.php?"; //Get methoduyla sitedeki writer.php dosyasına veri göndereceğiz
yollanacakkomut += "&s="; 
yollanacakkomut += (String(s)); //Stringe dönüştürüp yolluyoruz
yollanacakkomut += "&n=";
yollanacakkomut += (String(n));
yollanacakkomut += " HTTP/1.1\n";
yollanacakkomut += ("Host: siteadi.com\n"); //alan adinizi girin
yollanacakkomut += ("User-Agent: Arduino\n");
yollanacakkomut += "\r\n\r\n";                                                                                                                        
Serial.print("AT+CIPSEND="); //veri göndermeye başlıyoruz.                  
Serial.println(yollanacakkomut.length()+2); //gönderilecek veri boyutunu giriyoruz.     
delay(4000);
if(Serial.find(">")){  //> işareti gelirse veriyi yazıyoruz                        
Serial.print(yollanacakkomut);
Serial.print("\r\n\r\n");
}
else{
Serial.println("AT+CIPCLOSE");
Serial.println("AT+RST");
asm volatile ("  jmp 0"); //veri gönderilmezse arduino resetlenir.
  delay(100);
}
Serial.println("AT+CIPCLOSE");
//delay(10000);
delay(90000); //Sürekli veri göndermemesi için bir süre bekletiyoruz.
}

Kodlarımızı Arduino uno yada başka bir sürüme yüklüyoruz. Yükleme işlemi bittikten sonra arduinonun Tx ve Rx pinlerini tekrar bağlayıp arduinoya reset atıyoruz. Herşey düzgün bir şekilde yapıldığında Arduino veri göndermeye başlamış olmalı şimdi bu veriyi alma kısmına geldi bunun için 2.adıma geçiyoruz.

2.Veri Tabanının Düzenlenmesi

Veri tabanımıza erişmek için öncelikle cPanele giriyoruz ve oradan phpMyAdmine giriş yapıyoruz. Veritabanı konusunda hosting firmanızın bir sınırlaması yoksa yeni bir veritabanı oluşturabilirsiniz. Veritabanımızın tabloları şu şekilde olmalı

  • İd (primary)
  • Tarih (TİMESTAMP)
  • Sicaklik (float)
  • Nem (float)

Veritabanımızı oluşturduktan sonra veri almak için küçük bir adımımız kaldı

3.PHP kodların yazılması

PHP kodları bizim arduinodan aldığımız veileri veritabanına kaydetmek için gereklidir. Bunun için masaüstüne writer.php adında bir dosya oluşturuyoruz. Dosya uzantısının .php olduğundan emin olalım ve kodlarımızı yazalım

<?php

$nem = $_GET['n']; // n değeri arduinonun gönderdiği değişken adı
$sicaklik = $_GET['s']; // s değeri arduinonun gönderdiği değişken adı
if (!$nem) { // eğer değerler alınmazsa 0 yazdıracak
  $nem = 0;
}
if (!$sicaklik) {
  $sicaklik = 0;
}

$db = new PDO("mysql:host=localhost;dbname=**veritabaniadi**", "**kullaniciadi**", "**sifre**");
/* Burada yildizları ve içerisini veritabanı adı,kullaniciadi,sifre ile değiştiriyoruz yildizlarida siliyoruz dbname="deneme" gibi */
if($db)
{
	echo("baglanti basarili");
}
else
	echo("baglanti basarisiz");

$now = new DateTime();
$datenow = $now->format("Y-m-d H:i:s"); //tarih saati yazdiriyoruz

$insert = $db->query("INSERT INTO `bitirme` (`id`, `tarih`,`sicaklik`,`nem`) VALUES (NULL, CURRENT_TIMESTAMP , '".$sicaklik."', '".$nem."')");
//insert komutunda önemli olan isimler ve siralamanın doğru olması
if ( $insert ){
    $last_id = $db->lastInsertId();
    print "insert islemi basarili";
}
$db = null;
?>

php kodlarımızı da yazdıktan sonra writer.php dosyasını public_HTML içerisine atıyoruz.

Bütün işlemleri başarılı bir şekilde yaptığınızda arduino çalıştıkça veritabanına veriler gönderilecektir. Sorun yaşayanlar yorum yapabilir. Kolay gelsin arkadaşlar

Renklerin dünyasına hoşgeldiniz bugün RGB ledin kısacık kodlamasını ve bağlantı şekline bakacağız. Kısacık diyorum çünkü gerçekten çok kısa sürüyor hazır hale getirmek. Arduino da yapacağımız en renkli uygulamalardan biri diyebiliriz. Öncelikle bu RGB ledi nerelerde kullanabiliriz ona değinelim. Dekorasyonla uğraşan arkadaşlar bu örneği çok sevecekler çünkü çok canlı ve güzel şeyler ortaya çıkabilir. Odanızda küçük güzel renkli aydınlantmalar yapabilirsiniz. Yada tek bir ledden tüm renkleri sağlayabildiğiniz için farklı renklerde ledler kullanmayıp tasarruf sağlayabilirsiniz. Ayrıca diğer ledlerde göre renkler de daha canlı olacaktır. Küçük mobil uygulamayla yönetebilir ve akıllı led lambalar elde edebilirsiniz ve daha birçok uygulamada bu küçük malzememizi kullanabilirsiniz.

Bağlantıda yapmanız gereken R pinini 11.pine G pinini 10.pine B pinini ise 9.pine bağlamak birde – pini var buda ground yani toprak GND pini. Bağlantı bukadar 4 tane kabloyla bitiyor.

Kodlarımızda bağlantımız kadar kısa ve öz ama size önerim kodda verilen değerlerle oynayarak farklı renkler elde etmeye çalışın böylece konuyu daha iyi kavrayabilirsiniz. Sonraki örneklerimizde RGB yide kullanarak çeşitli çalışmalar yapmaya çalışacağız.

Kodların kaynağı bu adrestir arkadaşlar daha detaylı incelemek isteyen bu adresten inceleyebilir ayrıca sorusu olanlar yorumda belirtebilir daha net açıklayabilirim.

int redPin = 11;
int greenPin = 10;
int bluePin = 9;
void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);  
}
 
void loop()
{
  setColor(255, 0, 0);  // Kırmızı
  delay(1000);
  setColor(0, 255, 0);  // Yesil
  delay(1000);
  setColor(0, 0, 255);  // Mavi
  delay(1000);
  setColor(255, 255, 0);  // Sarı
  delay(1000);  
  setColor(80, 0, 80);  // Mor
  delay(1000);
  setColor(0, 255, 255);  // Su Rengi
  delay(1000);
}
void setColor(int red, int green, int blue)
{
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);  
}

 

Kendi dijital masa saatinizi yapmak istermisiniz. Cevabı evet olanları buraya toplayalım. Arduino kullanarak kısa sürede kendi saatinizi yapabilirsiniz. Üstelik kendi saatiniz olduğu için kendiniz kendi isteklerinize göre saatinizi şekillendirebilirsiniz. Bu yazı serimizde ilk olarak bir saat yapıp sonra bu saati geliştireceğiz alarm ekleyeceğiz internete bağlayacağız aklımıza ne geliyorsa o yönde geliştirmeler yapacağız. İlk olarak saatimizi yapmak için ihtiyacınız olan elemanları alıyoruz.

  • 1 tane gerçek zaman saat modülü
  • 1 tane 4 digit 7 segment display
  • Bağlantı için jumper kablolar
  • Arduino Mega

Arduino mega kullanmamız gerekyor çünkü 4 digit 7 segment display biraz fazla pin tüketiyor 🙂 Evet elemanlarımızı topladıktan sonra birkaç kütüphane kullanmamız gerekiyor.

Piyasada çeşitli gerçek zaman saat modülü var arkadaşlar ben DS1032 RTC modülü kullanıyorum çünkü elimde bu modül vardı. RTC için kütüphaneyi buradan indirebilirsiniz.

4 digit 7 segment display için kütüphaneye de buradan ulaşabilirsiniz.

Kütüphaneleri taslak -> library ekle -> zip kitaplığı ekle bölümünden direk ekleyebilirsiniz.

Kütüphaneleri indirip ekledikten sonra yapmamız gereken bağlantı ve kodlama kalıyor.

4 digit 7 segment displayin bağlantısını resimde gösterildiği gibi yapabilirsiniz.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bağlantı arduino uno üzerinde gösterilmiş fakat çok farkı yok mega üzerinde de yine aynı pinlere bağlantı yapacağız.

RTC modülümüzün bağlantısını da şu şekilde yapacağız

 

 

RTC VCC -> Arduino 5v

RTC GND -> Arduino GND

RTC CLK -> Arduino 50.pin

RTC DAT -> Arduino 51.pin

RTC RST -> Arduino 52.pin

 

 

 

 

RTC Bağlantısı da bu şekilde yaptıktan sonra kodlama kısmına geçebiliriz.

#include <DS1302.h>
#include "SevSeg.h"
Time t;
DS1302 rtc(52, 51, 50);
SevSeg sevseg;
void setup()
{
  rtc.halt(false);
  rtc.writeProtect(false);
  rtc.setDOW(FRIDAY);       
  rtc.setTime(15, 05, 30);   //Saati ayarlıyoruz.
  rtc.setDate(17,7, 2018);  //Tarihi ayarlıyoruz.
  byte numDigits = 4;
  byte digitPins[] = {9, 10, 11, 12};
  byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 13};
  bool resistorsOnSegments = false; 
  byte hardwareConfig = COMMON_ANODE; 
  bool updateWithDelays = false;
  bool leadingZeros = false; 
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
  sevseg.setBrightness(90);
  Serial.begin(9600);
}
void loop()
{  
 t = rtc.getTime();
 int saat = t.hour*100; //4 haneli olması için saati 100 le çarpıyoruz
 int dakika = t.min; //dakikayı direk alıyoruz.
 int yazdir = saat+dakika; //direk toplayarak saat ifadesini alıyoruz.
 sevseg.setNumber(yazdir,2); //,2 nin anlamı . ifadesini nereye konulacağını belirtmek
 sevseg.refreshDisplay(); //displayi yeniliyoruz..
}

Kodlar bukadar arkadaşlar çok deneme imkanım olmadı buglar olabilir kullandıkça fark ettikçe düzenlemeler yapabilirim arkadaşlar sizin de gördüğünüz hatalar öneriler varsa uyarabilirsiniz. Kolay gelsin

Şanslı arkadaşları hemen buraya alalım 🙂 evet arkadaşlar arduino ve joystick modülü ile oyun nasıl yaparız küük bir örnekle göreceğiz. İlk önce joystick modülü nasıl bağlanır

Joystick modülü üzerinde 5V -> Arduino 5v çıkış

Joystick modülü üzerinde GND -> Arduino GND

Joystick modülü üzerinde Vrx -> Arduino analog A1

Joystick modülü üzerinde Vry -> Arduino analog A0

Joystick modülü üzerinde SW -> Arduino dijital 2.pin

şeklinde bağlantımızı yapıyoruz. Modül x ve y eksenlerinde 0 dan 1024 e kadar olan eksenlerden oluşuyor hiç ellemediğiniz takdirde x ve y değerleri 500 olacak sağ sol yukarı ve aşağı yaptığınızda 0 yada 1024 e gidecektir.

Oyuna gelecek olursak 6 tane ledi arduinomuza bağlıyoruz. 3,4,5,6,7 ve 8. pinlere ledlerimizi bağlıyoruz. Ledin + ucuna küçük bir direnç eklemeyi unutmayalım. Ledleri ve joystick modülü bağladıktan sonra oyun hakkında biraz detay vereyim. Oyunun amacı bilgisayar 6 ledden bir tanesini rastgele seçmekte siz de bir tahmin yaparak bilgisayarın seçtiği ledi bulmaya çalışıyorsunuz. Led seçmek için joystick modülünü sağ sol yapıyoruz. Bir tanesini seçtikten sonra joystick butonuna basarak secimi yapıyoruz. biz seçimi yaptıktan sonra bilgisayar kendisi rastgele bir sayı üretiyor ve bizim sectigimizle karşılaştırıyor. Eğer bizim tahminimizle bilgisayarın seçimi aynıysa bizim puan hanemize 1 puan ekleniyor eğer aynı değilse bilgisayara 1 puan yazılıyor ilk kim 5 puana ulaşırsa o kazanıyor.

 

 

 

 

 

 

 

 

 

Evet Serial monitor de yukarıdaki çıktı gibi olacak. Zevkli bir oyun olduğumu düşünüyorum. Burada bilgisayarın rastgele bir sayı üretmesi için random fonksiyonunu kullandık kullanımı da şu şekilde

random(minimum,maximum-1) biz kodlarda random(3,9) yazdık nedeni ledlerin bağlandığı pin numaralarını referans aldık ama oyunu oynayan kişiye gösterirken 2 çıkartıp öyle gösterdik.Kodlara geçebiliriz artık kodlarda anlaşılmayan bir yer olursa yorumda belirtmeniz yeterli arkadaşlar gerekli açıklamayı yapabilirim.

int xPin = A1;
int yPin = A0;
int butonPin = 2;
int secilen;
int xKonum = 0;
int yKonum = 0;
int butonDurum = 0;
int led = 3;
int oyuncu;
int bilgisayar;
void setup() {
  Serial.begin(9600); 
  pinMode(xPin, INPUT);
  pinMode(yPin, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(butonPin, INPUT_PULLUP); 
  Serial.println("Arduino ruleti oyununa hosgeldiniz.");
  Serial.println("Oyun bilgisayara karsi oynanmaktadir. Amaciniz joystic yardımıyla bilgisayarın sectigi ledi tahmin etmek.");
  Serial.println("Tahmin ettiginiz led bilgisayarın sectigi led ile aynıysa siz kazanırsınız aksi takdirde bilgisayarin puan hanesine eklenir.");
  Serial.println("ilk 5 puani elde eden kazanir. Hadi oyuna...");
  Serial.println("Joystic ile bir led secip joyisic uzerindeki butona basin.");
}

void loop() {

  xKonum = analogRead(xPin);
  yKonum = analogRead(yPin);
  butonDurum = digitalRead(butonPin);
  digitalWrite(led,HIGH);
  if(xKonum >= 1000)
  {
    digitalWrite(led,LOW);
    if(led+1 <= 8)
    {
    led = led+1;
    digitalWrite(led,HIGH);
    }
  }
  if(xKonum <= 300)
  {
    digitalWrite(led,LOW);
    if(led-1 >= 3)
    {
    led = led-1;
    digitalWrite(led,HIGH);
    }
    
  }
  if(butonDurum == 0)
  {
     secilen = led;
     int ran = random(3,9);
     Serial.print("Bilgisayarin secimi=");
     Serial.println(ran-2);
     Serial.print("Sizin tahmiminiz=");
     Serial.println(secilen-2);
     if(secilen == ran)
     {
      Serial.println("Tebrikler tahmininiz dogru 1 puan kazandiniz.");
     oyuncu = oyuncu+1;
     }
     else
     {
     Serial.println("Uzgunum tahmininiz dogru degil 1 puan bilgisayara eklendi");
     bilgisayar = bilgisayar+1;
     }
       Serial.print("Sizin Puaniniz=");
  Serial.println(oyuncu);
  Serial.print("Bilgisayarin puani=");
  Serial.println(bilgisayar);
        Serial.println("-------------------------------------------------------------------");
  if(oyuncu == 5)
  {
    Serial.println("Tebrikler bilgisayari yendiniz... Tekrar oynamak icin led secip dugmeye basin...");
    Serial.println("-------------------------------------------------------------------");
    oyuncu = 0;
    bilgisayar = 0;
  }
  if(bilgisayar == 5)
  {
    Serial.println("Bilgisayar kazandi... Tekrar oynamak icin led secip dugmeye basin...");
    Serial.println("-------------------------------------------------------------------");
     oyuncu = 0;
    bilgisayar = 0;
  }
  }

  
  delay(100);
}

 

ESP8266 WiFi modülünü arduinomuza bağladıktan sonra AT komutlarını kullanmayı öğrenmemiz lazım daha doğrusu hangi AT komutu ne işe yaradığını bilmemiz gerekiyor. AT komutlarını serial monitora yazarak kullanabiliyorduk peki hangi komut ne işe yarıyor hemen başlıca komutlara bakalım.

AT = ESP8266 nın çalıştığını kontrol etmek için kullanırız. Serial monitore yazdığımızda ESP bize OK cevabını verirse modül çalışıyor demektir.

AT+RST = ESP8266 yı resetlemek için kullanılır.

AT+GMR = ESP8266 nın yazılım versiyonunu göstermek için kullanılır.

AT+CWLAP = ESP8266 modülüne yakalanan ağları listeler.

AT+CWJAP = Bir ağa bağlanmak için kullanılır. AT+CWJAP=”SSID”,”Password” şeklinde kullanılır.

AT+CWQAP = Bağlanılan ağdan çıkış yapmak için kullanılır.

AT+CIFSR = ESP8266 nın aldığı ip adresini gösterir.

AT+CWMODE = ESP8266 nın çalıştığı modu ayarlayabiliriz. ESP 3 modda çalışır. 1.modda ESP8266 başka ağlara bağlanabilir. 2.modda ESP8266 bir ağ kurar ve diğer cihazlar bu ağa bağlanabilir. 3.modda ise ESP her iki modda da çalışabilir. AT+CWMODE=1 şeklinde kullanılır.

AT+ CWSAP = Eğer ESP8266 yı 2 yada 3.modda çalıştıracaksak bir kaç ayar yapmalıyız.

AT+ CWSAP= <ssid>,<pwd>,<chl>,<ecn> şekllinde kullanılır. ssid kurulacak ağın adıdır. pwd şifre chl kanal ve ecn şifreleme türüdür.

temel komutlarımız bu kadar arkadaşlar tüm komutları buradan görebilirsiniz.

Arduino bildiğimiz üzere yaz yazılım ile donanımın birleşmesiydi günümüz teknolojisinde bu biraz eskidi artık çünkü yeni nesil uygulamalar artık bunun üzerine çıkıyor yeni nesil IoT uygulamalarını konuşuyor. Peki nedir bu IoT uygulamaları? IoT açılımı Internet of Things yani nesnelerin interneti. Nesneler kullandığımız elektronik eşyalar aletlerdir ve bu cihazları internet aracılığıyla birbirine bağlayarak haberleşmelerini sağlamak kısaca IoT nedirin açılımıdır. Örneğin telefonla evinizdeki klimayı istediğiniz yerden açmak yada akıllı ev sistemleri.

Kısaca konu hakkında bilgi verdikten sonra bunu nasıl yapabiliriz konusuna gelelim. Bir nesneyi internete bağlamak için farklı yöntemler mevcut WiFi bunlardan sadece birisi bu yazımızda bu WiFi yi nasıl kullanırız nasıl bağlantı yaparız buna değineceğiz. Arduino ile bu işi yapacağız Arduinonun WiFi tabanlı versiyonu yada ethernet tabanlı versiyonu mevcut bunlardan birisini kullanabilirsiniz yada sıradan bir Arduinoya ESP8266 modülü bağlayarak sizde kendi IoT uygulamanızı yapabilirsiniz.

Hemen bir ESP8266 modülü satın alıyoruz ve bağlantıya geçiyoruz. Bağlantımız şu şekilde olacak

ESP8266 RX -> Arduino TX

ESP8266 VCC -> Arduino 3.3V

ESP8266 CH_PD -> Arduino 3.3V

ESP8266 TX -> Arduino RX

ESP8266 GND -> Arduino GND

Şeklinde bağlantımızı yapıyoruz. Bağlantımızı yaptıktan sonra yazılım tarafına geçiş yapıyoruz. ESP8266 modülünü Arduino ile beraber kullanacaksak herhangi bir kütüphaneye ihtiyacımız yok çünkü ESP8266 nın kendi üzerinde işlemcisi mevcut.

Şimdi tek yapmanız gereken

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

}

void loop() {


}

Kodunu yükleyip serial monitoru açarak AT yazıp yolluyoruz. Sağ alttan Baund Rate değerini 115200  yapmayı unutmayın 🙂

Sonraki yazılarda örneklere geçiyoruz şimdilik bu kadar yeter 🙂

Bir önceki yazımızda keypad kullanımına değinmiştik keypad görünce hepimizin aklına parola sistemi gelişmiştir. Keypad parola sistemiyle ne yapabiliriz diye bakacak olursak şifreli kapılar aklımıza gelir şifreyi girdiğimizde kapı açılır aksi halde açılmaz evet yapacağımız örnekte tam olarak bu şekilde C++ da yaptığımız gibi soru cevap şeklinde bir örnek yapalım.

SORU:

Akıllı ev sistemi dizayn etmek istiyorsunuz çeşitli sensörler kullanarak sistemi tasarlamaya başladınız ve aklınıza şifreli kapılar geldi. Sizde aldığınız bir keypad kullanarak bir şifre sistemi yapmaya karar verdiniz. İstediğiniz özellikler

Sistem 3 hak verecek başarısız olursa birdaha giriş kabul etmeyecek

Şifre 4 haneli olacak

Şifre doğru olduğunda tekrar bir giriş kabul etmeyip şifrenin doğru olduğunu yazacak

CEVAP:

#include <Keypad.h>
const byte ROWS = 4;
int i;
int j;
int dogruluk;
char sifre[4];
char asil[4] = {'1','2','3','4'};
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
  {'0','1','2','3'},
  {'4','5','6','7'},
  {'8','9','A','B'},
  {'C','D','E','F'}
};
byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {9, 8, 7, 6};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 
void setup(){
  Serial.begin(9600);
  baslangic:
  dogruluk=0;
  i=0;
   Serial.println("Lutfen 4 haneli sifrenizi giriniz=");
  while(i<=3)
  {
  char customKey = customKeypad.getKey();
  if (customKey){
  sifre[i]=customKey;
  Serial.println(sifre[i]);
  i=i+1;
  }
  }
  Serial.println("Sifre kontrol ediliyor...");
  while(j<3)
  {
  for(i=0;i<4;i++){
  if(sifre[i]!=asil[i])
  {
    int dogruluk=0;
  }
  else
  {
    dogruluk=dogruluk+1;
  }
  }
  if(dogruluk==4)
  {
    Serial.println("Sifreniz dogru tesekkurler");
    break;
  }
  else
  {
    Serial.println("Sifreniz hatali tekrar deneyin...");
    j=j+1;
    if(j<3){
    goto baslangic;
    }
  }
  }
  if(dogruluk!=4){
      Serial.println("Sifre girisiniz kisitlanmistir. Lutfen yoneticiye basvurun...");
  }

}
void loop(){
 
}

Kodların açıklamasını yapmayacağım arkadaşlar biraz kendiniz kurcalamanız tek tek incelemeniz sizler için daha yararlı olacaktır. Eğer anlamadığınız bir yer olursa yorumlarda anlatabilirim

Sizin kendi yazdığınız koddan farklı olabilir neticede her yazarın bir kod yazışı vardır 🙂

Arduino kullanımında şu ana kadar sadece DHT22 ve LCD kullanımını gördük bu örnekte bu iki elemanı ortak olarak bir uygulamada kullancağız. DHT22 sıcaklık nem sensöründen okunan değeri LCD de ekrana yazdıran kodu göreceğiz böylece serial monitörden değil LCD den değerlerimizi okuyabileceğiz.

İlk olarak bağlantıları yapalım daha önce iki elemanında bağlantısını ayrı ayrı göstermiştik. Tek tek göstermek gerekirse

LCD nin

scl pini -> Arduino scl giriş

sda pini -> Arduino sda giriş

VCC pini -> Arduino 5v çıkış

GND pini -> Arduino GND çıkışı

DHT22 ->

 

 

 

 

 

 

 

 

 

 

Bağlantıları yaptıktan sonra sözü fazla uzatmadan kodlarımıza geçelim arkadaşlar zaten önceki örneklere bakmışsanız kodlara aşinasınız demektir.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
LiquidCrystal_I2C lcd(0x3f, 16, 2);
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
	lcd.begin();
  dht.begin();
	lcd.backlight();
}
void loop()
{
 delay(2000);
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 if (isnan(h) || isnan(t)) {
    lcd.println("Deger Okunamadi");
    return;
  }
  //setcursor ile yazıya başlayacağımız kısmı lcd nin 0.satır 0.sutun olarak ayarlıyoruz.
  lcd.setCursor(0,0);
  lcd.print("H: ");
  lcd.print(h);
  lcd.print(" %");
   //setcursor ile bu sefer bir alt satıra iniyoruz lcd nin 1.satır 0.sutun olarak ayarlıyoruz.
  lcd.setCursor(0,1);
  lcd.print("T: ");
  lcd.print(t);
  lcd.print(" *C ");
}

Evet benzer kodları bütün sensörler için yazabiliriz sadece değişkenleri değiştirerek lcd ye istediğimiz değerleri yazdırabiliriz. Evet arkadaşlar bu örneğide burada noktalıyoruz sorunuz olursa yorumlarda sorunuzu sorabilirsiniz elimden geldiğince cevaplamaya çalışırım kolay gelsin 🙂

Merhaba arkadaşlar bugün lcd ekrana nasıl yazı yazdırırız bunu göreceğiz. İlk olarak şunu söylememde fayda var benim kullandığım lcd i2c iletişimini kullanıyor size de bunu tavsiye ederim aksi takdirde çok fazla bağlantı kablosu ortaya çıkıyor.

Kullandığımız i2c iletişimli lcd nin 4 bacğı var arkadaşlar bular GND VCC SCL SDA bacaklarıdır. VCC bacağı arduino 5v çıkışına bağlanacak diğerleri yine arduino üzerinde yazılı yerlere bağlanarak bağlantı tamamlanacak arkadaşlar

I2c iletişimini kullanarak lcd ekranı çalıştırmak istediğimizde yapmamız gereken ilk iş i2c adresimizi öğrenmek bu farklı arduino tipleri için farklı değerler alabilir bunu yapmak için i2cscanner kodumuzu arduinoya ilk olarak yüklemeliyiz ve i2c adres bilgimizi almalıyız.

//wire kutuphanesi i2c haberleşme için gerekli
#include <Wire.h>
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
void loop()
{
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknown error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}

//Evet arkadaşlar kodumuz bu bu kodu bende arduino forumdan aldım kaynak linki sizinle de paylaşırım
//sizin yapmanız gereken kodu çalıştırmak ve adres bilggisini almak kodlarda bazı satırlar
//kutuphaneye has satırlar oldugu için anlamak biraz zor olabilir ama özünde bulduğu i2c adresleri
//ekrana yazdıran bulamazsa bulunamadı diye uyarı veren bir kod dizisi :)

https://playground.arduino.cc/Main/I2cScanner kodun bulunduğu kaynak burası arkadaşlar

bu kodu çalıştırdığınızda serial monitorde karşılaşacağınız ekran şu şekilde olacak

evet gördüğünüz gibi 0x3F adresi benim i2c adresim sizde bu farklı bir değer olabilir bu değeri not alalım biraz sonra ihtiyacımız olacak arkadaşlar.

 

 

 

i2c bağlantı adresimizi öğrendikten sonra lcd mizin kutuphanesini indirmemiz gerekiyor. Kütüphane yöneticisinden resimde vermiş olduğum kütüphaneyi kurabilirsiniz arkadaşlar

 

 

 

 

 

 

 

 

 

 

 

 

Kütüphanemizi kurduktan sonra kodlarımız geçiyoruz arkadaşlar

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

//evet arkadaşlar lcd mizin kaç satır ve sütundan olduğunu burada belirtmemiz gerekiyor
//benimki 2 satır 16 sutun seklinde ve 0x3F deaz önce öğrendiğimiz i2c adresi sizde kendi adresinizi 
//yazmalısınız
LiquidCrystal_I2C lcd(0x3f, 16, 2);

void setup()
{
	// Lcd ekrnı çalıştırıyoruz ve arka ışık fonksiyonumuzu çağırıyoruz
	lcd.begin();
	lcd.backlight();
	//lcd.print ile lcd ekrana istediğimizi yazdırabiliriz arkadaşlar
	lcd.print("Ornek Yazilim!");
}

void loop()
{
	//surekli dondurecek bir kod olmadığı için loop fonksiyonu boş kalacak
}

Evet arkadaşlar bu örneği de burada noktalıyoruz kolay gelsin arkadaşlar soruları yorum kısmından sorabilirsiniz.

Küçük bir seranız olduğunu düşünelim ve sıcaklık çok arttığı zaman fanlar yardımıyla içeriyi havalandırsın toplamda 2 tane fan bulunsun sürekli olarak ortam sıcaklığını ölçsün sensör olarak DHT22 sıcaklık nem sensörünü kullanalım fan olarakta elinizde varsa küçük fanlardan bağlayabilirsiniz yoksa bir led bağlayarak test edebilirsiniz. Programda if deyimini kullanacağız size yabancı geldiyse buradan konu anlatıma buradan ise örneklere bakabilirsiniz. Hemen kodlara geçiyorum sorularınız olursa yorumlardan iletebilirsiniz arkadaşlar.

#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22 
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  Serial.begin(9600);
  Serial.println("Basit Sera Uygulamasi");
  dht.begin();
    pinMode(3, OUTPUT);
    pinMode(4, OUTPUT);
}

void loop() {
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("DHT sensorunden veri okunamadi!");
    return;
  }
  if(t>=40)
  {
      Serial.print("Sera sicakligi=");
      Serial.print(t);
      Serial.print("Fanlar calistiriliyor...");
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
  }
  else
  {
      Serial.print("Sera sicakligi=");
      Serial.print(t);
      Serial.print("Fanlar durduruluyor...");
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
  }
}

Uygulamanın Proteus programındaki çizimi aşağıda verilmiştir benzer bir çizimi yapıp sizde kodunuzu deneyebilirsiniz